/** * Stores the account informations of a user */ public function store_action() { $this->check_ticket(); $errors = $info = $success = array(); $logout = false; //erstmal die "unwichtigen" Daten $geschlecht = Request::int('geschlecht'); if ($this->shallChange('user_info.geschlecht', 'gender', $geschlecht)) { $this->user->geschlecht = $geschlecht; } $title_front = Request::get('title_front') ?: Request::get('title_front_chooser'); if ($this->shallChange('user_info.title_front', 'title', $title_front)) { $this->user->title_front = $title_front; } $title_rear = Request::get('title_rear') ?: Request::get('title_rear_chooser'); if ($this->shallChange('user_info.title_rear', 'title', $title_rear)) { $this->user->title_rear = $title_rear; } if ($this->user->store()) { $success[] = _('Ihre persönlichen Daten wurden geändert.'); // Inform the user about this change setTempLanguage($this->user->user_id); $this->postPrivateMessage(_("Ihre persönlichen Daten wurden geändert.\n")); restoreLanguage(); } //nur nötig wenn der user selbst seine daten ändert if (!$this->restricted) { // Vorname verändert ? $vorname = trim(Request::get('vorname')); if ($this->shallChange('auth_user_md5.Vorname', 'name', $vorname)) { // Vorname nicht korrekt oder fehlend if (!$this->validator->ValidateName($vorname)) { $errors[] = _('Der Vorname fehlt oder ist unsinnig!'); } else { $this->user->Vorname = $vorname; $success[] = _('Ihr Vorname wurde geändert!'); } } // Nachname verändert ? $nachname = trim(Request::get('nachname')); if ($this->shallChange('auth_user_md5.Nachname', 'name', $nachname)) { // Nachname nicht korrekt oder fehlend if (!$this->validator->ValidateName($nachname)) { $errors[] = _('Der Nachname fehlt oder ist unsinnig!'); } else { $this->user->Nachname = $nachname; $success[] = _('Ihr Nachname wurde geändert!'); } } // Username $new_username = trim(Request::get('new_username')); if ($this->shallChange('auth_user_md5.username', 'username', $new_username)) { if (!$this->validator->ValidateUsername($new_username)) { $errors[] = _('Der gewählte Benutzername ist nicht lang genug!'); } else { if ($check_uname = StudipAuthAbstract::CheckUsername($new_username) && $check_uname['found']) { $errors[] = _('Der Benutzername wird bereits von einem anderen Benutzer verwendet. Bitte wählen Sie einen anderen Usernamen!'); } else { $this->user->username = $new_username; $success[] = _('Ihr Benutzername wurde geändert!'); URLHelper::addLinkParam('username', $this->user->username); $logout = true; } } } // Email $email1 = trim(Request::get('email1')); $email2 = trim(Request::get('email2')); if ($this->shallChange('auth_user_md5.Email', 'email', $email1)) { $auth = StudipAuthAbstract::GetInstance($this->user->auth_plugin ?: 'standard'); $is_sso = $auth instanceof StudipAuthSSO; if (!$is_sso && !$auth->isAuthenticated($this->user->username, Request::get('password'))) { $errors[] = _('Das aktuelle Passwort wurde nicht korrekt eingegeben.'); } else { if ($email1 !== $email2) { $errors[] = _('Die Wiederholung der E-Mail-Adresse stimmt nicht mit Ihrer Eingabe überein.'); } else { $result = edit_email($this->user, $email1); $messages = explode('§', $result[1]); if ($result[0]) { $this->user->Email = $email1; if (count($messages) < 2) { $success[] = _('Ihre E-Mail-Adresse wurde geändert!'); } } for ($i = 0; $i < count($messages); $i += 2) { $type = $messages[$i]; if ($type === 'msg') { $type = 'success'; } else { if ($type === 'error') { $type = 'errors'; } } ${$type}[] = $messages[$i + 1]; } } } } } if (count($errors) > 0) { $this->reportErrorWithDetails(_('Bitte überprüfen Sie Ihre Eingaben:'), $errors); } else { if ($this->user->store()) { $this->reportSuccessWithDetails(_('Ihre Nutzerdaten wurden geändert.'), $success); if (count($info) > 0) { $this->reportInfoWithDetails(_('Bitte beachten Sie:'), $info); } } } if ($logout) { $token = uniqid('logout', true); $this->flash['logout-token'] = $token; $this->redirect('settings/account/logout?token=' . $token); } else { $this->redirect('settings/account'); } }
/** * @return bool|string */ function auth_doregister() { global $_language_path; $this->error_msg = ""; // check for direct link to register2.php if (!$_SESSION['_language'] || $_SESSION['_language'] == "") { $_SESSION['_language'] = get_accepted_languages(); } $_language_path = init_i18n($_SESSION['_language']); $this->auth["uname"] = Request::username('username'); // This provides access for "crcregister.ihtml" $validator = new email_validation_class(); // Klasse zum Ueberpruefen der Eingaben $validator->timeout = 10; // Wie lange warten wir auf eine Antwort des Mailservers? if (!Seminar_Session::check_ticket(Request::option('login_ticket'))) { return false; } $username = trim(Request::get('username')); $Vorname = trim(Request::get('Vorname')); $Nachname = trim(Request::get('Nachname')); // accept only registered domains if set $cfg = Config::GetInstance(); $email_restriction = $cfg->getValue('EMAIL_DOMAIN_RESTRICTION'); if ($email_restriction) { $Email = trim(Request::get('Email')) . '@' . trim(Request::get('emaildomain')); } else { $Email = trim(Request::get('Email')); } if (!$validator->ValidateUsername($username)) { $this->error_msg = $this->error_msg . _("Der gewählte Benutzername ist zu kurz!") . "<br>"; return false; } // username syntaktisch falsch oder zu kurz // auf doppelte Vergabe wird weiter unten getestet. if (!$validator->ValidatePassword(Request::quoted('password'))) { $this->error_msg = $this->error_msg . _("Das Passwort ist zu kurz!") . "<br>"; return false; } if (!$validator->ValidateName($Vorname)) { $this->error_msg = $this->error_msg . _("Der Vorname fehlt oder ist unsinnig!") . "<br>"; return false; } // Vorname nicht korrekt oder fehlend if (!$validator->ValidateName($Nachname)) { $this->error_msg = $this->error_msg . _("Der Nachname fehlt oder ist unsinnig!") . "<br>"; return false; // Nachname nicht korrekt oder fehlend } if (!$validator->ValidateEmailAddress($Email)) { $this->error_msg = $this->error_msg . _("Die E-Mail-Adresse fehlt oder ist falsch geschrieben!") . "<br>"; return false; } // E-Mail syntaktisch nicht korrekt oder fehlend $REMOTE_ADDR = $_SERVER["REMOTE_ADDR"]; $Zeit = date("H:i:s, d.m.Y", time()); if (!$validator->ValidateEmailHost($Email)) { // Mailserver nicht erreichbar, ablehnen $this->error_msg = $this->error_msg . _("Der Mailserver ist nicht erreichbar, bitte überprüfen Sie, ob Sie E-Mails mit der angegebenen Adresse verschicken und empfangen können!") . "<br>"; return false; } else { // Server ereichbar if (!$validator->ValidateEmailBox($Email)) { // aber user unbekannt. Mail an abuse! StudipMail::sendAbuseMessage("Register", "Emailbox unbekannt\n\nUser: {$username}\nEmail: {$Email}\n\nIP: {$REMOTE_ADDR}\nZeit: {$Zeit}\n"); $this->error_msg = $this->error_msg . _("Die angegebene E-Mail-Adresse ist nicht erreichbar, bitte überprüfen Sie Ihre Angaben!") . "<br>"; return false; } else { // Alles paletti, jetzt kommen die Checks gegen die Datenbank... } } $check_uname = StudipAuthAbstract::CheckUsername($username); if ($check_uname['found']) { // error_log("username schon vorhanden", 0); $this->error_msg = $this->error_msg . _("Der gewählte Benutzername ist bereits vorhanden!") . "<br>"; return false; // username schon vorhanden } if (count(User::findBySQL("Email LIKE " . DbManager::get()->quote($Email)))) { $this->error_msg = $this->error_msg . _("Die angegebene E-Mail-Adresse wird bereits von einem anderen Benutzer verwendet. Sie müssen eine andere E-Mail-Adresse angeben!") . "<br>"; return false; // Email schon vorhanden } // alle Checks ok, Benutzer registrieren... $hasher = UserManagement::getPwdHasher(); $new_user = new User(); $new_user->username = $username; $new_user->perms = 'user'; $new_user->password = $hasher->HashPassword(Request::get('password')); $new_user->vorname = $Vorname; $new_user->nachname = $Nachname; $new_user->email = $Email; $new_user->geschlecht = Request::int('geschlecht'); $new_user->title_front = trim(Request::get('title_front', Request::get('title_front_chooser'))); $new_user->title_rear = trim(Request::get('title_rear', Request::get('title_rear_chooser'))); $new_user->auth_plugin = 'standard'; $new_user->store(); if ($new_user->user_id) { self::sendValidationMail($new_user); $this->auth["perm"] = $new_user->perms; return $new_user->user_id; } }
/** * Change an existing studip user according to the given parameters * * @access public * @param array structure: array('string table_name.field_name'=>'string value') * @return bool Change successful? */ function changeUser($newuser) { global $perm; // Do we have permission to do so? if (!$perm->have_perm("admin")) { $this->msg .= "error§" . _("Sie haben keine Berechtigung Accounts zu verändern.") . "§"; return FALSE; } if (!$perm->is_fak_admin() && $newuser['auth_user_md5.perms'] == "admin") { $this->msg .= "error§" . _("Sie haben keine Berechtigung, <em>Admin-Accounts</em> anzulegen.") . "§"; return FALSE; } if (!$perm->have_perm("root") && $newuser['auth_user_md5.perms'] == "root") { $this->msg .= "error§" . _("Sie haben keine Berechtigung, <em>Root-Accounts</em> anzulegen.") . "§"; return FALSE; } if (!$perm->have_perm("root")) { if (!$perm->is_fak_admin() && $this->user_data['auth_user_md5.perms'] == "admin") { $this->msg .= "error§" . _("Sie haben keine Berechtigung <em>Admin-Accounts</em> zu verändern.") . "§"; return FALSE; } if ($this->user_data['auth_user_md5.perms'] == "root") { $this->msg .= "error§" . _("Sie haben keine Berechtigung <em>Root-Accounts</em> zu verändern.") . "§"; return FALSE; } if ($perm->is_fak_admin() && $this->user_data['auth_user_md5.perms'] == "admin") { if (!$this->adminOK()) { $this->msg .= "error§" . _("Sie haben keine Berechtigung diesen Admin-Account zu verändern.") . "§"; return FALSE; } } } // active dozent? (ignore the studygroup guys) $status = studygroup_sem_types(); if (empty($status)) { $count = 0; } else { $query = "SELECT COUNT(*)\n FROM seminar_user AS su\n LEFT JOIN seminare AS s USING (Seminar_id)\n WHERE su.user_id = ?\n AND s.status NOT IN (?)\n AND su.status = 'dozent'\n AND (SELECT COUNT(*) FROM seminar_user su2 WHERE Seminar_id = su.Seminar_id AND su2.status = 'dozent') = 1\n GROUP BY user_id"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'], $status)); $count = $statement->fetchColumn(); } if ($count && isset($newuser['auth_user_md5.perms']) && $newuser['auth_user_md5.perms'] != "dozent") { $this->msg .= sprintf("error§" . _("Der Benutzer <em>%s</em> ist alleiniger Dozent in %s aktiven Veranstaltungen und kann daher nicht in einen anderen Status versetzt werden!") . "§", $this->user_data['auth_user_md5.username'], $count); return FALSE; } // active admin? if ($this->user_data['auth_user_md5.perms'] == 'admin' && $newuser['auth_user_md5.perms'] != 'admin') { // count number of institutes where the user is admin $query = "SELECT COUNT(*)\n FROM user_inst\n WHERE user_id = ? AND inst_perms = 'admin'\n GROUP BY Institut_id"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); // if there are institutes with admin-perms, add error-message and deny change if ($count = $statement->fetchColumn()) { $this->msg .= sprintf('error§' . _("Der Benutzer <em>%s</em> ist Admin in %s Einrichtungen und kann daher nicht in einen anderen Status versetzt werden!") . '§', $this->user_data['auth_user_md5.username'], $count); return false; } } // Is the username correct? if (isset($newuser['auth_user_md5.username'])) { if ($this->user_data['auth_user_md5.username'] != $newuser['auth_user_md5.username']) { if (!$this->validator->ValidateUsername($newuser['auth_user_md5.username'])) { $this->msg .= "error§" . _("Der gewählte Benutzername ist zu kurz oder enthält unzulässige Zeichen!") . "§"; return FALSE; } $check_uname = StudipAuthAbstract::CheckUsername($newuser['auth_user_md5.username']); if ($check_uname['found']) { $this->msg .= "error§" . _("Der Benutzername wird bereits von einem anderen Benutzer verwendet. Bitte wählen Sie einen anderen Benutzernamen!") . "§"; return false; } else { //$this->msg .= "info§" . $check_uname['error'] ."§"; } } else { unset($newuser['auth_user_md5.username']); } } // Can we reach the email? if (isset($newuser['auth_user_md5.Email'])) { if (!$this->checkMail($newuser['auth_user_md5.Email'])) { return FALSE; } } // Store changed values in internal array if allowed $old_perms = $this->user_data['auth_user_md5.perms']; $auth_plugin = $this->user_data['auth_user_md5.auth_plugin']; foreach ($newuser as $key => $value) { if (!StudipAuthAbstract::CheckField($key, $auth_plugin)) { $this->user_data[$key] = $value; } else { $this->msg .= "error§" . sprintf(_("Das Feld <em>%s</em> können Sie nicht ändern!"), $key) . "§"; return FALSE; } } if (!$this->storeToDatabase()) { $this->msg .= "info§" . _("Es wurden keine Veränderungen der Grunddaten vorgenommen.") . "§"; return false; } $this->msg .= "msg§" . sprintf(_("Benutzer \"%s\" verändert."), $this->user_data['auth_user_md5.username']) . "§"; if ($auth_plugin !== null) { // Automated entering new users, based on their status (perms) $result = AutoInsert::instance()->saveUser($this->user_data['auth_user_md5.user_id'], $newuser['auth_user_md5.perms']); foreach ($result['added'] as $item) { $this->msg .= "msg§" . sprintf(_("Das automatische Eintragen in die Veranstaltung <em>%s</em> wurde durchgeführt."), $item) . "§"; } foreach ($result['removed'] as $item) { $this->msg .= "msg§" . sprintf(_("Das automatische Austragen aus der Veranstaltung <em>%s</em> wurde durchgeführt."), $item) . "§"; } // include language-specific subject and mailbody $user_language = getUserLanguagePath($this->user_data['auth_user_md5.user_id']); $Zeit = date("H:i:s, d.m.Y", time()); include "locale/{$user_language}/LC_MAILS/change_mail.inc.php"; // send mail StudipMail::sendMessage($this->user_data['auth_user_md5.Email'], $subject, $mailbody); } // Upgrade to admin or root? if ($newuser['auth_user_md5.perms'] == "admin" || $newuser['auth_user_md5.perms'] == "root") { $this->re_sort_position_in_seminar_user(); // delete all seminar entries $query = "SELECT seminar_id FROM seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $seminar_ids = $statement->fetchAll(PDO::FETCH_COLUMN); $query = "DELETE FROM seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Veranstaltungen gelöscht."), $db_ar) . "§"; array_map('update_admission', $seminar_ids); } // delete all entries from waiting lists $query = "SELECT seminar_id FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $seminar_ids = $statement->fetchAll(PDO::FETCH_COLUMN); $query = "DELETE FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Wartelisten gelöscht."), $db_ar) . "§"; array_map('update_admission', $seminar_ids); } // delete 'Studiengaenge' $query = "DELETE FROM user_studiengang WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Zuordnungen zu Studiengängen gelöscht."), $db_ar) . "§"; } // delete all private appointments of this user if ($db_ar = delete_range_of_dates($this->user_data['auth_user_md5.user_id'], FALSE) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Terminen gelöscht."), $db_ar) . "§"; } } if ($newuser['auth_user_md5.perms'] == "admin") { $this->logInstUserDel($this->user_data['auth_user_md5.user_id'], "inst_perms != 'admin'"); $query = "DELETE FROM user_inst WHERE user_id = ? AND inst_perms != 'admin'"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus MitarbeiterInnenlisten gelöscht."), $db_ar) . "§"; } } if ($newuser['auth_user_md5.perms'] == "root") { $this->logInstUserDel($this->user_data['auth_user_md5.user_id']); $query = "DELETE FROM user_inst WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus MitarbeiterInnenlisten gelöscht."), $db_ar) . "§"; } } return TRUE; }