getQuery(true); $query->select($db->quoteName('id')) ->from($db->quoteName('#__users')) ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(' . $db->quote($email) . ')'); $db->setQuery($query); $user_id = $db->loadResult(); return $user_id ? $user_id : false; } // 02. Create new joomla user public static function create_user($data) { $params = ComponentHelper::getParams('com_users'); $user = new User(); $userdata = array(); $data['email'] = strtolower($data['email']); // Set username if (!isset($data['username']) || empty($data['username'])) { $data['username'] = $data['email']; } // Set name if (!isset($data['name']) || empty($data['name'])) { $data['name'] = strstr($data['email'], '@', true); } // Set password for new users if (!isset($data['password']) || empty($data['password'])) { $userdata['password'] = UserHelper::genRandomPassword(); } // Set require password reset if (isset($data['requireReset'])) { $userdata['requireReset'] = $data['requireReset']; } else { $userdata['requireReset'] = 0; } $userdata['username'] = $data['username']; $userdata['name'] = $data['name']; $userdata['email'] = $data['email']; // User activation $useractivation = $params->get('useractivation'); if (($useractivation == 1) || ($useractivation == 2)) { $userdata['activation'] = ApplicationHelper::getHash(UserHelper::genRandomPassword()); $userdata['block'] = 1; } else { $userdata['block'] = 0; } // Set user groups if (!isset($data['groups']) || empty($data['groups'])) { $user_group = $params->get('new_usertype', 2); $data['groups'] = array($user_group); } $userdata['groups'] = $data['groups']; // Set custom fields if (isset($data['com_fields']) && !empty($data['com_fields'])) { $userdata['com_fields'] = $data['com_fields']; } // Bind the data if (!$user->bind($userdata)) { Factory::getApplication()->enqueueMessage($user->getError()); return false; } // Store the data if (!$user->save()) { Factory::getApplication()->enqueueMessage($user->getError()); return false; } return $user; } // 03. Updates existing joomla user public static function update_user($data, $updates = array(), $block = 0) { $user = Factory::getUser($data['id']); $userdata = array(); foreach ($updates as $update) { if (!empty($data[$update])) { $userdata[$update] = $data[$update]; } } if (!in_array('block', $updates)) { $userdata['block'] = $block; } // Set custom fields if (isset($data['com_fields']) && !empty($data['com_fields'])) { $userdata['com_fields'] = $data['com_fields']; } // Bind the data if (!$user->bind($userdata)) { Factory::getApplication()->enqueueMessage($user->getError()); return false; } // Store the data if (!$user->save()) { Factory::getApplication()->enqueueMessage($user->getError()); return false; } return $user; } // 04. Save user custom field public static function save_custom_field($field_id, $user_id, $value) { $fieldModel = Factory::getApplication()->bootComponent('com_fields')->getMVCFactory()->createModel('Field', 'Administrator', ['ignore_request' => true]); $result = $fieldModel->setFieldValue($field_id, $user_id, $value); return $result; } // 05. Get user custom field public static function get_custom_field($field_id, $user_id) { $fieldModel = Factory::getApplication()->bootComponent('com_fields')->getMVCFactory()->createModel('Field', 'Administrator', ['ignore_request' => true]); $value = $fieldModel->getFieldValue($field_id, $user_id); return $value; } // 06. Filter users public static function filter_users($filters, $userfilters, $email = null) { $db = Factory::getDbo(); $query = $db->getQuery(true); $query ->select($db->quoteName(array('a.id'))) ->from($db->quoteName('#__users', 'a')) ->where($db->quoteName('a.block') . ' = ' . $db->quote(0)) ->order('a.id ASC'); // Joomla Users Table if (is_array(json_decode($filters, true)) && (json_last_error() == JSON_ERROR_NONE)) { $filters = json_decode($filters); } $filters_arr = (array) $filters; if (!empty($filters_arr)) { foreach ($filters_arr as $filter_obj) { $filter = (array) $filter_obj; // Case 1: Filter value is given if (($filter['where_field'] != '') && ($filter['where_value'] != '')) { if ($filter['isDate']) { $date = Factory::getDate('now -' . $filter['where_value'] . ' day'); $filter['where_value'] = $date->toSQL(); } $query->andWhere($db->quoteName('a.' . $filter['where_field']) . ' ' . $filter['where_operator'] . ' ' . $db->quote($filter['where_value'])); } // Case 2: Filter value is not given (Example: IS NULL) elseif (!empty($filter['where_field']) && empty($filter['where_value'])) { $query->andWhere($db->quoteName('a.' . $filter['where_field']) . ' ' . $filter['where_operator']); } } } // Users Custom Fields if (is_array(json_decode($userfilters, true)) && (json_last_error() == JSON_ERROR_NONE)) { $userfilters = json_decode($userfilters); } $userfilters_arr = (array) $userfilters; if (!empty($userfilters_arr)) { foreach ($userfilters_arr as $filter_obj) { $filter = (array) $filter_obj; // Case 1: Filter is for Joomla User Group if ($filter['where_field'] == 'group_id') { $query->join('INNER', $db->quoteName('#__user_usergroup_map', 'd') . ' ON (' . $db->quoteName('a.id') . ' = ' . $db->quoteName('d.user_id') . ')') ->andWhere($db->quoteName('d.group_id') . ' ' . $filter['where_operator'] . ' ' . $db->quote($filter['where_value'])); } // Case 2: When filter is for Joomla Users Custom Fields elseif (is_numeric($filter['where_field'])) { $query->join('INNER', $db->quoteName('#__fields_values', 'c') . ' ON (' . $db->quoteName('a.id') . ' = ' . $db->quoteName('c.item_id') . ')') ->andWhere($db->quoteName('c.field_id') . ' = ' . $db->quote($filter['where_field'])) ->andWhere($db->quoteName('c.value') . ' ' . $filter['where_operator'] . ' ' . $db->quote($filter['where_value'])); } } } if ($email != null) { $query->andWhere($db->quoteName('a.email') . ' = ' . $db->quote($email)); $query->setLimit('1'); } $db->setQuery($query); $users = $db->loadColumn(); return $users; } // 07. public static function check_otp($user_id, $otpkey) { $db = Factory::getDbo(); $query = $db->getQuery(true); $query ->select($db->quoteName('registerDate')) ->from($db->quoteName('#__users')) ->where($db->quoteName('id') . ' = ' . $db->quote($user_id)) ->setLimit('1'); $db->setQuery($query); $register_date = $db->loadResult(); $date = Factory::getDate($register_date); $user_otpkey = $date->toUnix(); return ($user_otpkey == $otpkey) ? Factory::getUser($user_id) : false; } // 08. Get User Groups public static function get_user_groups($user_id) { $ugs = UserHelper::getUserGroups($user_id); $arr = array(); foreach ($ugs as $ug) { $db = Factory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName('title')) ->from($db->quoteName('#__usergroups')) ->where($db->quoteName('id') . ' = ' . $db->quote($ug)); $db->setQuery($query); $group = $db->loadResult(); $arr[] = $group; } return $arr; } // 09. Delete user public static function delete_user($user_id) { $user = Factory::getUser($user_id); $user->delete(); } // 10. Add user to group public static function add_user_to_group($user_id, $group_id) { return UserHelper::addUserToGroup($user_id, $group_id); } // 11. Remove user from group public static function remove_user_from_group($user_id, $group_id) { return UserHelper::removeUserFromGroup($user_id, $group_id); } // 12. Get fields public static function get_fields($grouped = false) { $fields = FieldsHelper::getFields('com_users.user'); if ($grouped) { // Organizing fields according to their group $fieldsPerGroup = array(0 => array()); foreach ($fields as $field) { if (!array_key_exists($field->group_id, $fieldsPerGroup)) { $fieldsPerGroup[$field->group_id] = array(); } $fieldsPerGroup[$field->group_id][] = $field; } return $fieldsPerGroup; } else { return $fields; } } // 13. Block user public static function block_user_email($email) { $user_id = self::find_user($email); if (!$user_id) { return false; } $user = Factory::getUser($user_id); if ($user->block) { return false; } $userdata = array(); $userdata['id'] = $user_id; $userdata['block'] = 1; $userdata['requireReset'] = 0; $user = self::update_user($userdata, array('block', 'requireReset')); return $user; } // 14. Login user public static function login_user($user_id) { $app = Factory::getApplication(); $user = Factory::getUser($user_id); if (!empty($user->activation)) { return false; } if ($user->block) { return false; } $status_success = Authentication::STATUS_SUCCESS; $response = new AuthenticationResponse(); $response->status = $status_success; $response->error_message = ''; $response->email = $user->email; $response->type = 'tf-login'; /* // Run the user plugins $options = array( 'remember' => true, 'action' => 'core.login.site', ); PluginHelper::importPlugin('user'); $results = Joomla::runPlugins('onUserLogin', [(array) $response, $options], $app); if (in_array(false, $results, true) == false) { // Set the user in the session, letting Joomla! know that we are logged in. Factory::getApplication()->getSession()->set('user', $user); // Trigger the onUserAfterLogin event $options['user'] = $user; $options['responseType'] = $response->type; // The user is successfully logged in. Run the after login events Joomla::runPlugins('onUserAfterLogin', [$options], $app); return; } */ Factory::getApplication()->getSession()->set('user', $user); } // 15. Get total users in a group public static function total_users_by_group($group_id) { $db = Factory::getDbo(); $query = $db->getQuery(true); $query->select('COUNT(DISTINCT map.user_id)') ->from($db->quoteName('#__user_usergroup_map', 'map')) ->join('LEFT', $db->quoteName('#__users', 'u') . ' ON ' . $db->quoteName('u.id') . ' = ' . $db->quoteName('map.user_id')) ->where($db->quoteName('map.group_id') . ' = ' . $db->quote($group_id)) ->where($db->quoteName('u.block') . ' = 0'); $db->setQuery($query); $total = $db->loadResult(); return $total; } }