<?php

/*
 * Copyright 2005-2016 OCSInventory-NG/OCSInventory-ocsreports contributors.
 * See the Contributors file for more details about them.
 *
 * This file is part of OCSInventory-NG/OCSInventory-ocsreports.
 *
 * OCSInventory-NG/OCSInventory-ocsreports 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, either version 2 of the License,
 * or (at your option) any later version.
 *
 * OCSInventory-NG/OCSInventory-ocsreports 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with OCSInventory-NG/OCSInventory-ocsreports. if not, write to the
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 */
//fonction pour avoir tous les groupes
//$group_type = STATIC,DYNAMIC,SERVER
//return tableau [id]=group_name
function all_groups($group_type) {
    //récupération des groupes demandés
    if ($group_type == "SERVER") {
        $reqGetId = "SELECT id,name FROM hardware
					     WHERE deviceid = '_DOWNLOADGROUP_'";
    } else {
        if ($group_type == "STATIC") {
            $reqGetId = "SELECT id,name FROM hardware,`groups`
					     WHERE `groups`.hardware_id=hardware.id
							and deviceid = '_SYSTEMGROUP_'
							and (request is null or trim(request) = '')
						    and (xmldef  is null or trim(xmldef) = '')";
            if (!($_SESSION['OCS']['profile']->getConfigValue('GROUPS') == "YES")) {
                $reqGetId .= " and workgroup = 'GROUP_4_ALL'";
            }
        } else {
            $reqGetId = "SELECT id,name FROM hardware,`groups`
					     WHERE `groups`.hardware_id=hardware.id
							and deviceid = '_SYSTEMGROUP_'
							and ((request is not null and trim(request) != '')
								or (xmldef is not null and trim(xmldef) != ''))";
        }
    }
    $resGetId = mysql2_query_secure($reqGetId, $_SESSION['OCS']["readServer"]);
    while ($valGetId = mysqli_fetch_array($resGetId)) {
        $list_group[$valGetId['id']] = $valGetId['name'];
    }
    return $list_group ?? '';
}
//fonction pour sortir les machines d'un groupe
function remove_of_group($id_group, $list_id) {
    $sql_delcache = "DELETE FROM groups_cache WHERE group_id='%s' and hardware_id in ";
    $arg_delcache[] = $id_group;
    $delcache = mysql2_prepare($sql_delcache, $arg_delcache, $list_id);

    mysql2_query_secure($delcache['SQL'], $_SESSION['OCS']["writeServer"], $delcache['ARG']);
    return mysqli_affected_rows($_SESSION['OCS']["writeServer"]);
}
//fonction de remplacement d'un groupe
function replace_group($id_group, $list_id, $req, $group_type) {
    //static group?
    if ($group_type == 'STATIC') {
        $static = 1;
        $req = "";
    } else {
        $static = 0;
    }
    //delete cache
    $sql_delcache = "DELETE FROM groups_cache WHERE group_id='%s'";
    $arg_delcache = $id_group;
    mysql2_query_secure($sql_delcache, $_SESSION['OCS']["writeServer"], $arg_delcache);
    //update group
    $sql_updGroup = "UPDATE `groups` set request='', xmldef='%s' where hardware_id=%s";
    $arg_updGroup = array(generate_xml($req), $id_group);
    mysql2_query_secure($sql_updGroup, $_SESSION['OCS']["writeServer"], $arg_updGroup);
    return add_computers_cache($list_id, $id_group, $static);
}
//create group function
function creat_group($name, $descr, $list_id, $req, $group_type) {
    global $l;
    if (trim($name) == "") {
        return array('RESULT' => 'ERROR', 'LBL' => $l->g(638));
    }
    if (trim($descr) == "") {
        return array('RESULT' => 'ERROR', 'LBL' => $l->g(1234));
    }
    //static group?
    if ($group_type == 'STATIC') {
        $static = 1;
        $req = "";
    } else {
        $static = 0;
    }
    //does $name group already exists
    $reqGetId = "SELECT id FROM hardware WHERE name='%s' and deviceid = '_SYSTEMGROUP_'";
    $argGetId = $name;
    $resGetId = mysql2_query_secure($reqGetId, $_SESSION['OCS']["readServer"], $argGetId);
    if (mysqli_fetch_array($resGetId)) {
        return array('RESULT' => 'ERROR', 'LBL' => $l->g(621));
    }

    //insert new group
    $sql_insert = "INSERT INTO hardware(deviceid,name,description,lastdate) VALUES( '_SYSTEMGROUP_' , '%s', '%s', NOW())";
    $arg_insert = array($name, $descr);
    mysql2_query_secure($sql_insert, $_SESSION['OCS']["writeServer"], $arg_insert);
    //Getting hardware id
    $insertId = mysqli_insert_id($_SESSION['OCS']["writeServer"]);
    $xml = generate_xml($req);

    //Creating group
    $sql_group = "INSERT INTO `groups`(hardware_id, xmldef, create_time) VALUES ( %s, '%s', UNIX_TIMESTAMP() )";
    $arg_group = array($insertId, $xml);
    mysql2_query_secure($sql_group, $_SESSION['OCS']["writeServer"], $arg_group);
    addLog("CREATE GROUPE", $name);
    //Generating cache
    if ($list_id != '') {
        $nb_computer = add_computers_cache($list_id, $insertId, $static);
        return array('RESULT' => 'OK', 'LBL' => $nb_computer);
    }

    return array('RESULT' => 'OK', 'LBL' => $l->g(607) . " " . $l->g(608));
}
//function to add computer in groups_cache
function add_computers_cache($list_id, $groupid, $static) {
    require_once('function_computers.php');
    //Generating cache
    if (lock($groupid)) {
        $reqCache = "INSERT IGNORE INTO groups_cache(hardware_id, group_id, static)
						SELECT id, %s, %s from hardware where id in ";
        $argCache = array($groupid, $static);
        $cache = mysql2_prepare($reqCache, $argCache, $list_id);
        mysql2_query_secure($cache['SQL'], $_SESSION['OCS']["writeServer"], $cache['ARG']);
        $cached = mysqli_affected_rows($_SESSION['OCS']["writeServer"]);
        unlock($groupid);
        return $cached;
    }
}
//generation du xml en fonction des requetes
function generate_xml($req) {
    //si il exite une requete
    if (isset($req[0])) {
        //création du début du xml
        $xml = "<xmldef>";
        $i = 0;
        //concaténation des différentes requetes
        while (isset($req[$i])) {
            $xml .= "<REQUEST>" . clean($req[$i]) . "</REQUEST>";
            $i++;
        }
        $xml .= "</xmldef>";
    } else { //si aucune requete n'exite, on renvoie un xml vide
        $xml = "";
    }

    return $xml;
}
function clean($txt) {
    $cherche = array("&", "<", ">", "\"", "'");
    $replace = array("&amp;", "&lt;", "&gt;", "&quot;", "&apos;");
    return str_replace($cherche, $replace, $txt);
}
function delete_group($id_supp) {
    global $l;
    if ($id_supp == "") {
        return array('RESULT' => 'ERROR', 'LBL' => "ID IS NULL");
    }
    if (!is_numeric($id_supp)) {
        return array('RESULT' => 'ERROR', 'LBL' => "ID IS NOT NUMERIC");
    }

    $sql_verif_group = "select id from hardware where id=%s and DEVICEID='_SYSTEMGROUP_' or DEVICEID='_DOWNLOADGROUP_'";
    $arg_verif_group = $id_supp;
    $res_verif_group = mysql2_query_secure($sql_verif_group, $_SESSION['OCS']["readServer"], $arg_verif_group);
    if (mysqli_fetch_array($res_verif_group)) {
        deleteDid($arg_verif_group);
        addLog("DELETE GROUPE", $id_supp);
        return array('RESULT' => 'OK', 'LBL' => '');
    } else {
        return array('RESULT' => 'ERROR', 'LBL' => $l->g(623));
    }
}
function group_4_all($id_group) {
    if ($id_group == "") {
        return array('RESULT' => 'ERROR', 'LBL' => "ID IS NULL");
    }
    if (!is_numeric($id_group)) {
        return array('RESULT' => 'ERROR', 'LBL' => "ID IS NOT NUMERIC");
    }

    $sql_verif = "select WORKGROUP from hardware where id=%s";
    $arg_verif = $id_group;
    $res = mysql2_query_secure($sql_verif, $_SESSION['OCS']["readServer"], $arg_verif);
    $item = mysqli_fetch_object($res);
    if ($item->WORKGROUP != "GROUP_4_ALL") {
        $sql_update = "update hardware set workgroup= 'GROUP_4_ALL' where id=%s";
        $return_result['LBL'] = "Groupe visible pour tous";
    } else {
        $sql_update = "update hardware set workgroup= '' where id=%s";
        $return_result['LBL'] = "Groupe invisible";
    }
    mysql2_query_secure($sql_update, $_SESSION['OCS']["writeServer"], $arg_verif);
    $return_result['RESULT'] = "OK";
    addLog("ACTION VISIBILITY OF GROUPE", $id_group);
    return $return_result;
}
function show_redistrib_groups_packages($systemid){

    global $l;
    
    $query = "select da.NAME, da.PRIORITY,da.FRAGMENTS,da.SIZE,da.OSNAME,de.INFO_LOC,de.CERT_FILE,de.CERT_PATH,de.PACK_LOC
                from download_enable de,download_available da
                where de.GROUP_ID =%s
                and da.FILEID=de.FILEID
                group by de.fileid;";
    
    $arg_query = array($systemid);
    $resDeploy = mysql2_query_secure($query, $_SESSION['OCS']["readServer"], $arg_query);
    if (mysqli_num_rows($resDeploy) > 0) {
        ?>
        <div class='row'>
            <div class='col-md-12'>
                <p>
                    <table class='table table-striped'>
                      <thead>
                        <tr>
                          <th><?php echo $l->g(49) ?></th>
                          <th><?php echo $l->g(440) ?></th>
                          <th><?php echo $l->g(464) ?></th>
                          <th><?php echo $l->g(462) ?></th>
                          <th><?php echo $l->g(1387) ?></th>
                          <th>INFO_LOC</th>
                          <th>CERT_FILE</th>
                          <th>CERT_PATH</th>
                          <th>PACK_LOC</th>
                        </tr>
                      </thead>
                      <tbody>

                        <?php
                        while ($valDeploy = mysqli_fetch_array($resDeploy)) {
                            ?>
                          <tr>
                            <td><?php echo $valDeploy['NAME'] ?></td>
                            <td><?php echo $valDeploy['PRIORITY'] ?></td>
                            <td><?php echo $valDeploy['FRAGMENTS'] ?></td>
                            <td><?php echo $valDeploy['SIZE'] ?></td>
                            <td><?php echo $valDeploy['OSNAME'] ?></td>
                            <td><?php echo $valDeploy['INFO_LOC'] ?></td>
                            <td><?php echo $valDeploy['CERT_FILE'] ?></td>
                            <td><?php echo $valDeploy['CERT_PATH'] ?></td>
                            <td><?php echo $valDeploy['PACK_LOC'] ?></td>
                          </tr>
                            <?php
                        }
                        ?>
                        </tbody>
                    </table>
                </p>
            </div>
        </div>
        <?php
    }
}
