/** * Upload users */ public function upload($form) { // TODO To be replaced by JInput (buggy at that time) $files = JRequest::getVar('jform', null, 'files', 'array'); $sid = (int) $form['id']; if ($files['type']['file'] == 'text/csv') { $handle = fopen($files['tmp_name']['file'], "r"); do { $data = fgetcsv($handle); if ($data && count($data) == 4) { $user = JUser::getInstance(); if ($id = intval(JUserHelper::getUserId($data[0]))) { $user->load($id); } $user->username = $data[0]; $user->name = $data[1]; $user->email = $data[2]; $user->groups = array(); $groups = explode(',', $data[3]); foreach ($groups as $group) { if (is_numeric($group)) { $user->groups[] = intval($group); } else { $user->groups = array_merge((array) $user->groups, (array) ExternalloginHelper::getGroups($group)); } } if ($user->save()) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->insert('#__externallogin_users')->columns('server_id, user_id')->values((int) $sid . ',' . (int) $user->id); $db->setQuery($query); $db->execute(); } } } while ($data); fclose($handle); return true; } else { $this->setError('COM_EXTERNALLOGIN_ERROR_BAD_FILE'); return false; } }
/** * External Login event * * @param JAuthenticationResponse &$response Response to the login process * * @return void|true * * @since 2.0.0 */ public function onExternalLogin(&$response) { if (isset($this->success)) { // Prepare response $server = $this->server; $params = $server->params; $sid = $server->id; $response->status = JAuthentication::STATUS_SUCCESS; $response->server = $server; $response->type = 'system.caslogin'; $response->message = ''; // Compute username $response->username = $this->xpath->evaluate($params->get('username_xpath'), $this->success); // Compute email $response->email = $this->xpath->evaluate($params->get('email_xpath'), $this->success); // Compute name $response->fullname = $this->xpath->evaluate($params->get('name_xpath'), $this->success); // Compute groups if ($params->get('group_xpath')) { $groups = $this->xpath->query($params->get('group_xpath'), $this->success); if ($groups && $groups->length > 0) { // Log message if ($params->get('log_groups', 0)) { JLog::add(new ExternalloginLogEntry('Successful detection of groups for user "' . $response->username . '" on server ' . $sid, JLog::INFO, 'system-caslogin-groups')); } $response->groups = array(); // Loop on each group attribute for ($i = 0; $i < $groups->length; $i++) { $group = (string) $groups->item($i)->nodeValue; if (is_numeric($group) && $params->get('group_integer', 0)) { // Log message if ($params->get('log_groups', 0)) { JLog::add(new ExternalloginLogEntry('Found integer group ' . $group . ' of groups for user "' . $response->username . '" on server ' . $sid, JLog::INFO, 'system-caslogin-groups')); } // Group is numeric $dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); $query->select('id')->from('#__usergroups')->where('id = ' . (int) $group); $dbo->setQuery($query); if ($dbo->loadResult()) { // Log message if ($params->get('log_groups', 0)) { JLog::add(new ExternalloginLogEntry('Added integer group ' . $group . ' of groups for user "' . $response->username . '" on server ' . $sid, JLog::INFO, 'system-caslogin-groups')); } $response->groups[] = $group; } } else { // Log message if ($params->get('log_groups', 0)) { JLog::add(new ExternalloginLogEntry('Found string group(s) "' . $group . '" for user "' . $response->username . '" on server ' . $sid, JLog::INFO, 'system-caslogin-groups')); } // Group is not numeric, extract the groups $newgroups = (array) ExternalloginHelper::getGroups($group, $params->get('group_separator', '')); $response->groups = array_merge($response->groups, $newgroups); // Log message if ($params->get('log_groups', 0)) { if (empty($newgroups)) { JLog::add(new ExternalloginLogEntry('No Joomla! groups found from "' . $group . '" on server ' . $sid, JLog::INFO, 'system-caslogin-groups')); } else { JLog::add(new ExternalloginLogEntry('Added groups (' . implode(',', $newgroups) . ') for user "' . $response->username . '" on server ' . $sid, JLog::INFO, 'system-caslogin-groups')); } } } } } else { // Log message if ($params->get('log_groups', 0)) { JLog::add(new ExternalloginLogEntry('Unsuccessful detection of groups for user "' . $response->username . '" on server ' . $sid, JLog::WARNING, 'system-caslogin-groups')); } } } return true; } }