<?php
/**
 * Data getter for policies searching
 *
 * @category   Operation
 * @package    Pandora FMS
 * @subpackage Community
 * @version    1.0.0
 * @license    See below
 *
 *    ______                 ___                    _______ _______ ________
 *   |   __ \.-----.--.--.--|  |.-----.----.-----. |    ___|   |   |     __|
 *  |    __/|  _  |     |  _  ||  _  |   _|  _  | |    ___|       |__     |
 * |___|   |___._|__|__|_____||_____|__| |___._| |___|   |__|_|__|_______|
 *
 * ============================================================================
 * Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
 * Please see http://pandorafms.org for full contribution list
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation for version 2.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * ============================================================================
 */

// Get global data.
global $config;

enterprise_include_once('include/functions_policies.php');

$searchpolicies = (bool) check_acl($config['id_user'], 0, 'AW');

if ($searchpolicies === false) {
    $totalPolicies = 0;
    return;
}

$selectpolicieIDUp = '';
$selectpolicieIDDown = '';
$selectNameUp = '';
$selectNameDown = '';
$selectDescriptionUp = '';
$selectDescriptionDown = '';
$selectId_groupUp = '';
$selectId_groupDown = '';
$selectStatusUp = '';
$selectStatusDown = '';

switch ($sortField) {
    case 'id':
        switch ($sort) {
            case 'up':
            default:
                $selectpolicieIDUp = $selected;
                $order = [
                    'field' => 'id',
                    'order' => 'ASC',
                ];
            break;

            case 'down':
                $selectpolicieIDDown = $selected;
                $order = [
                    'field' => 'id',
                    'order' => 'DESC',
                ];
            break;
        }
    break;

    case 'name':
        switch ($sort) {
            case 'up':
            default:
                $selectNameUp = $selected;
                $order = [
                    'field' => 'name',
                    'order' => 'ASC',
                ];
            break;

            case 'down':
                $selectNameDown = $selected;
                $order = [
                    'field' => 'name',
                    'order' => 'DESC',
                ];
            break;
        }
    break;

    case 'description':
        switch ($sort) {
            case 'up':
            default:
                $selectId_groupUp = $selected;
                $order = [
                    'field' => 'description',
                    'order' => 'ASC',
                ];
            break;

            case 'down':
                $selectDescriptionDown = $selected;
                $order = [
                    'field' => 'description',
                    'order' => 'DESC',
                ];
            break;
        }
    break;

    case 'last_contact':
        switch ($sort) {
            case 'up':
            default:
                $selectId_groupUp = $selected;
                $order = [
                    'field' => 'last_connect',
                    'order' => 'ASC',
                ];
            break;

            case 'down':
                $selectId_groupDown = $selected;
                $order = [
                    'field' => 'last_connect',
                    'order' => 'DESC',
                ];
            break;
        }
    break;

    case 'id_group':
        switch ($sort) {
            case 'up':
            default:
                $selectId_groupUp = $selected;
                $order = [
                    'field' => 'last_connect',
                    'order' => 'ASC',
                ];
            break;

            case 'down':
                $selectId_groupDown = $selected;
                $order = [
                    'field' => 'last_connect',
                    'order' => 'DESC',
                ];
            break;
        }
    break;

    case 'status':
        switch ($sort) {
            case 'up':
            default:
                $selectStatusUp = $selected;
                $order = [
                    'field' => 'is_admin',
                    'order' => 'ASC',
                ];
            break;

            case 'down':
                $selectStatusDown = $selected;
                $order = [
                    'field' => 'is_admin',
                    'order' => 'DESC',
                ];
            break;
        }
    break;

    default:
        $selectpolicieIDUp = $selected;
        $selectpolicieIDDown = '';
        $selectNameUp = '';
        $selectNameDown = '';
        $selectDescriptionUp = '';
        $selectDescriptionDown = '';
        $selectId_groupUp = '';
        $selectId_groupDown = '';
        $selectStatusUp = '';
        $selectStatusDown = '';

        $order = [
            'field' => 'id',
            'order' => 'ASC',
        ];
    break;
}

if ($searchpolicies === true) {
    /*
        We take the user groups to get policies that meet the requirements of the search
        and which the user have permission on this groups
    */

    $user_groups = users_get_groups($config['id_user'], 'AR', false);
    $id_user_groups = array_keys($user_groups);
    $id_user_groups_str = implode(',', $id_user_groups);

    $sql = "SELECT id, name, description, id_group, status
            FROM tpolicies 
            WHERE name LIKE '$stringSearchSQL'
            AND id_group IN ($id_user_groups_str)
        ";
}


    $sql .= ' LIMIT '.$config['block_size'].' OFFSET '.get_parameter('offset', 0);

    $policies = db_process_sql($sql);

if ($policies !== false) {
    $totalPolicies = count($policies);

    if ($only_count === true) {
        unset($policies);
    }
} else {
    $totalPolicies = 0;
}