2erlei/app/modules/user/controller.php

183 lines
6.4 KiB
PHP

<?php
/**
* User Controller
*
* Der User-Controller enth&auml;lt alle Funktionen zur Benutzerverwaltung
*
* @package baseContent
* @subpackage user
*/
class user_controller extends fl_controller {
var $defaultAction = 'admin';
var $from = '';
var $layout = 'admin';
function admin() {
$this->check_login('user/');
$this->data['title'] = 'Benutzer-Administration';
}
function add($param='') {
$this->check_login('user/add/');
$this->data['title'] = "Neuen Benutzer anlegen";
if ( $param == 'save') {
$data = ( isset( $_POST['fl'] ))? $_POST['fl']: $this->goToTarget('user/add/');
$this->functions->needs('validation');
$val = new validation();
$val->set_rule('mail', 'email');
$val->set_msg('mail', 'Bitten geben Sie eine gültige e-mail-Adresse an.');
$errors = $val->validate_form($data);
if( $this->model->doesnt_exist($data['name']) == FALSE ) {
$errors[] = 'Der Username ist bereits vergeben, bitte verwenden Sie einen anderen Namen.';
}
if ( !isset($data['password1']) OR ( empty($data['password1']) AND empty($data['password2']) ) ) {
$data['password1'] = $data['password2'] = $this->model->generate_PW();
}
if ( $data['password1'] != $data['password2'] ) {
$errors[] = 'Es wurden zwei verschiedene Passwörter eingetragen';
}
if ( count($errors) == 0 ) {
$created = $this->model->create_user($data);
$msg = ( $created == TRUE )?
'Benutzer '.$data['name'].' wurde angelegt':
'Fehler beim Anlegen des neuen Benutzers';
$this->flash($msg);
if ( $created == TRUE ) {
$sent = $this->model->notify_user($data['name'], $data['password1']);
$msg = ( $sent == TRUE )?
'Benutzer ' . $data['name'] . ' wurde per mail an ' . $data['mail'] . ' informiert.':
'Fehler beim versenden der mail: ' . $sent;
$this->flash($msg);
}
} else {
$this->data += $data;
$msg = implode( '<br>', $errors );
$this->flash($msg);
}
}
}
function edit($params) {
@list($user, $action) = explode('/', $params);
if ( !isset($user) OR !is_numeric($user) ) $this->goToTarget('user/');
$this->check_login('user/edit/'.$user);
if ( isset($action) AND $action == 'save' ) {
$data = ( isset( $_POST['fl'] ))? $_POST['fl']: $this->goToTarget('user/');
$this->functions->needs('validation');
$val = new validation();
$val->set_rule('email', 'email');
$val->set_msg('email', 'Bitten geben Sie eine gültige e-mail-Adresse an.');
$errors = $val->validate_form($data);
if ( $data['password1'] == '' ) {
unset($data['password1'], $data['password2']);
} else {
if ( $data['password1'] != $data['password2'] ) {
$errors[] = 'Es wurden zwei verschiedene Passwörter eingetragen';
}
}
if ( count($errors) == 0 ) {
$updated = $this->model->update_user($data, $user);
$msg = ( $updated == TRUE )?
'Benutzer '.$user.' wurde aktualisiert':
'Fehler beim Aktialisieren des Benutzers ('.$user.')' ;
$this->flash($msg);
$this->goToTarget('user/');
} else {
$this->data += $data;
$msg = implode( '<br>', $errors );
$this->flash($msg);
}
} else { /* Formular anzeigen */
$result = $this->datamodel->retrieve('user', '*', 'id="'.$user.'"', '' ,'1');
unset($result['password']);
$this->data += $result;
$this->data['title'] = "Benutzer ".$result['name']." bearbeiten";
}
}
function del($user) {
$user_number = (int) $user;
$this->check_login('user/del/'.$user);
$this->data['title'] = "Benutzeraccount löschen";
if ( $user_number > 0 AND $user_number == $user ) {
$user = $user_number;
}
$this->data = $this->model->get_data('user', $user, 'name');
if ( $this->data['name'] != $_SESSION['username'] ) {
$this->flash('Sie k&ouml;nnen nur Ihren eigenen Benutzeraccount l&ouml;schen.');
$this->goToTarget('user/');
} else {
$this->data['title'] = 'Benutzer "'.$this->data['name'].'" l&ouml;schen';
if ( is_string($user) ) {
$this->flash('Warnung: Der Benutzeraccount wird endg&uuml;ltig gel&ouml;scht, wenn sie den unten stehenden L&ouml;schknopf bet&auml;tigen.');
} elseif ( is_numeric($user) OR empty($user) ) {
$result = ( $this->datamodel->del('user', $user) )? 'Benutzeraccount von '.$_SESSION['username'].' gel&ouml;scht.': 'Fehler beim L&ouml;schen des Benutzeraccounts '.$_SESSION['username'];
$this->flash($result);
$this->logaction($result);
$this->goToTarget(ADMINMODULE.'/logout/');
}
}
}
/**
* Neuen Benutzer per e-mail informieren
*
* Ein neu angelegter Benutzer erh&auml;lt eine e-mail mit den Zugangsdaten.
* Wenn die mail nicht abgeschickt werden kann, werden die Zugangsdaten
* auf dem Bildschirm ausgegeben.
*
* @param array $data Array aus Username, Passwort und e-mail-Adresse
* @return array erfolgreicher mailversand und Statusmeldung.
*/
function _notifyUser($data) {
$content = "F&uuml;r Sie wurde ein Benutzerkonto f&uuml;r die Administration der Internetseite \"http://".$_SERVER['HTTP_HOST']."\" eingerichtet.\n\nIhre Zugangsdaten lauten:\nBenutzername:\t".$data['name']."\nPasswort:\t".$data['password']."\n\nBitte &auml;ndern Sie das Passwort bei Ihrer ersten Anmeldung auf \"http://".$_SERVER['HTTP_HOST']."/user/\".";
$result = $this->datamodel->retrieve(ADMINMODULE.'_options', '*', "optionname='SEITENTITEL'", '', '1');
$seitentitel = $result['value'];
$config[mailreceipient] = $data['email'];
$config[mailtopic] = '['.$seitentitel.'] Benutzerkonto angelegt';
$config[mailfrom] = 'usermanagement@'.$_SERVER['HTTP_HOST'];
if ( mail($config['mailreceipient'],$config['mailtopic'],$content, "From: {$config[mailfrom]}") ) {
$notify['mailed'] = TRUE;
$notify['status'] = "Benutzer wurde per e-mail informiert.";
} else {
$notify['mailed'] = FALSE;
$notify['status'] = "</p><h4>Fehler</h4><p>Auf diesem Server ist kein Mailversand m&ouml;glich. Bitte teilen Sie dem neuangelegten Benutzer die folgende Nachricht mit:</p><p>".nl2br($content);
}
return $notify;
}
function common() {
if ( isset($_SESSION['username']) ) {
$this->data += $this->datamodel->retrieve('user', 'id AS my_id, email AS my_email, name AS my_name, level AS my_level', "name = '" . $_SESSION['username'] . "'", '', '1');
}
$this->functions->needs('bereiche');
return TRUE;
}
}
?>