<?php

/**
 * Implementation of HOOK_permission().
 */
function diy_defaults_permission() {
  return array(
    'administer diy defaults' => array(
      'title' => t('Administer diy defaults'),
      'description' => t('Set stuff like nodes for 404, no result,...'),
    ),
  );
}

/**
 * Implementation of HOOK_theme().
 */
function diy_defaults_theme() {
  return array(
    'node__searchbox' => array(
      'render element' => 'elements',
      'template' => 'node--searchbox',
      'path' => drupal_get_path('module', 'diy_defaults') .'/templates'
    )
  );
}

/**
 * Implementation of HOOK_preprocess_node().
 */
function diy_defaults_preprocess_node(&$variables) {
  
  // get user setting
  $user_nids = variable_get('diy_defaults_special_node_theme', '');
  
  if($user_nids) {
    $nids = explode(',', $user_nids);
    $nid = $variables['nid'];
    
    // if current nid is in user_nids -> go for special template file
    if(in_array($nid, $nids)) {
      $variables['theme_hook_suggestion'] = 'node__searchbox';
      
      $variables['classes_array'][] = 'node-searchbox';
      
      // add block content for search
      $block = block_load('views', '-exp-page_search-page');
      $block_content = _block_render_blocks(array($block));
      $block_renderable = _block_get_renderable_array($block_content);
      $output = drupal_render($block_renderable);  
      #$variables['searchblock'] = $output;
      
      // Replace search-string in text with url variable
      $replace_search_with = '';
      if(isset($_GET['search']) && !empty($_GET['search'])) {
        $replace_search_with = check_plain($_GET['search']);
      }
      
      $variables['content']['body'][0]['#markup'] = strtr($variables['content']['body'][0]['#markup'], array('[DIY:searchphrase]' => $replace_search_with));
      
    }
  }
}

/**
 * Implements hook_menu().
 */
function diy_defaults_menu() {
  $items = array();

  $items['admin/config/diy'] = array(
    'title' => 'DIY',
    'description' => 'Change global diy settings',
    'position' => 'right',
    'weight' => -100,
    'page callback' => 'system_admin_menu_block_page',
    'access arguments' => array('administer site configuration'),
    'file' => 'system.admin.inc',
    'file path' => drupal_get_path('module', 'system'),
  );

  $items['admin/config/diy/diy'] = array(
    'title' => 'DIY settings',
    'description' => 'Configuration for diy site',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('diy_defaults_settings_form'),
    'access arguments' => array('administer diy defaults'),
    'type' => MENU_NORMAL_ITEM,
  );
  
  $items['admin/config/diy/frontpage'] = array(
    'title' => 'Frontpage (Knowledge)',
    'description' => 'Configuration for frontpage',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('diy_defaults_frontpage_settings_form'),
    'access arguments' => array('administer diy defaults'),
    'type' => MENU_NORMAL_ITEM,
  );

  $items['admin/config/diy/frontpage-portal'] = array(
    'title' => 'Frontpage (Portal)',
    'description' => 'Configuration for portal frontpage',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('diy_defaults_frontpage_portal_settings_form'),
    'access arguments' => array('administer diy defaults'),
    'type' => MENU_NORMAL_ITEM,
  );

  $items['admin/config/diy/search'] = array(
    'title' => 'Search',
    'description' => 'Configuration for search',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('diy_defaults_search_pages_settings_form'),
    'access arguments' => array('administer diy defaults'),
    'type' => MENU_NORMAL_ITEM,
  );

  $items['admin/config/diy/sections'] = array(
    'title' => 'Sections',
    'description' => 'Configuration for different page sections',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('diy_defaults_sections_settings_form'),
    'access arguments' => array('administer diy defaults'),
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}

/**
 * Page callback: DIY settings
 */
function diy_defaults_settings_form($form, &$form_state) {

  $form['diy_defaults_cookie_consent_options'] = array(
    '#type' => 'textarea',
    '#title' => t('Cookie consent options'),
    '#default_value' => variable_get('diy_defaults_cookie_consent_options', ''),
    '#description' => t('See https://silktide.com/tools/cookie-consent/download Paste the inline javascript config here (window...window.cookieconsent_options = {"message":...).'),
    '#required' => FALSE,
  );

  $form['diy_defaults_special_node_theme'] = array(
    '#type' => 'textfield',
    '#title' => t('Nodes with error-page theme'),
    '#default_value' => variable_get('diy_defaults_special_node_theme', ''),
    '#description' => t('Enter node ids, separated by semicolon. [DIY:searchphrase] is available on these pages for search string.'),
    '#size' => 35,
    '#required' => FALSE,
  );

  $form['diy_defaults_default_header'] = array(
    '#type' => 'textfield',
    '#title' => t('Node ID for default header'),
    '#default_value' => variable_get('diy_defaults_default_header', ''),
    '#description' => t('Enter one node id. Header is used if no other header is displayed.'),
    '#size' => 35,
    '#required' => FALSE,
  );

  $form['diy_defaults_default_header_error'] = array(
    '#type' => 'textfield',
    '#title' => t('Node ID for error header'),
    '#default_value' => variable_get('diy_defaults_default_header_error', ''),
    '#description' => t('Enter one node id. Header is used if page is 404/403.'),
    '#size' => 35,
    '#required' => FALSE,
  );

  $form['diy_defaults_nid_data_privacy'] = array(
    '#type' => 'textfield',
    '#title' => t('Node ID for data privacy page'),
    '#default_value' => variable_get('diy_defaults_nid_data_privacy', ''),
    '#size' => 35,
    '#required' => FALSE,
  );

  $form['diy_defaults_bauen_renovieren_term'] = array(
    '#type' => 'textfield',
    '#title' => t('Bauen/Renovieren term'),
    '#default_value' => variable_get('diy_defaults_bauen_renovieren_term', '71'),
    '#description' => t('Used for generating dropdown on knowledge frontpage section.'),
    '#size' => 35,
    '#required' => FALSE,
  );

  $form['diy_defaults_social_login'] = array(
    '#type' => 'fieldset',
    '#title' => t('Login radius settings'),
    '#weight' => 5,
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
  );

  $form['diy_defaults_social_login']['diy_defaults_social_login_key'] = array(
    '#type' => 'textfield',
    '#title' => t('Overwrite key'),
    '#default_value' => variable_get('diy_defaults_social_login_key', ''),
    '#description' => t('Overwrite key for all domains.'),
    '#size' => 35,
    '#required' => FALSE,
  );

  $form['diy_defaults_social_login']['diy_defaults_social_login_secret'] = array(
    '#type' => 'textfield',
    '#title' => t('Overwrite secret'),
    '#default_value' => variable_get('diy_defaults_social_login_secret', ''),
    '#description' => t('Overwrite secret for all domains.'),
    '#size' => 35,
    '#required' => FALSE,
  );

  $form['diy_defaults_custom_css_aggregation'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable diy CSS aggregation'),
    '#default_value' => variable_get('diy_defaults_custom_css_aggregation', false),
    '#description' => t('En- or Disable diy CSS aggregation'),
    '#required' => FALSE,
  );

  $form['diy_defaults_custom_js_aggregation'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable diy JS aggregation'),
    '#default_value' => variable_get('diy_defaults_custom_js_aggregation', false),
    '#description' => t('En- or Disable diy JS aggregation'),
    '#required' => FALSE,
  );

  $form['diy_defaults_custom_css_compression'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable diy CSS compression'),
    '#default_value' => variable_get('diy_defaults_custom_css_compression', false),
    '#description' => t('En- or Disable diy CSS compression (not implemented yet, but prepared)'),
    '#required' => FALSE,
  );

  $form['diy_defaults_custom_js_compression'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable diy JS compression'),
    '#default_value' => variable_get('diy_defaults_custom_js_compression', false),
    '#description' => t('En- or Disable diy JS compression (not implemented yet, but prepared)'),
    '#required' => FALSE,
  );

  $form['diy_defaults_metatag_reset'] = array(
    '#type' => 'fieldset',
    '#title' => t('Fix Metatag Language for Terms'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );


  $options = array('0' => 'select');
  $vocabs = taxonomy_get_vocabularies();
  foreach($vocabs as $vid => $vocab) {
    $options[$vid] = $vocab->name;
  }

  $form['diy_defaults_metatag_reset']['update_metatags_vocabulary'] = array(
    '#type' => 'select',
    '#title' => t('Vocabulary'),
    '#options' => $options
  );

  $form['diy_defaults_metatag_reset']['update_metatags'] = array(
    '#type' => 'submit',
    '#value' => 'Update Language on Metatag configs',
    '#submit' => array('diy_defaults_update_metatag_languages')
  );



  return system_settings_form($form);
}

/**
 * Action button callback, settings form
 */
function diy_defaults_update_metatag_languages($form, &$form_state) {
  if($vid = $form_state['values']['update_metatags_vocabulary']) {

    $query = new EntityFieldQuery();
    $result = $query
      ->entityCondition('entity_type', 'taxonomy_term')
      ->propertyCondition('vid', (int) $vid, '=')
      ->execute();

    if(isset($result['taxonomy_term']) && !empty($result['taxonomy_term'])) {
      $tids = array_keys($result['taxonomy_term']);
      $terms = taxonomy_term_load_multiple($tids);

      foreach($terms as $term) {
        $tid = $term->tid;
        $language = $term->language;

        $result = db_select('metatag', 'm')
          ->fields('m')
          ->condition('entity_type', 'taxonomy_term','=')
          ->condition('entity_id', $tid,'=')
          ->condition('language', $language,'=')
          ->execute()
          ->fetchAssoc();

        if(!$result) {

          $num_updated = db_update('metatag')
            ->fields(array(
              'language' => $language
            ))
            ->condition('entity_type', 'taxonomy_term', '=')
            ->condition('entity_id', $tid, '=')
            ->condition('language', 'und', '=')
            ->execute();

          if($num_updated) {
            drupal_set_message('Updated language of term ' . $term->name .' from UND to ' . $language);
          }
        }
      }

    }

  } else {
    drupal_set_message(t('No taxonomy selected'), 'warning');
  }
}

/**
 * Page callback: DIY settings
 */
function diy_defaults_search_pages_settings_form() {
  $form = array();
  $rows = array();

  $options = array(
    '0' => t('Default'),
    '2' => '2',
    '3' => '3',
    '4' => '4',
    '5' => '5',
    '6' => '6',
    '7' => '7',
    '8' => '8',
    '9' => '9',
    '10' => '10',
  );

  $headers = array(t('type'), t('Weight'));

  $node_types = node_type_get_types();
  foreach ($node_types as $node_type) {
    $default = variable_get('diy_defaults_node_rank_by_type_' . $node_type->type, 0);

    $this_options = $options;
    if ($default > 1) {
      unset($this_options[(string) $default]);
      $this_options = array_reverse($this_options, TRUE);
      $this_options[(string) $default] = $default;
      $this_options = array_reverse($this_options, TRUE);
    }

    // Create the form element.
    $form['content_ranking']['diy_defaults_node_rank_by_type_' . $node_type->type] = array(
      '#title' => $node_type->name,
      '#type' => 'select',
      '#options' => $this_options,
      '#title_display' => 'invisible',
      '#name' => 'diy_defaults_node_rank_by_type_' . $node_type->type,
    );
    // Add it to the table.
    $row = array();
    $row[] = $node_type->name;
    $row[] = drupal_render($form['content_ranking']['diy_defaults_node_rank_by_type_' . $node_type->type]);
    $rows[] = $row;
  }
  $form['content_ranking']['solr_boost_by_node_type_config'] = array(
    '#markup' => theme('table', array('header' => $headers, 'rows' => $rows)),
  );

  return system_settings_form($form);
}

/**
 * Page callback: DIY sections settings
 */
function diy_defaults_sections_settings_form($form, &$form_state) {

  $form['diy_defaults_sections_hw'] = array(
    '#type' => 'textarea',
    '#title' => t('Section craftsman (yellow)'),
    '#default_value' => variable_get('diy_defaults_sections_hw'),
    '#description' => t('one path per line (eg: node/12 or contact)'),
    '#rows' => 5
  );

  $form['diy_defaults_sections_ins'] = array(
    '#type' => 'textarea',
    '#title' => t('Section insertion (blue)'),
    '#default_value' => variable_get('diy_defaults_sections_ins'),
    '#description' => t('one path per line (eg: node/12 or contact)'),
    '#rows' => 5
  );

  $form['diy_defaults_sections_diy'] = array(
    '#type' => 'textarea',
    '#title' => t('Section diy (green)'),
    '#default_value' => variable_get('diy_defaults_sections_diy'),
    '#description' => t('one path per line (eg: node/12 or contact)'),
    '#rows' => 5
  );

  $form['diy_defaults_sections_rg'] = array(
    '#type' => 'textarea',
    '#title' => t('Section guidebook (red)'),
    '#default_value' => variable_get('diy_defaults_sections_rg'),
    '#description' => t('one path per line (eg: node/12 or contact)'),
    '#rows' => 5
  );

  return system_settings_form($form);
}


/**
 * Page callback: DIY frontpage settings
 */
function diy_defaults_frontpage_settings_form($form, &$form_state) {
  
  foreach(array(1, 2, 3, 4) as $number) {
    $form['diy_defaults_frontpage' . $number] = array(
      '#type' => 'fieldset',
      '#title' => t('Image') . ' ' . $number,
      '#weight' => -100 + $number,
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    );
    if($number == 1) {
      $form['diy_defaults_frontpage' . $number]['#collapsed'] = FALSE;
    }
    
    $form['diy_defaults_frontpage' . $number]['diy_defaults_frontpage_image' . $number] = array(
      '#title' => t('Image'),
      '#type' => 'managed_file',
      '#default_value' => variable_get('diy_defaults_frontpage_image' . $number, ''),
      '#upload_location' => 'public://frontpage/',
    );
    $form['diy_defaults_frontpage' . $number]['diy_defaults_frontpage_date'. $number .'_start'] = array(
      '#type' => 'date',
      '#title' => t('Start'),
      '#default_value' => variable_get('diy_defaults_frontpage_date'. $number .'_start', ''),
      '#description' => t('Start of day (00:00:00)'),
    );
    $form['diy_defaults_frontpage' . $number]['diy_defaults_frontpage_date'. $number .'_end'] = array(
      '#type' => 'date',
      '#title' => t('End'),
      '#default_value' => variable_get('diy_defaults_frontpage_date'. $number .'_end', ''),
      '#description' => t('End of day (23:59:59)'),
    );
  } 
  
  $form['#submit'][] = 'diy_defaults_frontpage_settings_form_submit';
  
  return system_settings_form($form);
}

/**
 * Page callback: DIY frontpage settings
 */
function diy_defaults_frontpage_portal_settings_form($form, &$form_state) {

  $form['pfrontpage_navigator'] = array(
    '#type' => 'fieldset',
    '#title' => t('Navigator'),
    '#collapsible' => true,
    '#collapsed' => false,
  );

  foreach(array(1, 2, 3) as $number) {
    $form['pfrontpage_navigator']['navigator' . $number] = array(
      '#type' => 'fieldset',
      '#title' => t('Navigator ' . $number),
      '#collapsible' => true,
      '#collapsed' => true,
    );

    $form['pfrontpage_navigator']['navigator' . $number]['diy_defaults_pfrontpage_navigator_tab_header' . $number] = array(
      '#type' => 'textfield',
      '#title' => t('Heading'),
      '#default_value' => variable_get('diy_defaults_pfrontpage_navigator_tab_header' . $number, ''),
      '#size' => 30,
      '#required' => FALSE,
    );

    $form['pfrontpage_navigator']['navigator' . $number]['diy_defaults_pfrontpage_navigator_tab_text' . $number] = array(
      '#type' => 'textarea',
      '#title' => t('Text'),
      '#default_value' => variable_get('diy_defaults_pfrontpage_navigator_tab_text' . $number, ''),
      '#required' => FALSE,
    );

    $form['pfrontpage_navigator']['navigator' . $number]['diy_defaults_pfrontpage_navigator_tab_image' . $number] = array(
      '#title' => t('Icon'),
      '#type' => 'managed_file',
      '#default_value' => variable_get('diy_defaults_pfrontpage_navigator_tab_image' . $number, ''),
      '#upload_location' => 'public://frontpage/',
    );

    $form['pfrontpage_navigator']['navigator' . $number]['diy_defaults_pfrontpage_navigator_action_link' . $number] = array(
      '#type' => 'textfield',
      '#title' => t('Action Link'),
      '#default_value' => variable_get('diy_defaults_pfrontpage_navigator_action_link' . $number, ''),
      '#size' => 30,
      '#required' => FALSE,
    );

    $form['pfrontpage_navigator']['navigator' . $number]['diy_defaults_pfrontpage_navigator_action_text' . $number] = array(
      '#type' => 'textfield',
      '#title' => t('Action Text'),
      '#default_value' => variable_get('diy_defaults_pfrontpage_navigator_action_text' . $number, ''),
      '#size' => 30,
      '#required' => FALSE,
    );
  }

  $form['pfrontpage_header'] = array(
    '#type' => 'fieldset',
    '#title' => t('Header'),
    '#collapsible' => true,
    '#collapsed' => true,
  );

  $form['pfrontpage_header']['diy_defaults_startpage_header_text'] = array(
    '#title' => t('Content'),
    '#type' => 'textarea',
    '#default_value' => variable_get('diy_defaults_startpage_header_text'),
  );

  $form['pfrontpage_social'] = array(
    '#type' => 'fieldset',
    '#title' => t('Social block'),
    '#collapsible' => true,
    '#collapsed' => true,
  );
  $form['pfrontpage_social']['diy_defaults_pfrontpage_social_heading'] = array(
    '#type' => 'textfield',
    '#title' => t('Heading'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_social_heading', ''),
    '#size' => 60,
    '#required' => FALSE,
  );
  $form['pfrontpage_social']['diy_defaults_pfrontpage_social_plus'] = array(
    '#type' => 'textfield',
    '#title' => t('Google plus link'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_social_plus', ''),
    '#size' => 60,
    '#required' => FALSE,
  );
  $form['pfrontpage_social']['diy_defaults_pfrontpage_social_facebook'] = array(
    '#type' => 'textfield',
    '#title' => t('Facebook link'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_social_facebook', ''),
    '#size' => 60,
    '#required' => FALSE,
  );
  $form['pfrontpage_social']['diy_defaults_pfrontpage_social_youtube'] = array(
    '#type' => 'textfield',
    '#title' => t('Youtube link'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_social_youtube', ''),
    '#size' => 60,
    '#required' => FALSE,
  );

  $form['pfrontpage_text'] = array(
    '#type' => 'fieldset',
    '#title' => t('Info text'),
    '#collapsible' => true,
    '#collapsed' => true,
  );
  $form['pfrontpage_text']['diy_defaults_pfrontpage_text_heading1'] = array(
    '#type' => 'textfield',
    '#title' => t('Heading'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_text_heading1', ''),
  );
  $form['pfrontpage_text']['diy_defaults_pfrontpage_text_content1'] = array(
    '#type' => 'textarea',
    '#title' => t('Content'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_text_content1', ''),
  );
  $form['pfrontpage_text']['diy_defaults_pfrontpage_quote'] = array(
    '#type' => 'textfield',
    '#title' => t('Quote'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_quote', ''),
  );
  $form['pfrontpage_text']['diy_defaults_pfrontpage_portrait'] = array(
    '#title' => t('Portrait'),
    '#type' => 'managed_file',
    '#default_value' => variable_get('diy_defaults_pfrontpage_portrait', ''),
    '#upload_location' => 'public://frontpage/',
  );
  $form['pfrontpage_text']['diy_defaults_pfrontpage_signature'] = array(
    '#title' => t('Signature'),
    '#type' => 'managed_file',
    '#default_value' => variable_get('diy_defaults_pfrontpage_signature', ''),
    '#upload_location' => 'public://frontpage/',
  );

  $form['pfrontpage_why'] = array(
    '#type' => 'fieldset',
    '#title' => t('Why diybook'),
    '#collapsible' => true,
    '#collapsed' => true,
  );
  $form['pfrontpage_why']['diy_defaults_pfrontpage_why_headline'] = array(
    '#type' => 'textfield',
    '#title' => t('Heading'),
    '#default_value' => variable_get('diy_defaults_pfrontpage_why_headline', ''),
  );
  foreach(array(1, 2, 3) as $number) {
    $form['pfrontpage_why']['section' . $number] = array(
      '#type' => 'fieldset',
      '#title' => t('Section ' . $number),
      '#collapsible' => true,
      '#collapsed' => true,
    );
    $form['pfrontpage_why']['section' . $number]['diy_defaults_pfrontpage_why_heading' . $number] = array(
      '#type' => 'textfield',
      '#title' => t('Heading'),
      '#default_value' => variable_get('diy_defaults_pfrontpage_why_heading' . $number, ''),
    );
    $form['pfrontpage_why']['section' . $number]['diy_defaults_pfrontpage_why_content' . $number] = array(
      '#type' => 'textarea',
      '#title' => t('Content'),
      '#default_value' => variable_get('diy_defaults_pfrontpage_why_content' . $number, ''),
    );
  }

  $form['#submit'][] = 'diy_defaults_frontpage_portal_settings_form_submit';

  return system_settings_form($form);
}

/**
 * Submit function process managed files
 */
function diy_defaults_frontpage_portal_settings_form_submit(&$form, &$form_state) {

  $file_keys = array(
    'diy_defaults_pfrontpage_navigator_tab_image1',
    'diy_defaults_pfrontpage_navigator_tab_image2',
    'diy_defaults_pfrontpage_navigator_tab_image3',
    'diy_defaults_pfrontpage_portrait',
    'diy_defaults_pfrontpage_signature'
  );

  foreach($file_keys as $key) {
    if($fid = $form_state['values'][$key]) {
      if($file = file_load($fid)) {
        $file->status = FILE_STATUS_PERMANENT;
        file_save($file);

        file_usage_add($file, 'diy_defaults', 'user', 1);
      }
    }
  }
}

/**
 * Submit function process managed files
 */
function diy_defaults_frontpage_settings_form_submit(&$form, &$form_state) {

  $file_keys = array('diy_defaults_frontpage_image1', 'diy_defaults_frontpage_image2', 'diy_defaults_frontpage_image3', 'diy_defaults_frontpage_image4');

  foreach($file_keys as $key) {
    if($fid = $form_state['values'][$key]) {
      if($file = file_load($fid)) {
        $file->status = FILE_STATUS_PERMANENT;
        file_save($file);
        
        file_usage_add($file, 'diy_defaults', 'user', 1);
      }
    }
  }
}
