<?php
/**
 * @file
 * Code for the DIY News feature.
 */

include_once 'diy_news.features.inc';

/**
 * Implements HOOK_views_pre_execute().
 */
function diy_news_views_pre_execute(&$view) {
  if($view->name == "news" && $view->current_display == 'page') {
    // remove offset
    if(isset($view->exposed_raw_input['fulltext']) && !empty($view->exposed_raw_input['fulltext'])) {
      $view->query->set_offset(0);
    }
  }
}

/**
 * Implements HOOK_preprocess_views_view().
 */
function diy_news_preprocess_views_view(&$vars) {
  if($vars['name'] == "news" && $vars['display_id'] == 'page') {
    if($vars['view']->total_rows > 5) {
      $vars['attachment_before'] .= '<h2>'. t('More newsitems') .'</h2>';
    }
    if(isset($vars['view']->exposed_raw_input['fulltext']) && !empty($vars['view']->exposed_raw_input['fulltext'])) {
      $vars['attachment_before'] = '';
    }
  }
}

/**
 * Implements template_preprocess_views_view_rss().
 */
function diy_news_preprocess_views_view_rss(&$vars) {
  global $base_url;

  if ($vars['view']->name == 'newsfeed' && in_array($vars['view']->current_display, array('feed_1', 'feed_2'))) {
    $domain = domain_get_domain();
    $vars['title'] = $domain['subdomain'];

    $arg1 = arg(1);
    if(is_numeric($arg1)) {
      $term = taxonomy_term_load(arg(1));
      $vars['title'] .= ' - ' . $term->name;
    }
  }

  if ($vars['view']->name == 'newsfeed' && $vars['view']->current_display == 'feed_2') {
    $vars['link'] = $base_url . url('news');
  }
}

/**
 * Implements HOOK_preprocess_views_view_row_rss().
 */
function diy_news_preprocess_views_view_row_rss(&$vars) {
  $view     = &$vars['view'];
  $options  = &$vars['options'];
  $item     = &$vars['row'];

  $vars['title'] = check_plain($item->title);
  $vars['link'] = check_url($item->link);

  $add = '';
  $pre = '';
  if($view->name == 'newsfeed' && in_array($view->current_display, array('feed_1', 'feed_2'))) {
    if($node = node_load($vars['row']->elements[2]['value'])) {

      $links = array();
      $field_news_tags = field_get_items('node', $node, 'field_news_tags');
      foreach($field_news_tags as $row) {
        $term = taxonomy_term_load($row['tid']);
        $links[] = l($term->name, 'newsfeed/' . $row['tid'], array('absolute' => true));
      }

      $add = ' (' . implode(', ', $links) . ')';
      $add = check_plain($add);

      if($field_header_image = field_get_items('node', $node, 'field_header_image')) {
        $fid = $field_header_image[0]['fid'];
        if($file = file_load($fid)) {

          $pre = theme('image_style', array(
            'style_name' => 'news_image_thumb',
            'path' => $file->uri,
            'attributes' => array(
              'style' => 'float:right;'
            )
          ));

        }

      }
    }
  }

  $vars['description'] = htmlspecialchars($pre) . check_plain($item->description) . $add;
  $vars['item_elements'] = empty($item->elements) ? '' : format_xml_elements($item->elements);
}

/**
 * Implements HOOK_preprocess_node().
 */
function diy_news_preprocess_node(&$vars) {
  if($vars['type'] == 'news' && $vars['view_mode'] == 'full') {

    if($field_article_similar = field_get_items('node', $vars['node'], 'field_article_similar')) {
      $nodes = array();

      foreach($field_article_similar as $article_reference) {
        $article = node_load($article_reference['target_id']);
        if($article->status != 1) {
          continue;
        }

        // flag, that indicates we want the meta description as teaser
        $article->diy_custom_use_meta_description = true;

        $article_teaser = node_view($article, 'search_result');
        $nodes[] = drupal_render($article_teaser);
      }

      $vars['similar'] = theme('item_list', array(
        'title' => t('Similar articles'),
        'items' => $nodes,
        'attributes' => array('class' => 'similar-list')
      ));
    }

  }

  if($vars['type'] == 'news' && $vars['view_mode'] == 'teaser') {

    // change image style for top two news
    $views_page = views_get_page_view();
    if(is_object($views_page)) {
      if($views_page->name == 'news') {
        if(!isset($views_page->exposed_raw_input['fulltext']) || empty($views_page->exposed_raw_input['fulltext'])) {
          if($res = views_get_view_result('news', 'attachment_1')) {
            $nids = array();

            if(is_array($res)) {
              foreach($res as $object) {
                $nids[] = $object->entity;
              }
            }

            if(in_array($vars['node']->nid, $nids)) {
              if(isset($vars['content']['field_header_image'][0]['#image_style'])) {
                $vars['content']['field_header_image'][0]['#image_style'] = 'news_image_thumb_big';
              }
            }
          }
        }
      }
    }

    // change image style on frontpage
    if(drupal_is_front_page()) {
      if(isset($vars['content']['field_header_image'][0]['#image_style'])) {
        $vars['content']['field_header_image'][0]['#image_style'] = 'header_image_first';
      }
    }
  }
}

/**
 * Helper function, called from views argument
 */
function diy_news_get_currents_news_term() {
  $node = menu_get_object();
  if(isset($node->type) && $node->type == 'news') {
    if($field_news_tags = field_get_items('node', $node, 'field_news_tags')) {
      $tags = array();

      foreach($field_news_tags as $row) {
        $tags[] = $row['tid'];
      }

      return implode('+', $tags);
    }
  }

  return false;
}

/**
 * Views helper function.
 */
function _diy_news_get_views_domain() {
  $domain = domain_get_domain();
  return $domain['subdomain'];
}

/**
 * Views helper function
 */
function _diy_news_get_rfc_date($nid) {
  $node = node_load($nid);
  return date(DATE_RFC822, $node->created);
}