<?php
/**
 * Basecontent Controller
 *
 * Der Basecontent Controller &uuml;bernimmt allgemeine Aufgaben
 * f&uuml;r das CMS.
 *
 * @package baseContent
 * @subpacke basecontent
 */
class basecontent_controller extends fl_controller {
	/* Eigenschaften */
		var $defaultAction = 'show';
		var $from = '';
		var $layout = 'admin';
	#

	function show() {
		$this->check_login('basecontent/');
		$this->data['title'] = 'Administration';
	}

	/**
	 * Papierkorb
	 *
	 * @todo Parameter für Aktionen einbauen
	 * @todo Datenvorbereitung durch das Model
	 * @todo relevante Module in Konfigurationsdatei auslagern
	 * @todo nach erotikdatenbank portieren
	 */	
	function trashcan($param) {
		$this->check_login('basecontent/trashcan/');
		$this->data['title'] = 'Papierkorb';

		/* module auflisten, die status 2 haben können
		$modules = array(
			'Firmen'=>'company_LANG', 
			'Firmenarten'=>'company_cat_LANG', 
			'Lokalbereiche'=>'localarea', 
			'L&auml;nder'=>'localarea_cat_LANG', 
			'Profile'=>'profiles_LANG', 
			'Sprachen'=>'language'
		);
		 */
		$modules = array(
			'Accounts'=>'account'
			);

		// Daten sammeln
		$trashcan_data = $this->model->get_trashcan_data($modules);
		$this->data += $trashcan_data;
	}

	function login($from) {
		$this->data['title'] = 'Anmelden';
	 	$this->data['from'] = (string) $from;
		$this->layout = 'loginout';
	}

	/**
	 * Anzeige der Fehlermeldung "Nicht berechtigt"
	 */
	function notallowed() {
		$this->data['title'] = 'Keine Berechtigung';
	}

	function auth() {
		$fl = $_POST['fl'];

		if ( isset($_SESSION['username']) OR $this->model->login($fl) ) {
			$_SESSION['username'] = $fl['username'];
			$_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];

			$result = $this->datamodel->retrieve('user', 'level', 'name = "'.$_SESSION['username'].'"');
			$_SESSION['userlevel'] = $result['level'];
			$this->flash('Willkommen, '.$_SESSION['username'].'!');
			$this->logaction( $_SESSION['username'].' hat sich eingeloggt' );

			if ( empty($fl['from']) ) {
				$this->data = array('title'=>'Administrationsbereich');
				$this->goToTarget('basecontent/');
			} else {
				$this->goToTarget($fl['from']);
			}

		} else {
			$this->flash('Falscher Benutzername oder falsches Passwort angegeben.');
			$this->data['from'] = $fl['from'];
			$this->data['title'] = 'Einloggen';
			$this->layout = 'loginout';
			$this->view = 'login';
		}
	}

	function logout() {
		$this->check_login('basecontent/');
		$this->layout = 'loginout';
		$this->logaction($_SESSION['username'].' hat sich ausgeloggt');
		$this->data['title'] = 'Ausgeloggt';

		// datenbank aufraeumen
		//$this->clean_db();

		session_destroy();
	}

	function options($action) {
		$this->check_login('basecontent/options/');
		$this->data['title'] = 'Einstellungen bearbeiten';

		if( $action == 'save') {
			$fl = $_POST['fl'];
			$failures = 0;
			$result = array();

			foreach( $fl as $key => $value ) {
				$temp = explode('_', $key);

				$data['optionname'] = strtoupper($temp[1]);
				$data['value'] = $value;
				$module = $temp[0].'_options';

				$optionresult = $this->datamodel->retrieve( $module , 'id', "optionname = '".$data['optionname']."'", '', '1');
				$id = $optionresult['id'];

				if ( $this->datamodel->update($module, $data, $id) ) {
					$result[] = ucwords( $temp[1] ) . ' aktualisiert: ' . $data['value'];
 				} else {
					$result[] = 'Option ' . ucwords( $temp[1] ) . ' konnte nicht aktualisiert werden.';
					$failures++;
				}
			}

			$msg = ( $failures == 0 ) ?
				'Optionen wurden aktualisiert':
				implode("\n", $result);
			$this->flash($msg);

			$this->data['title'] = 'Administration';
			$this->goToTarget('basecontent/');
		}
	}

	function protocol($type) {
		$this->layout = 'admin';
		$this->check_login('basecontent/protocol/'.$type);

		$logfile = "Auflistung der Benutzeraktionen\r\n\r\n";

		switch ($type) {

			case 'screen':
				$array = $this->datamodel->retrieve('basecontent', '*', '', 'id DESC', '30');
				foreach ( $array as $row ) {
					$logfile .= $row['id'].": ".$row['name']." (".$row['ip'].") - ".$row['date']." - ".$row['action']."\r\n";
				}

				$this->data['logfile'] = $logfile;
				$this->data['title'] = "Logfile ausgeben";
				$this->logaction('Logfile am Bildschirm ausgegeben. (30 Aktionen)');
				$this->layout = 'viewprotocol';
			break;

			case 'textfile':
				$array = $this->datamodel->retrieve('basecontent', '*', '', 'id ASC');
				foreach ( $array as $row ) {
					$logfile .= $row['id'].": ".$row['name']." (".$row['ip'].") - ".$row['date']." - ".$row['action']."\r\n";
				}
				$logfile .= "\r\nEnde der Logfileausgabe";
				$logfile =  html_entity_decode($logfile);

				header("Content-length: ".strlen($logfile));
				header("Content-type: text/plain");
				header("Content-Disposition: attachment; filename=aktionen.log");
				echo $logfile;

				$this->flash('Logfile als Datei heruntergeladen');
				exit();
			break;
		}
	}

	function support() {
		$this->check_login('basecontent/support');
		// Eine mail an info@2erlei mit "Seitenname, IP, Uhrzeit, username, ggf. Protokoll" abschicken

		$user = $this->datamodel->retrieve('user', 'email', "name = '".$_SESSION['username']."'", '', '1');
		$result = $this->datamodel->retrieve(ADMINMODULE.'_options', '*', "optionname='SEITENTITEL'");
		$sitetitle = $result['value'];

		$array = $this->datamodel->retrieve('basecontent', '*', '', 'id DESC', '30');
		foreach ( $array as $row ) {
			$logfile .= $row['id'].": ".$row['name']." (".$row['ip'].") - ".$row['date']." - ".$row['action']."\r\n";
		}
		unset($array);

		$config['mailreceipient'] = 'info@2erlei.de';
		$config['mailtopic'] = '['.$sitetitle.'] Supportanfrage';
		$config['mailfrom'] = 'supportbutton@'.$_SERVER['HTTP_HOST'];
		$config['replyto'] = $user['email'];
		$content = 'Es wurde eine Supportanfrage abgegeben.'."\n";
		$content .= "\n".'Seitentitel:'."\t". $sitetitle;
		$content .= "\n".'IP:' . "\t\t" . $_SESSION['IP'];
		$content .= "\n".'Uhrzeit:' . "\t" . date('Y-m-d H:i:s', mktime() );
		$content .= "\n".'Benutzer:' . "\t". $_SESSION['username'];
		$content .= "\n".'Protokoll:'."\n". $logfile;
		$content .= "\n\n".'Ende der Supportanfrage';
		$content .= "\n-- \nbaseContent";

		if ( mail($config['mailreceipient'], $config['mailtopic'], $content, "From: {$config['mailfrom']}\r\n"."Reply-To: {$config['replyto']}") ) {
			$notify['mailed'] = TRUE;
			$notify['status'] = "2erlei wurde per e-mail über Ihren Supportwunsch informiert.";
		} else {
			$notify['mailed'] = FALSE;
			$notify['status'] = "</p><h4>Fehler</h4><p>Auf diesem Server ist kein Mailversand m&ouml;glich. Bitte richten Sie Ihre Supportanfrage telefonisch an 2erlei. ";
		}
		$this->flash($notify['status']);

		$this->goToTarget('basecontent/');
	}

	function webframe($page='') {
		$this->layout = 'default';
		$this->goToTarget($page);
		/*
		$this->data['title'] = 'Webseiten-Ansicht';
		if ( $page == 'top' ) {
			echo file_get_contents($this->modulepath . 'basecontent/de/frame_top.php');
		}
		*/
	}

	function common() {
		return $this->factory->get_helper('bereiche');
	}
}
?>
