<?php

abstract class Controller {
    
    
/**
     * calls the module action on the module view with module parameters
     */
    
public function process() {
        
        
# get view
        
$viewObject RootController::getModuleView();
        
        
# get action
        
$viewMethodName RootController::getModuleAction();
        
$viewMethodParameters RootController::getModuleParameters();
        
        
# call view-action
        
$output call_user_func_array(array($viewObject$viewMethodName), $viewMethodParameters);
        
        
# print to stdout
        
return $output;
    }
    
    public static function 
processSubmit($action$moduleName$model) {
        
# create
        
if ($action == 'create') {
            
#if (isset($_REQUEST['submit'.ucfirst($moduleName)])) {
            
if (isset($_REQUEST['submitSave'])) {
                
$invalidFields Model::getInvalidFields($model$_REQUEST);
                if (
count($invalidFields) == 0) {
                    
$insertId $model->insert($_REQUEST);
                    if (
$insertId === false) {
                        
message::addMessage(_('Anlegen des Eintrags fehlgeschlagen.'), message::TYPE_ERROR);
                        
$_SESSION['request'] = $_REQUEST;
                        
Helper::redirect($_SESSION['desiredUrl'], true);
                    } else {
                        
message::addMessage(_('Eintrag erfolgreich angelegt.'), message::TYPE_INFO);
                        
helper::redirect($_SERVER['PHP_SELF'].'?mod='.$moduleName.'&ap='.$insertIdtrue);
                    }
                } else {
                    
message::addMessage(_('Ungültige Eingaben.'), message::TYPE_ERROR);
                    
$_SESSION['request'] = $_REQUEST;
                    
$_SESSION['invalidFields'] = $invalidFields;
                    
Helper::redirect($_SESSION['desiredUrl'], true);
                }
            }
        }
        
# update
        
else if ($action == 'edit') {
            
#if (isset($_REQUEST['submit'.ucfirst($moduleName)])) {
            
if (isset($_REQUEST['submitSave'])) {
                
$invalidFields Model::getInvalidFields($model$_REQUEST);
                if (
count($invalidFields) == 0) {
                    
$result $model->update($_REQUEST);
                    if (
$result === false) {
                        
message::addMessage(_('Aktualisierung des Eintrags fehlgeschlagen.'), message::TYPE_ERROR);
                        
Helper::redirect($_SESSION['desiredUrl'], true);
                    } else {
                        
message::addMessage(_('Eintrag erfolgreich aktualisiert.'), message::TYPE_INFO);
                        
helper::redirect($_SERVER['PHP_SELF'].'?mod='.$moduleName.'&ap='.$_REQUEST['id'], true);
                    }
                    
#helper::redirect($_SERVER['PHP_SELF'].'?mod='.$moduleName.'s', true);
                
} else {
                    
message::addMessage(_('Ungültige Eingaben.'), message::TYPE_ERROR);
                    
$_SESSION['request'] = $_REQUEST;
                    
$_SESSION['invalidFields'] = $invalidFields;
                    
Helper::redirect($_SESSION['desiredUrl'], true);
                }
            }
        }
        
# unconfirmed delete
        
if (isset($_REQUEST['confirmDelete'])) {
            
$id RootController::getModuleParameter(0);
            
$text _('Soll der Eintrag wirklich gelöcht werden?').'&nbsp;';
            
$linkYes $_SERVER['PHP_SELF'].'?mod='.$moduleName.'&action=delete&ap='.$id.'&deleteConfirmed';
            
$text .= '<form action="'.$linkYes.'" method="post" onsubmit="return _stdonsubmit();" style="display: inline;"><input type="submit" name="submit" value="'._('Ja').'" /></form>';
            
$text .= '&nbsp;';
            
$linkNo $_SERVER['PHP_SELF'].'?mod='.$moduleName.'&a='.RootController::getModuleAction().'&ap='.$id;
            
$text .= '<form action="'.$linkNo.'" method="post" onsubmit="return _stdonsubmit();" style="display: inline;"><input type="submit" name="submit" value="'._('Nein').'" /></form>';
            
message::addMessage($textmessage::TYPE_ERROR);
            
helper::redirect($_SERVER['PHP_SELF'].'?mod='.$moduleName.'&a='.$action.'&ap='.$idtrue);
        }
        
# confirmed delete
        
else if (isset($_REQUEST['deleteConfirmed']))  {
            
$id RootController::getModuleParameter(0);
            
$result $model->delete($id);
            if (
$result === false) {
                
message::addMessage(_('Löschen des Eintrags fehlgeschlagen.'), message::TYPE_ERROR);
            } else {
                
message::addMessage(_('Eintrag erfolgreich gelöscht.'), message::TYPE_INFO);
            }
            
helper::redirect($_SERVER['PHP_SELF'].'?mod='.$moduleName.'s'true);
        }
    }
}