<?php

/**
 * @file
 * This module places tabs on tournament brackets.
 *
 * @author Jim Bullington <jimb@jrbcs.com>
 */

//=========================================================================
// drupal hooks
//=========================================================================

/**
 * Implementation of hook_menu().
 */
function bracket_tabs_menu() {

  $items = array();

  $items['admin/config/content/bracket/bracket-tabs'] = array(
    'title' => 'Bracket Tabs',
    'description' => t('Change bracket tabs settings'),
    'page callback' => 'bracket_tabs_settings',
    'access callback' => 'user_access',
    'access arguments' => array('administer site configuration'),
    'type' => MENU_NORMAL_ITEM,
  );
  
  return $items;
}

/**
 * Implementation of hook_theme().
 */
function bracket_tabs_theme() {
  
  $theme = array(
    'bracket_tabs_view' => array(
      'variables' => array('node' => NULL, 'teaser' => NULL, 'page' => NULL),
    )
  );
  return $theme;
}

/**
 * Implementation of hook_node_view().
 */
function bracket_tabs_node_view($node, $view_mode, $langcode) {

  // must be a bracket view not teaser
  if ($node->type == 'bracket') {
    if ($view_mode == 'full') {
      $node->content['tabs'] = array(
        '#markup' => theme('bracket_tabs_view', array('node' => $node, 'view_mode' => $view_mode)),
        '#weight' => 9
      );    
    }
  }
}

/**
 * Theming function for bracket_tabs_view
 */
function theme_bracket_tabs_view($variables) {

  $node = $variables['node'];
  $view_mode = $variables['view_mode'];

  $output = '';
  
  // query for matching brackets based on match criteria
  $sql = "SELECT n.nid, b.season, b.sport, b.division, b.brgroup 
          FROM {node} n 
          JOIN {bracket} b on b.nid = n.nid 
          WHERE n.type = 'bracket'";
  $match = variable_get('bracket_tabs_match', array());
  $title = variable_get('bracket_tabs_title', '');
  $args = array();
  // must be criteria specified as well as bracket fields present
  if (count($match) > 0 && $title != '' &&
      ($node->season || $node->sport || 
       $node->division || $node->brgroup)) {
    foreach ($match as $m) {
      if ($m === 'season') {
        $sql .= " AND b.season = :season";
        $args[':season'] = $node->season;
      }
      elseif ($m === 'sport') {
        $sql .= " AND b.sport = :sport";
        $args[':sport'] = $node->sport;
      }
      elseif ($m === 'division') {
        $sql .= " AND b.division = :division";
        $args[':division'] = $node->division;
      }
      elseif ($m === 'group') {
        $sql .= " AND b.brgroup = :brgroup";
        $args[':brgroup'] = $node->brgroup;
      }
    }
    // if criteria found, get matching brackets
    if (count($args) > 0) {
      $tabs = array();
      $a = array();
      $result = db_query($sql, $args);
      // substitute into title
      foreach ($result as $record) {
        $tmp = $title;
        $tmp = str_replace('[season]', $record->season, $tmp);
        $tmp = str_replace('[sport]', $record->sport, $tmp);
        $tmp = str_replace('[division]', $record->division, $tmp);
        $tmp = str_replace('[group]', $record->brgroup, $tmp);
        $a[] = ltrim($tmp);
        $tabs[] .= '<li' . ($record->nid == $node->nid ? ' class="active"' : '') . '>' . 
          l(trim($tmp), 'node/' . $record->nid) . '</li>';
      }
      
      // sort by title
      array_multisort($a, $tabs);
      
      // format titles as tabs
      if (count($tabs) > 1) {
        $output .= '<div class="tabs"><ul class="tabs primary">';
        $output .= implode($tabs);
        $output .= "</ul></div>\n";
      }
    }
  }
  
  return $output;
}

//=========================================================================
// bracket_tabs settings
//=========================================================================

function bracket_tabs_settings() {

  return drupal_get_form('bracket_tabs_settings_form');
}

function bracket_tabs_settings_form($form, $form_state) {

  $form = array();

  $form['general'] = array(
    '#type' => 'fieldset',
    '#title' => t('Bracket Tabs Settings'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE
  );

  $form['general']['match'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Match Brackets With the Same'),
    '#default_value' => variable_get('bracket_tabs_match', array()),
    '#options' => array(
      'season' => t('Season'), 
      'sport' => t('Sport'), 
      'division' => t('Division'),
      'group' => t('Group')
    ),
    '#description' => t('Select fields that will group brackets together as tabs.')
  );

  $form['general']['title'] = array(
    '#type' => 'textfield',
    '#title' => t('Tab Title Pattern'),
    '#default_value' => variable_get('bracket_tabs_title', ''),
    '#description' => t('Enter the pattern to be used for bracket tabs - [season], [sport], [division], [group] will be substituted for the actual bracket values.')
  );
  
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save Configuration Settings'),
  );

  return $form;
}

function bracket_tabs_settings_form_submit($form_id, &$form_state) {

  variable_set('bracket_tabs_match', $form_state['values']['match']);
  variable_set('bracket_tabs_title', $form_state['values']['title']);

  drupal_set_message(t('Configuration settings were saved.'));
}

