þ<?php

/**
 * @file tools/bulkCreateUsers.php
 *
 *
 	* @class installTool
 * @ingroup tools
 *
 * @brief CLI tool for installing OJS.
 */

require(dirname(__FILE__) . '/bootstrap.inc.php');
require_once 'SimpleXLSX.php';
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
class bulkCreateUsers
{
    function __construct() {
        // $userGroupDao = DAORegistry::getDAO('UserGroupDAO');
        // $authorGroupIds = $userGroupDao->getUserGroupIdsByRoleId(ROLE_ID_REVIEWER, 1);
        // var_dump($authorGroupIds);
        // foreach ($authorGroupIds as $groupId) {
        //     var_dump($groupId);
        // }
        // die();
        $this->parseFileData();
    }
    
    function parseFileData() {
        if ( $xlsx = SimpleXLSX::parse(__DIR__ . '/danhsachthanhvien.xlsx') ) {
            foreach ( $xlsx->rows() as $r => $row ) {
                if ($r > 0) {
                    $this->parseRow($row);
                }
            }
        } else {
          echo SimpleXLSX::parseError();
        }
    }
    
    function parseRow($row) {
        $name = trim($row[1]);
        $email = trim($row[2]);
        $username = strstr($email,'@',true);
        $isManager = !empty(trim($row[3]));
        $isSubEditor = !empty(trim($row[4]));
        $isReviewer = !empty(trim($row[5]));
        $isAuthor = !empty(trim($row[6]));
        if (!empty($name) && !empty($username)) {
            echo $name . "\t" . $email . "\t" . $username . "\t" . $isManager . "\t" . $isSubEditor . "\t" . $isReviewer . "\t" . $isAuthor . "\t" . "<br>" . PHP_EOL;
            $this->createUser($name, $email, $username, $isManager, $isSubEditor, $isReviewer, $isAuthor);
        }
    }
    
    function createUser($name, $email, $username, $isManager, $isSubEditor, $isReviewer, $isAuthor) {
        $siteLocale = 'vi_VN';
        $contextDAO = Application::getContextDAO();
        $context = $contextDAO->getById(1);
        $supportedFromLocales = $context->getSupportedFormLocales();
		// Add initial site administrator user
		$userDao = DAORegistry::getDAO('UserDAO');
        if ($userDao->userExistsByEmail($email)) {
            echo "Người dùng " . $name . " với email " . $email . " đã tồn tại trên hệ thống." . "<br>" . PHP_EOL;
            $userByEmail = $userDao->getUserByEmail($email);
            $userDao->deleteObject($userByEmail);
            echo "Đã xoá người dùng " . $name . " với email " . $email . "." . "<br>" . PHP_EOL;
        }

		$user = $userDao->newDataObject();
		$user->setUsername($username);
		$user->setPassword(Validation::encryptCredentials($user->getUsername(), 'Ntu@2023!', 'sha1'));
        foreach ($supportedFromLocales as $locale) {
            $user->setGivenName($name, $locale);
        }
		$user->setEmail($email);
		$user->setCountry('VN');
		$user->setDateRegistered(Core::getCurrentDate());
		$user->setInlineHelp(1);
		$user->setMustChangePassword(true);
		$user->setDisabled(false);
		$userDao->insertObject($user);
		
        $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
        
        if ($isManager) {
            $managerGroupIds = $userGroupDao->getUserGroupIdsByRoleId(ROLE_ID_MANAGER, 1);
            foreach ($managerGroupIds as $groupId) {
                $userGroupDao->assignUserToGroup($user->getId(), $groupId, 1);
            }
        }
        
        if ($isSubEditor) {
            $subEditorGroupIds = $userGroupDao->getUserGroupIdsByRoleId(ROLE_ID_SUB_EDITOR, 1);
            foreach ($subEditorGroupIds as $groupId) {
                $userGroupDao->assignUserToGroup($user->getId(), $groupId, 1);
            }
        }
        
        if ($isReviewer) {
            $reviewerGroupIds = $userGroupDao->getUserGroupIdsByRoleId(ROLE_ID_REVIEWER, 1);
            foreach ($reviewerGroupIds as $groupId) {
                $userGroupDao->assignUserToGroup($user->getId(), $groupId, 1);
            }
        }
        
        if ($isAuthor) {
            $authorGroupIds = $userGroupDao->getUserGroupIdsByRoleId(ROLE_ID_AUTHOR, 1);
            foreach ($authorGroupIds as $groupId) {
                $userGroupDao->assignUserToGroup($user->getId(), $groupId, 1);
            }
        }
        
        $readerGroupIds = $userGroupDao->getUserGroupIdsByRoleId(ROLE_ID_READER, 1);
        foreach ($readerGroupIds as $groupId) {
            $userGroupDao->assignUserToGroup($user->getId(), $groupId, 1);
        }

        echo "Đã thêm người dùng " . $name . " với email " . $email . "." . "<br>" . PHP_EOL;
        echo "------------------------------------------------------------------------------<br>" . PHP_EOL;
        
    }
}

$instance = new bulkCreateUsers();

// $instance->createUser();
