<?php

/**
 * Implements hook_menu
 *
 * @return array
 */
function mkbh_unique_node_menu()
{
    $items = [];
    $items['admin/config/system/node_unique'] = [
        'title' => 'Node Unique Views',
        'page callback' => 'drupal_get_form',
        'page arguments' => ['mkbh_unique_node_admin_form'],
        'access arguments' => ['administer site configuration'],
        'type' => MENU_NORMAL_ITEM,
        'file' => 'mkbh_unique_node.admin.inc',
    ];
    return $items;
}

/**
 * Implements hook_view_pre_render
 *
 * @param $view
 */
function mkbh_unique_node_views_pre_render(&$view)
{
    $settings = variable_get('mkbh_unique_node_views', []);
    if (!empty($settings[$view->name][$view->current_display])) {
        if (!empty($view->result)) {
            foreach ($view->result as $item) {
                if (property_exists($item, 'nid')) {
                    \Drupal\mkbh_unique_node\DisplayedNodes\DisplayedNodesSessionStorage::getInstance()->addDisplayedNodeIDs([$item->nid]);
                }
            }
        }
    }
}


/**
 * Implements hook_views_query_alter
 *
 * @param $view
 * @param $query
 */
function mkbh_unique_node_views_query_alter(&$view, &$query)
{
    $settings = variable_get('mkbh_unique_node_views', []);
    if (!empty($settings[$view->name][$view->current_display])) {
        foreach ($query->where as &$condition_group) {
            $condition_group['conditions'][] = [
                'field' => 'node.nid',
                'value' => \Drupal\mkbh_unique_node\DisplayedNodes\DisplayedNodesSessionStorage::getInstance()->getDisplayedNodeIDs(),
                'operator' => 'NOT IN',
            ];
            break;
        }
    }
}
