* @since Version 2.0 */ class sysUsersManagerModule { public $oDb; /** * Class constructor */ public function __construct(){ $this->oDb = cDb::getInstance(DB_HOST, DB_USR, DB_PWD, DB_PORT, DB_NAME); } /** * Function to get module records * * @author Mareks Keišs * @category sysUsersManager Module * @param string $where - sql query * @param string $sort - sql query * @param int $offset - db table offset * @param int $limitPerPage - limit per page * @return array of data * @version 1.1 */ public function getModuleRecords($where, $sort, $offset = 0, $limitPerPage = 20){ $sSql = " SELECT SQL_CALC_FOUND_ROWS su.id, su.user_name, su.user_surname, su.user_login, su.user_email, su.user_last_ip, user_last_login, su.user_last_location_url, su.user_blocked, LENGTH(su.user_2fa_secret_enabled) > 0 as tfa FROM site_users su WHERE 1 {$where} ORDER BY {$sort} LIMIT {$offset}, {$limitPerPage} "; $this->oDb->query($sSql); return $this->oDb->getArray(); } /** * Function to get user data by id * * @author Mareks Keišs * @category sysUsersManager Module * @param int $id - user id * @return array - user data * @version 1.1 */ public function getUserDataById($id){ return $this->oDb->_querySelectRow('site_users', false, array('id' => $id)); } /** * Function to get user permissions by userid * * @author Mareks Keišs * @category sysUsersManager Module * @param int $userId - user id * @return array * @version 1.1 */ public function getUserPermissionsByUserId($userId){ $userId = $userId ? $userId : 0; $sSql = " SELECT * FROM ( SELECT DISTINCT sp.id, COALESCE(mc.cl_name, '') as type_name, sp.p_name, sp.p_type_id, sp.p_description, stp.id > 0 as `sel` FROM site_permissions sp LEFT JOIN mod_classificators mc ON mc.id = sp.p_type_id LEFT JOIN site_users_permissions stp ON stp.permissions_id = sp.id AND stp.user_id = '" . $this->oDb->prepData($userId) . "' AND stp.groups_id = 0 ) dt ORDER BY dt.p_type_id, dt.p_name "; $this->oDb->query($sSql); return $this->oDb->getArray(); } /** * Function to get user permission groups by user id * * @author Mareks Keišs * @category sysUsersManager Module * @param int $userId - user id * @return array * @version 1.1 */ public function getUserPermissionGroupsByUserId($userId){ $userId = $userId ? $userId : 0; $sSql = " SELECT DISTINCT sug.id, sug.group_name, sug.group_description, sup.id > 0 as `sel` FROM site_users_groups sug LEFT JOIN site_users_permissions sup ON sup.groups_id = sug.id AND user_id = '" . $this->oDb->prepData($userId) . "' AND user_id > 0 ORDER BY sug.group_name "; $this->oDb->query($sSql); return $this->oDb->getArray(); } /** * Function to get user data by login * * @author Mareks Keišs * @category sysUsersManager Module * @param int $userId - user id * @param string $login - user login * @return array user data * @version 1.1 */ public function getUserDataByLogin($userId, $login){ $userId = $userId ? $userId : 0; $sSql = " SELECT * FROM site_users su WHERE su.user_login = '" . $this->oDb->prepData($login) . "' AND su.id <> '" . $this->oDb->prepData($userId) . "' "; $this->oDb->query($sSql); return $this->oDb->getRow(); } /** * Function to add or save user data * * @author Mareks Keišs * @category sysUsersManager Module * @param int $id - user id * @param array $data - user data * @return bool|int - user id * @version 1.1 */ public function saveUserDataById($id, $data){ if($id){ if(!$this->oDb->_queryUpdate('site_users', $data, array('id' => $id))){ return false; } }else{ if(!($id = $this->oDb->_queryInsert('site_users', $data))){ return false; } } return $id; } /** * Function to handle & rewrite user permissions * * @author Mareks Keišs * @category sysUsersManager Module * @param int $userId - user id * @param array $permissions * @return bool true / false * @version 1.1 */ public function updateUserPermissions($userId, $permissions = array()){ if($userId){ $this->oDb->_queryDelete("site_users_permissions", array('user_id' => $userId)); if(count($permissions)){ $this->oDb->_queryInsertArray("site_users_permissions", $permissions); } return true; } return false; } /** * Function to load user permissions * * @author Mareks Keišs * @category sysUsersManager Module * @param int $userId - user id * @return array * @version 1.1 */ public function loadUserPermissionArray($userId){ $sSql = " SELECT DISTINCT userp.permissions_id as pId, sitep.p_name as sId FROM ( SELECT sp.permissions_id FROM site_users_permissions sp WHERE sp.user_id = '{$userId}' AND sp.groups_id = '0' UNION ALL SELECT sg.permissions_id FROM site_users_permissions sp LEFT JOIN site_users_permissions sg ON sg.groups_id = sp.groups_id AND sg.user_id = 0 LEFT JOIN site_users_groups sug ON sug.id = sp.groups_id WHERE sp.user_id = '{$userId}' AND sp.groups_id <> '0' AND sug.group_blocked = '0' ) userp LEFT JOIN site_permissions sitep ON userp.permissions_id = sitep.id WHERE sitep.p_blocked = '0' "; $this->oDb->query($sSql); return $this->oDb->getKeyValBasedArray('pId', 'sId'); } /** * Function to change record status in db table * * @author Mareks Keišs * @category sysUsersManager Module * @param array $ids - record ids to delete * @param string $field - field to update for status ENUM * @return bool true / false * @version 1.1 */ public function changeRecordsStatus($ids, $field){ $time = time(); $ids = implode(',', $ids); $status = $this->oDb->query("UPDATE site_users su SET {$field} = '1', user_modified = '{$time}' WHERE {$field} = '0' AND id IN ({$ids})"); if(!$status) return $status; $status = $this->oDb->query("UPDATE site_users su SET {$field} = '0', user_modified = '{$time}' WHERE {$field} = '1' AND id IN ({$ids}) AND user_modified <> '{$time}'"); return $status; } /** * Function to delete table records form db * * @author Mareks Keišs * @category sysUsersManager Module * @param array $ids - record ids to delete * @return bool true / false * @version 1.1 */ public function deleteRecords($ids){ $this->oDb->execute("DELETE FROM `site_users_ipaccess` WHERE `user_id` IN (" . implode(',', $ids) . ")"); $this->oDb->execute("DELETE FROM `temp_users_online` WHERE `o_user_id` IN (" . implode(',', $ids) . ")"); $this->oDb->execute("DELETE FROM `site_users_permissions` WHERE `user_id` IN (" . implode(',', $ids) . ") AND `user_id` <> 0"); return $this->oDb->execute("DELETE FROM `site_users` WHERE `id` IN (" . implode(',', $ids) . ")"); } }