<?php
namespace controller;

use Psr\Container\ContainerInterface;
use \Model\NachrichtDAO;
use \Model\Message;
use Slim\Http\Response;
use Slim\Http\Request;
use
DataTables\Editor,
DataTables\Editor\Field,
DataTables\Editor\Format,
DataTables\Editor\Mjoin,
DataTables\Editor\Options,
DataTables\Editor\Upload,
DataTables\Editor\Validate,
DataTables\Editor\ValidateOptions;
use DataTables\Database\Query;


$BereichID = $_SESSION['BEREICH_ID'];


class NachrichtenController
{
    
    public static function nachrichtenData(){
        require  "../public/frameworks/Editor-1.7.2/php/DataTables.php";        
       
        return Editor::inst( $db, 'nachricht', 'id' )
        ->fields(
            Field::inst( 'nachricht.status' )
                    ->setFormatter( Format::ifEmpty( 0 ) ),
            Field::inst( 'nachricht.titel')
                    ->validator( Validate::notEmpty( ValidateOptions::inst()
                    ->message( 'Es ist ein Betreff notwendig' )
                ) ),
            Field::inst( 'nachricht.nachricht' )
                    ->validator( Validate::notEmpty( ValidateOptions::inst()
                    ->message( 'Es kann keine leere Nachricht versendet werden' )
                ) ),
            Field::inst( 'nachricht.verweis' ),
            Field::inst( 'nachricht.faellig' )
                    ->validator( Validate::dateFormat( 'd-m-Y' ) )
                    ->getFormatter( Format::dateSqlToFormat( 'd-m-Y' ) )
                    ->setFormatter( Format::dateFormatToSql( 'd-m-Y' ) ),
            Field::inst( 'nachricht.erstell_datum' )  
                    ->getFormatter( Format::dateSqlToFormat( 'd-m-Y' ) )
                    ->setFormatter( Format::dateFormatToSql( 'd-m-Y' ) ),
            Field::inst( 'sendBereich.bereichsname' ),
            Field::inst( 'empfBereich.bereichsname' ),
            Field::inst('nachricht.sender_id')
                ->options(
                        Options::inst()
                            ->table('bereich')
                            ->value('pk_id_bereich')
                            ->label('bereichsname')
                            
                    ),
            
            Field::inst('nachricht.empfaenger_id')
            ->options(
                Options::inst()
                ->table('bereich')
                ->value('pk_id_bereich')
                ->label('bereichsname')
                )
          )
          
        ->leftJoin('bereich as sendBereich', 'sendBereich.pk_id_bereich', '=', 'nachricht.sender_id')
        ->leftJoin('bereich as empfBereich', 'empfBereich.pk_id_bereich', '=', 'nachricht.empfaenger_id')
           /*
              Beispiel für ein Select where x AND y erfüllt sind --> mehrere Where Zeilen 
              ->where('sendBereich.pk_id_bereich', $_SESSION['BEREICH_ID'])   //Nur Daten aund von dem Beeich, in dem sich der User bewegt
              ->where('nachricht.status' , 0)  // zeigt nur unbearbeitete Nachrichten an
           */
        
        /*
            Mehrere Where Bedingungen welche mit OR oder AND verknüpft werden können.
            Im Beispiel ist der Bereich des eingeloggt Users entweder im Feld AN oder im FELD von enthalten
         */
        ->where( function ( $q ) {
            $q->where( function ( $r ) {
                $r->where( 'sendBereich.pk_id_bereich', $_SESSION['BEREICH_ID'] );
                $r->or_where( 'empfBereich.pk_id_bereich', $_SESSION['BEREICH_ID'] );
            } );
        } )
      
        ->process( $_POST )
        ->json(false);
        
        
    } 
}

