<?php
/**
 * @file
 * Module file for diy_startpage.
 */


/**
 * adds needed js-files
 */
function diy_startpage_preprocess_page(&$vars) {
  drupal_add_js(drupal_get_path('module', 'diy_startpage') . '/js/jquery.maphilight.min.js');
  drupal_add_js(drupal_get_path('module', 'diy_startpage') . '/js/startpage.js');
  $vars['scripts'] = drupal_get_js(); // necessary in D7?
}

/**
 * Implements HOOK_block_info().
 */
function diy_startpage_block_info() {
  
  $blocks['diy_startpage_business'] = array(
    'info' => t('Sidebar block for area terms'),
  );

  $blocks['diy_startpage_social'] = array(
    'info' => t('Frontpage block social links'),
  );

  $blocks['diy_startpage_search_tabs'] = array(
    'info' => t('Frontpage block navigator tabs'),
  );

  foreach(array('knowledge', 'craftsman', 'projects', 'guidebook') as $block_category) {
    $blocks['diy_startpage_search_' . $block_category] = array(
      'info' => t('Frontpage block navigator ' . $block_category),
    );
  }

  foreach(array(1,2,3) as $block_text_number) {
    $blocks['diy_startpage_text_block_' . $block_text_number] = array(
      'info' => t('Frontpage block text ' . $block_text_number),
    );
  }

  return $blocks;
}


/**
 * Implements HOOK_block_view().
 */
function diy_startpage_block_view($delta = '') {
  $block = array();

  switch ($delta) {
    case 'diy_startpage_business':
      $block['subject'] = t('topic selection');
      $block['content'] = diy_startpage_business_content();
      break;
    case 'diy_startpage_social':
      $block['content'] = diy_startpage_social_links();
      break;
    case 'diy_startpage_search_knowledge':
      $block['content'] = diy_startpage_navigator_blocks(1);
      break;
    case 'diy_startpage_search_craftsman':
      $block['content'] = diy_startpage_navigator_blocks(2);
      break;
    case 'diy_startpage_search_projects':
      $block['content'] = diy_startpage_navigator_blocks(3);
      break;
    case 'diy_startpage_search_guidebook':
      $block['content'] = diy_startpage_navigator_blocks(4);
      break;
    case 'diy_startpage_search_tabs':
      $block['content'] = diy_startpage_navigator_block_tabs();
      break;
    case 'diy_startpage_text_block_1':
      $block['content'] = diy_startpage_text_blocks(1);
      break;
    case 'diy_startpage_text_block_2':
      $block['content'] = diy_startpage_text_blocks(2);
      break;
    case 'diy_startpage_text_block_3':
      $block['content'] = diy_startpage_text_blocks(3);
      break;
  }
  return $block;
}

/*
 * Block callback
 */
function diy_startpage_social_links() {
  $heading = variable_get('diy_defaults_pfrontpage_social_heading', '');
  $google = variable_get('diy_defaults_pfrontpage_social_plus', '');
  $facebook = variable_get('diy_defaults_pfrontpage_social_facebook', '');
  $youtube = variable_get('diy_defaults_pfrontpage_social_youtube', '');

  $logo = theme_image(array('path' => drupal_get_path('theme', 'diy') . '/images/prefooter_text_logo_small.png', 'alt' => t('DIY Logo'), 'attributes' => array('class' => 'logo')));

  if($google) {
    $google = l(theme_image(array('path' => drupal_get_path('theme', 'diy') . '/images/social_google.png', 'attributes' => array())), $google, array('html' => true, 'attributes' => array('target' => '_blank', 'class' => 'social-icon google')));
  }
  if($facebook) {
    $facebook = l(theme_image(array('path' => drupal_get_path('theme', 'diy') . '/images/social_facebook.png', 'attributes' => array())), $facebook, array('html' => true, 'attributes' => array('target' => '_blank', 'class' => 'social-icon facebook')));
  }
  if($youtube) {
    $youtube = l(theme_image(array('path' => drupal_get_path('theme', 'diy') . '/images/social_youtube.png', 'attributes' => array())), $youtube, array('html' => true, 'attributes' => array('target' => '_blank', 'class' => 'social-icon youtube')));
  }

  return theme('diy_startpage_social', array(
    'logo' => $logo,
    'heading' => $heading,
    'google' => $google,
    'facebook' => $facebook,
    'youtube' => $youtube
  ));
}

/*
 * Block callback for frontpage text blocks
 */
function diy_startpage_text_blocks($delta) {
  $title = variable_get('diy_defaults_pfrontpage_text_heading' . $delta, '');
  $content = variable_get('diy_defaults_pfrontpage_text_content' . $delta, '');

  if(!($title || $content)) {
    return;
  }

  $logo = theme_image(array('path' => drupal_get_path('theme', 'diy') . '/images/prefooter_text_logo.png', 'alt' => t('DIY Logo'), 'attributes' => array()));

  return theme('diy_startpage_text', array('title' => $title, 'content' => $content, 'image' => $logo));
}

function diy_startpage_navigator_block_tabs() {
  $data = _diy_startpage_get_navigator_data_all();

  $config = array(
    'grid-width' => 12 / count($data)
   );

  return theme('diy_startpage_navigator_tabs', array('sections' => $data, 'config' => $config));
}

function _diy_startpage_get_navigator_data_all() {
  $data = array();

  foreach(array(1,2,3,4) as $delta) {
    $nav_data = _diy_startpage_get_navigator_data($delta);

    if(isset($nav_data['tab']['title']) && !empty($nav_data['tab']['title'])) {
      $data[$delta] = $nav_data;
    }
  }

  return $data;
}

function _diy_startpage_get_navigator_data($delta) {
  $data = array();

  $data['tab']['title'] = variable_get('diy_defaults_pfrontpage_navigator_tab_header' . $delta, '');
  $data['tab']['text'] = variable_get('diy_defaults_pfrontpage_navigator_tab_text' . $delta, '');
  $data['tab']['class'] = variable_get('diy_defaults_pfrontpage_navigator_class' . $delta, '');

  if($image = variable_get('diy_defaults_pfrontpage_navigator_tab_image' . $delta, '')) {
    $file = file_load($image);
    $data['tab']['image'] = theme_image(array('path' => $file->uri, 'attributes' => array()));
  }

  $data['section']['title'] = variable_get('diy_defaults_pfrontpage_navigator_heading' . $delta, '');
  $data['section']['content'] = variable_get('diy_defaults_pfrontpage_navigator_content' . $delta, '');
  $data['section']['action_link']= variable_get('diy_defaults_pfrontpage_navigator_action_link' . $delta, '');
  $data['section']['action_text'] = variable_get('diy_defaults_pfrontpage_navigator_action_text' . $delta, '');


  if($quote_image = variable_get('diy_defaults_pfrontpage_navigator_quote_image' . $delta, '')) {
    $file = file_load($quote_image);
    $config = array(
            "style_name" => "medium",
            "path" => $file->uri,
            "height" => NULL,
            "width" => NULL,
          );

    $data['quote']['image'] = theme_image_style($config);
  }
  $data['quote']['citation'] = variable_get('diy_defaults_pfrontpage_navigator_quote_citation' . $delta, '');
  $data['quote']['name'] = variable_get('diy_defaults_pfrontpage_navigator_quote_name' . $delta, '');

  return $data;
}

/*
 * Block callback
 */
function diy_startpage_navigator_blocks($delta) {
  $data = _diy_startpage_get_navigator_data($delta);

  if(empty($data['tab']['title'])) {
    return;
  }
  $quote = $data['quote'];
  $data = $data['section'];

  $title = $data['title'];
  $content = $data['content'];

  $action_link = $data['action_link'];
  $action_text = $data['action_text'];

  $config = array(
    'title' => $title,
    'content' => $content
  );

  $config += array(
    'quote' => $quote
  );

  if($action_link && $action_text) {
    $link_arguments = array();

    if(strpos($action_link,'?') !== false) {
      $link_explode = explode('?', $action_link);
      $action_link = array_shift($link_explode);

      $arguments = explode('&', array_shift($link_explode));
      if(is_array($arguments)) {
        foreach($arguments as $pair) {
          $kv = explode('=', $pair);
          $link_arguments[$kv[0]] = $kv[1];
        }
      }
    }

    $link_options = array('attributes' => array('class' => 'action-link'));

    if(!empty($link_arguments)) {
      $link_options += array('query' => $link_arguments);
    }

    $config += array(
      'action_link' => l($action_text, $action_link, $link_options)
    );
  }

  switch($delta) {
    case 1:
      $form = drupal_get_form('diy_startpage_navigator_knowledge_form');
      $rendered_form = drupal_render($form);

      $config += array(
        'form' => $rendered_form,
      );
      break;
    case 2:
      $form = drupal_get_form('diy_startpage_navigator_craftsman_form');
      $rendered_form = drupal_render($form);

      $config += array(
        'form' => $rendered_form,
      );
      break;
    case 3:
      $form = drupal_get_form('diy_startpage_navigator_project_form');
      $rendered_form = drupal_render($form);

      $config += array(
        'form' => $rendered_form,
      );
      break;
  }

  return theme('diy_startpage_navigator', $config);
}

/**
 * Form for knowledge frontpage block.
 */
function diy_startpage_navigator_craftsman_form() {
  $terms = taxonomy_get_tree(5,0,1);

  foreach ($terms as $data) {
    $output[$data->tid] = $data->name;
  }

  $form['what'] = array (
    '#title' => t('What? eg. plumber'),
    '#type' => 'textfield',
    '#attributes' =>array('placeholder' => t('What? eg. plumber'))
  );
  $form['location'] = array (
    '#title' => t('Where? eg. 1220 Vienna'),
    '#type' => 'textfield',
    '#attributes' =>array('placeholder' => t('Where? eg. 1220 Vienna'))
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Search')
  );

  return $form;
}

/**
 * Submit handler for knowledge frontpage block.
 */
function diy_startpage_navigator_craftsman_form_submit($form, &$form_state) {
  $view = views_get_view('heimwerker_suchen');
  $view->set_display('page');

  if(!empty($form_state['values']['what']) || !empty($form_state['values']['location'])) {
    $options = array('query' => array());

    if(!empty($form_state['values']['what'])) {
      $options['query'] += array('search_api_views_fulltext' => $form_state['values']['what']);
    }
    if(!empty($form_state['values']['location'])) {
      $options['query'] += array('address' => $form_state['values']['location']);
    }
    drupal_goto($view->get_url(), $options);
  } else {
    drupal_goto($view->get_url());
  }
}

/**
 * Form for knowledge frontpage block.
 */
function diy_startpage_navigator_project_form() {
  $terms = taxonomy_get_tree(5,0,1);
  $output[0] = t('Category');

  foreach ($terms as $data) {
    $output[$data->tid] = $data->name;
  }

  $form['select'] = array (
    '#title' => t('category'),
    '#type' => 'select',
    '#options' => $output,
  );
  $form['location'] = array (
    '#title' => t('Where? eg. 1220 Vienna'),
    '#type' => 'textfield',
    '#attributes' =>array('placeholder' => t('Where? eg. 1220 Vienna'))
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Search')
  );

  return $form;
}

/**
 * Submit handler for knowledge frontpage block.
 */
function diy_startpage_navigator_project_form_submit($form, &$form_state) {
  $view = views_get_view('inserate_suche_map');
  $view->set_display('page');

  if((!empty($form_state['values']['select']) && $form_state['values']['select'] != 0) || !empty($form_state['values']['location'])) {
    $options = array('query' => array());

    if(!empty($form_state['values']['select']) && $form_state['values']['select'] != 0) {
      $options['query'] += array('f[0]' => 'field_inserat_branchen:' . intval($form_state['values']['select']));
    }
    if(!empty($form_state['values']['location'])) {
      $options['query'] += array('address' => $form_state['values']['location']);
    }
    drupal_goto($view->get_url(), $options);
  } else {
    drupal_goto($view->get_url());
  }
}

/**
 * Form for knowledge frontpage block.
 */
function diy_startpage_navigator_knowledge_form() {
  $terms = taxonomy_get_tree(5,0,1);
  $output[0] = t('Categoryselect');

  foreach ($terms as $data) {
    $output[$data->tid] = $data->name;
  }

  $form['select'] = array (
    '#title' => t('do it yourself'),
    '#type' => 'select',
    '#options' => $output,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Search')
  );

  return $form;
}

/**
 * Submit handler for knowledge frontpage block.
 */
function diy_startpage_navigator_knowledge_form_submit($form, &$form_state) {
  if(!empty($form_state['values']['select']) && $form_state['values']['select'] != 0) {
    drupal_goto('taxonomy/term/' . intval($form_state['values']['select']));
  } else {
    drupal_goto('<front>');
  }
}

/**
 * Implements HOOK_views_pre_execute().
 */
function diy_startpage_views_pre_view(&$view) {  
  global $language;
  if($view->name == 'taxonomy_search') {
    if(isset($view->args[0])) {
      if($term = taxonomy_term_load($view->args[0])) {
        
        // meta tags a are complicated here
        // the url parameter contains the term id of area (eg. living room)
        // a view lines down, we are changing the argument handling to the terms
        // used by apache solr. so we have to do metatag stuff by hand.
        metatag_entity_view($term, 'taxonomy_term', 'full', $language);
        
        // if term is bereich, change args to linked businesses        
        if($term->vid == 7) {
          
          // set to all
          // if no field_businesses are set, show all
          $view->args[0] = 'all';
            
          #$house = diy_startpage_area_channel();
          
          #$view->attachment_before = $house;
          $field_items = field_get_items('taxonomy_term', $term, 'field_business');
          if(!empty($field_items)) {
            $businesses = array_map(function($item) { return $item['tid']; }, $field_items);
            
            $view->args[0] = implode(',', $businesses);
          } 
        }
      }
    }    
  }
  
  if($view->name == 'startpage') {
    #$house = diy_startpage_area_channel();
    #$view->attachment_before = $house;
  }
}

/**
 * Callback function for business 
 */
function diy_startpage_business_content() {

  if(arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
    if($term = taxonomy_term_load(arg(2))) {
      if($term->vid == 7) {
        
        $businesses = field_get_items('taxonomy_term', $term, 'field_business');
        
        if(!empty($businesses)) {
          $links = array();
          
          foreach($businesses as $business) {
            if($business_term = taxonomy_term_load($business['tid'])) {
              $links[] = array(
                'href' => 'taxonomy/term/' . $business_term->tid,
                'title' => $business_term->name,
              ); 
            }
          }
          
          return theme('links', array(
            'links' => $links, 
            'attributes' => array()
          ));
        }
      }
    }
  }
  
  return FALSE;
}

/**
 * Implements HOOK_theme().
 */
function diy_startpage_theme($existing, $type, $theme, $path) {
  return array(
    'diy_startpage_house' => array(
      'template' => 'house',
      'variables' => array(
        'links' => array(),
        'image' => NULL,
      )
    ),
    'diy_startpage_navigator' => array(
      'template' => 'navigator',
      'variables' => array(
        'title' => NULL,
        'content' => NULL,
        'link' => NULL,
        'action_link' => NULL,
        'form' => NULL,
        'quote' => array()
      )
    ),
    'diy_startpage_navigator_tabs' => array(
      'template' => 'navigator_tabs',
      'variables' => array(
        'sections' => array(),
        'config' => array()
      )
    ),
    'diy_startpage_text' => array(
      'template' => 'text',
      'variables' => array(
        'title' => NULL,
        'content' => NULL,
        'image' => NULL
      )
    ),
    'diy_startpage_social' => array(
      'template' => 'social',
      'variables' => array(
        'heading' => NULL,
        'google' => NULL,
        'facebook' => NULL,
        'youtube' => NULL,
        'logo' => NULL
      )
    ),
  );
}

/**
 * Generates house and links
 */
function diy_startpage_area_channel() {
  // check for house - if not set, use detault
  $house = file_create_url(drupal_get_path('module', 'diy_startpage') . '/img/house.png');
  
  foreach(array(1,2,3,4) as $number) {
    if($current_image = variable_get('diy_defaults_frontpage_image' . $number, '')) {
      $start = variable_get('diy_defaults_frontpage_date'. $number .'_start', '');
      $end = variable_get('diy_defaults_frontpage_date'. $number .'_end', '');      
      
      $start_timestamp = mktime(0, 0, 0, $start['month'], $start['day'], $start['year']);
      $end_timestamp = mktime(23, 59, 59, $end['month'], $end['day'], $end['year']);
      
      $now = time();
      if($now > $start_timestamp && $now < $end_timestamp) {     
        if($house = file_create_url(file_load($current_image)->uri)) {
          break; 
        }
      }
    }
  }
  
  $links = array();
  $tree = taxonomy_get_tree(7, 71);
  if($tree) {
    foreach($tree as $term) {
      $links[$term->tid] = array('url' => url('taxonomy/term/' . $term->tid), 'title' => check_plain($term->name));
      
      // mark active term
      if(arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
        if($term_url = taxonomy_term_load(arg(2))) {
          if($term_url->vid == 7 && $term_url->tid == $term->tid) {
            $links[$term->tid] += array('active' => TRUE);
          }
        }
      }
    }
  }
  
  return theme('diy_startpage_house', array('links' => $links, 'image' => $house));
}