<?php
/**
 * Move user fields "ruc" and "razon_social" to (social) groups (create groups)
 * and assign the related users to those groups.
 */
if (PHP_SAPI != 'cli') {
    die('This script can only be launched from the command line');
}
require __DIR__ . '/../../main/inc/global.inc.php';

// We assume all these fields represent the same value, so they are on a 1-1
// relationship.
$referenceFields = array('razon_social', 'ruc');

$tUserField = Database::get_main_table(TABLE_EXTRA_FIELD);
$tUserFieldValue = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);

$tUser = Database::get_main_table(TABLE_MAIN_USER);

// First get the IDs of the selected fields
$sql = "SELECT id, field_type, variable FROM $tUserField";
$result = Database::query($sql);
$foundFields = array();
$fieldsNames = array();
while ($row = Database::fetch_assoc($result)) {
    if ($row['field_type'] == 1 && in_array($row['variable'], $referenceFields)) {
        $foundFields[$row['variable']] = array('id' => $row['id']);
        $fieldsNames[$row['id']] = $row['variable'];
    }
}

// Second get all the possible values of this field (in user data)
$usersData = array();
foreach ($foundFields as $key => $value) {
    $sql = "SELECT item_id as user_id, value  FROM $tUserFieldValue WHERE field_id = " . $value['id'];
    $result = Database::query($sql);
    while ($row = Database::fetch_assoc($result)) {
        $foundFields[$key]['options'][$row['value']][] = $row['user_id'];
        if (empty($usersData[$row['user_id']])) {
            $usersData[$row['user_id']] = '';
        }
        if ($referenceFields[0] == $key) {
            $usersData[$row['user_id']] = $row['value'] . ' - ' . $usersData[$row['user_id']];
        } else {
            $usersData[$row['user_id']] .= $row['value'] . ' - ';
        }
    }
}
// Clean the user string
$distinctGroups = array();
foreach ($usersData as $userId => $value) {
    $usersData[$userId] = substr($usersData[$userId], 0, -3);
    $distinctGroups[$usersData[$userId]][] = $userId;
}

// Third, we create groups based on the combined strings by user and insert
// users in them (as reader)
/*foreach ($distinctGroups as $name => $usersList) {
    $now = api_get_utc_datetime();
    $sql = "INSERT INTO $tGroup (name, visibility, updated_on, created_on) VALUES ('$name', 1, '$now', '$now')";
    echo $sql . PHP_EOL;
    $result = Database::query($sql);
    $groupId = Database::insert_id();
    echo $groupId . PHP_EOL;
    foreach ($usersList as $user) {
        $sql = "INSERT INTO $tGroupUser (group_id, user_id, relation_type) VALUES ($groupId, $user, 2)";
        echo $sql . PHP_EOL;
        $result = Database::query($sql);
    }
}*/