* @since Version 1.0 */ class pubUsersModule { public cDb $db; public $compId; const ARTICLE_TYPE_README = 309; public function __construct($compId = 0) { $this->compId = $compId; $this->db = cDb::getInstance(DB_HOST, DB_USR, DB_PWD, DB_PORT, DB_NAME); } /** * Function to add new user to the list * * @category APP pubUsers * @author Mareks Keišs * @param array $data - user data array to insert into modules * @return null|int */ public function addNewUser(array $data) { return $this->db->_queryInsert('mod_users', $data) ?? null; } public function getUserByLoginData(array $loginData): array { return $this->db->_querySelectRow('mod_users', false, $loginData) ?? []; } public function updateUserDataById(int $id, array $update): bool { return $this->db->_queryUpdate('mod_users', $update, ['id' => $id]); } public function getUserByLogin(string $login): array { return $this->db->_querySelectRow('mod_users', false, ['user_login' => $login, 'user_deleted' => 0]) ?? []; } public function getUserLoginById(int $id): string { return $this->db->_querySelectOne('mod_users', ['user_login'], ['id' => $id, 'user_deleted' => 0]) ?? ''; } public function setUserActiveById(int $id): bool { return $this->db->_queryUpdate('mod_users', ['user_activated' => 1], ['id' => $id]); } /** * Function to load user permissions * * @author Mareks Keišs * @category APP pubUsers * @param int $userId - user id * @param int $accId - account id * @return array * @version 1.1 */ public function loadUserPermissionArray(int $userId, int $accId = 0): array { $sSql = " /* GET ALL USER PERMISSIONS */ SELECT DISTINCT upp.p_id as pId, pp.p_name as sId, app.p_id FROM ( SELECT u_p.user_id as u_id, u_p.permissions_id as p_id FROM mod_users_permissions u_p WHERE u_p.user_id = {$userId} AND u_p.groups_id = 0 UNION ALL SELECT ugr.user_id as u_id, gr_p.permissions_id as p_id FROM mod_users_permissions ugr LEFT JOIN mod_permissions_groups gr_data ON gr_data.id = ugr.groups_id LEFT JOIN mod_users_permissions gr_p ON ugr.groups_id = gr_p.groups_id AND gr_p.user_id = 0 WHERE ugr.user_id = {$userId} AND ugr.groups_id > 0 AND gr_data.group_blocked = '0' ) upp LEFT JOIN ( /* GET ALL ACCOUNT PERMISSIONS */ SELECT acc_p.p_id FROM mod_account_permissions acc_p WHERE acc_p.a_id = {$accId} AND acc_p.g_id = 0 UNION ALL SELECT gr_p.permissions_id as p_id FROM mod_account_permissions acc_gr LEFT JOIN mod_permissions_groups gr_data ON acc_gr.g_id = gr_data.id LEFT JOIN mod_users_permissions gr_p ON acc_gr.g_id = gr_p.groups_id AND gr_p.user_id = 0 WHERE acc_gr.a_id = {$accId} AND acc_gr.g_id > 0 AND gr_data.group_blocked = '0' ) app ON upp.p_id = app.p_id LEFT JOIN mod_permissions pp ON pp.id = upp.p_id WHERE pp.p_blocked = '0' AND app.p_id IS NOT NULL "; $this->db->query($sSql); return $this->db->getKeyValBasedArray('pId', 'sId') ?? []; } /** * Function to load sys user config * * @author Mareks Keišs * @category APP pubUsers * @param int $userId - user id * @return bool|array of data * @version 1.1 */ public function getUserCfg(int $userId) { return $this->db->_querySelectOne('mod_users', array('user_cfg'), array('id' => $userId)); } /** * Function to save user cfg * * @author Mareks Keišs * @category APP pubUsers * @param int $id - user id * @param array $data - user data * @return bool * @version 1.1 */ public function saveUserCFG(int $id, array $data): bool { if ( $id && $this->db->_queryUpdate('mod_users', $data, array('id' => $id), true) ) { return true; } return false; } /** * Function to get user by email * * @category APP pubUsers * @author Mareks Keišs * @param string $string - user email or login to look for * @param bool $email - whether its email or not * @return array */ public function getUserByEmail(string $string, bool $email = false): ?array { $where = array('user_deleted' => 0); $where[($email ? 'user_email' : 'user_login')] = $string; return $this->db->_querySelect('mod_users', false, $where); } /** * Function to load pub user permissions * * @author Aivars Žukovskis * @category APP pubUsers * @param int $userId - user id * @return array of data * @version 1.1 */ public function pubLoadUserPermissionArray(int $userId): ?array { $sSql = " SELECT mp.p_name, mp.p_description FROM mod_users_permissions mup LEFT JOIN mod_permissions mp ON mp.id = mup.permissions_id WHERE mup.user_id = {$userId} AND mup.groups_id = '0' "; $this->db->query($sSql); return $this->db->getArray(); } /** * Function to load pub user group permissions * * @author Aivars Žukovskis * @category APP pubUsers * @param int $userId - user id * @return array of data * @version 1.1 */ public function pubLoadUserGroupPerArray(int $userId): ?array { $sSql = " SELECT mpg.group_name, mpg.group_description FROM mod_users_permissions mup LEFT JOIN mod_permissions_groups mpg ON mpg.id = mup.groups_id WHERE mup.user_id = {$userId} AND mup.groups_id != '0' "; $this->db->query($sSql); return $this->db->getArray(); } /** * Function to load pub user group permissions * * @author Aivars Žukovskis * @category APP pubUsers * @param int $userId - user id * @return array of data * @version 1.1 */ public function pubLoadUserObjectsPerArray(int $userId): ?array { $sSql = " SELECT mc.a_title, mc.a_created FROM mod_account_to_users mu LEFT JOIN mod_account_manager mc ON mu.comp_id = mc.id WHERE mu.user_id = {$userId} AND mc.a_blocked = '0' "; $this->db->query($sSql); return $this->db->getArray(); } /** * Function to get user companies * * @author Aivars Žukovskis * @category APP pubUsers Module * @param int $uID = user id * @return bool|array - record data * @version 1.1 */ public function getUserCompanies(int $uID): ?array { $sSql = " SELECT mc.id, mc.a_title, mc.a_db_name, mc.a_accounting_type, mc.a_unique_identifier, mc.a_year_cfg, mc.company_start_date, mc.a_test_account, mc.a_trial_till, mc.a_monthly_payment, mc.a_created FROM mod_account_manager mc LEFT JOIN mod_account_to_users mctu ON mc.id = mctu.comp_id LEFT JOIN INFORMATION_SCHEMA.SCHEMATA ss ON mc.a_db_name = ss.SCHEMA_NAME WHERE mc.a_blocked = '0' AND mctu.user_id = {$uID} AND NOT ISNULL(ss.SCHEMA_NAME) ORDER BY mc.a_title ASC "; $this->db->query($sSql); return $this->db->getFieldBasedArray('id'); } /** * Function to get user company detailed data * * @author Mareks Keiss * @category APP pubUsers Module * @param int $id = company id * @param bool|array $vFields = fields to select * @return bool|array - record data * @version 1.1 */ public function getCompanyDataByCpId(int $id, $vFields = false): ?array { if (!empty($vFields) && count($vFields) == 1) { return $this->db->_querySelectOne('mod_account_manager', $vFields, array('id' => $id)); } return $this->db->_querySelectRow('mod_account_manager', $vFields, array('id' => $id)); } /** * Function to get user company detailed data * * @author Mareks Keiss * @category APP pubUsers Module * @param int $id = company id * @return bool|int - record data * @version 1.1 */ public function checkSubscriptionPaidBills(int $id) { return $this->db->_querySelectOne('mod_account_to_bills', ['id'], ['r_account_id' => $id, 'r_paid' => '1']); } /** * Function to get user company detailed data * * @author Mareks Keiss * @category APP pubUsers Module * @param array $uCompanyDbTitles = user company db titles * @return bool|array - record data * @version 1.1 */ public function getCompanyData(array $uCompanyDbTitles) { if (!!$uCompanyDbTitles) { $sSqlUnion = []; foreach ($uCompanyDbTitles as $db_name) { $sSqlUnion[] = " SELECT a_img, a_reg_nr, a_pvn_reg_nr, '{$db_name}' as db_title FROM `{$db_name}`.mod_partners WHERE a_requisites = '1' "; } $sSqlUnion = implode("UNION ALL ", $sSqlUnion); $sSql = " SELECT cp.id, dd.a_img as img, dd.a_reg_nr as a_reg_nr, dd.a_pvn_reg_nr as a_pvn_reg_nr FROM ({$sSqlUnion}) as dd LEFT JOIN mod_account_manager cp ON cp.a_db_name = dd.db_title "; $this->db->query($sSql); return $this->db->getFieldBasedArray('id'); } return false; } /** * Function to get article data * * @author Aivars Žukovskis * @category APP pubUsers Module * @param int $langId = selected language id * @return array - record data * @version 1.1 */ public function getArticleData(int $langId): ?array { $sSql = " SELECT rec.a_lhtml as d FROM mod_articles art LEFT JOIN mod_articles_records rec ON art.id = rec.a_id WHERE a_type = " . self::ARTICLE_TYPE_README . " AND a_disabled = '0' AND a_lang_id = {$langId} ORDER BY a_npk "; $this->db->query($sSql); return $this->db->getArray(); } /** * Function to get user data by email * * @author Mareks Keišs * @category sysUsers Module * @param string $sEmail - user email * @return bool|int user id * @version 1.1 */ public function getUserDataByEmail(string $sEmail) { return $this->db->_querySelectOne('mod_users', array('id'), array('user_email' => $sEmail)); } /** * Function to get user data by email * * @author Mareks Keišs * @category sysUsers Module * @param int $id - account id * @param array $vYear - years to check * @return bool|int user id * @version 1.1 */ public function chkIfCurrentQuarterPaid(int $id, array $vYear) { $sSql = " SELECT r_type, r_year, max(r_qr_1) as q1, max(r_qr_2) as q2, max(r_qr_3) as q3, max(r_qr_4) as q4 FROM mod_account_to_bills WHERE r_year IN (" . implode(",", $vYear) . ") AND r_account_id = {$id} AND r_paid = '1' GROUP BY r_type, r_account_id, r_year "; $this->db->query($sSql); return $this->db->getFieldBasedArrayFieldsAdv(array('r_type', 'r_year'), array('q1', 'q2', 'q3', 'q4')); } /** * Function to check if any data entered in payment missing period * * @author Aivars Žukovskis * @category sysUsers Module * @param string $sTable - table * @param string $sField - field * @param array $vDatesToExclude - to check data between dates * @return array * @version 1.1 */ public function chkDataForPaymentMissingInSelectedPeriod( string $sTable, string $sField, array $vDatesToExclude ): ?array { $sSql = ''; foreach ($vDatesToExclude as $q => $dd) { $sSql .= "UNION ALL ( SELECT '$q' as q, {$dd['d1']} as d1, {$dd['d2']} as d2 FROM `" . COMP_DB_NAME . "`.{$sTable} WHERE $sField BETWEEN {$dd['d1']} AND {$dd['d2']} LIMIT 1 ) "; } $this->db->query(substr($sSql, strlen('UNION ALL'))); return $this->db->getFieldBasedArrayFieldsAdv('q', array('d1', 'd2')); } /** * Function to update comapny activity time upon choose * * @author Aivars Žukovskis * @category sysUsers Module * @param int $iCompId - company id to update * @returns void */ public function updCompanyActivityDate(int $iCompId): void { if ($iCompId) { $this->db->_queryUpdate('mod_account_manager', ['a_last_activity' => time()], ['id' => $iCompId]); } } /** * Add product to user wishlist * * @param int $userId * @param int $productId * @return bool */ public function addToWishlist(int $userId, int $productId): bool { return (bool)$this->db->_queryInsert('mod_users_whishlist', [ 'user_id' => $userId, 'product_id' => $productId, 'created_at' => time(), ]); } /** * Remove product from user wishlist * * @param int $userId * @param int $productId * @return bool */ public function removeFromWishlist(int $userId, int $productId): bool { return (bool)$this->db->_queryDelete('mod_users_whishlist', [ 'user_id' => $userId, 'product_id' => $productId, ]); } /** * Check if product is in user wishlist * * @param int $userId * @param int $productId * @return bool */ public function isProductInWishlist(int $userId, int $productId): bool { $result = $this->db->_querySelect('mod_users_whishlist', ['product_id'], [ 'user_id' => $userId, 'product_id' => $productId, ]); return !empty($result); } /** * Get user wishlist product IDs * * @param int $userId * @return array */ public function getWishlistProductIds(int $userId): array { $this->db->query("SELECT product_id FROM mod_users_whishlist WHERE user_id = {$userId}"); $result = $this->db->getFieldBasedArray('product_id'); return !empty($result) ? array_keys($result) : []; } /** * Get wishlist item count for user * * @param int $userId * @return int */ public function getWishlistCount(int $userId): int { $this->db->query("SELECT COUNT(*) as cnt FROM mod_users_whishlist WHERE user_id = {$userId}"); $result = $this->db->getRow(); return (int)($result['cnt'] ?? 0); } public function clearWishlist(int $userId): bool { return $this->db->_queryDelete('mod_users_whishlist', ['user_id' => $userId]); } }