<?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;
	}
}
?>
