<?php

namespace Types;

class Doc {
  
  

  
  

    // --- Statische Methoden ---
  
  public static function validate($x) { 
    
    
    // --- BLOCK: main ---
    
		if (\FOP\Database::query('SELECT 1 FROM '.qi('doc').' WHERE ((('.\FOP\Database::quote(\FOP\User::getDokument()).') AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getGruppe()).' THEN TRUE ELSE NOT (('.qi('ok3G4wPh').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) END) FROM '.qi('mitglied').' '.qi('ok3G4wPh').' WHERE '.qi('ok3G4wPh').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((('.qi('2Hyq8DKe').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('7sncgH3z').' WHERE '.qi('7sncgH3z').'.'.qi('item').' = '.qi('2Hyq8DKe').'.'.qi('ID').' AND (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('eHueOsQC').' WHERE '.qi('eHueOsQC').'.'.qi('gruppe').' = '.qi('7sncgH3z').'.'.qi('list').' AND (('.qi('eHueOsQC').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1)) LIMIT 1)))) END) FROM '.qi('mitglied').' '.qi('2Hyq8DKe').' WHERE '.qi('2Hyq8DKe').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT ('.\FOP\Database::quote(\FOP\User::getProtokoll()).') FROM '.qi('protokoll').' '.qi('jYtYUs5c').' WHERE '.qi('jYtYUs5c').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-protokoll').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getSuperadmin()).' THEN TRUE ELSE NOT ('.qi('bmxCMQlw').'.'.qi('superadmin').') END) FROM '.qi('mitglied').' '.qi('bmxCMQlw').' WHERE '.qi('bmxCMQlw').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('hX7wRx63').' WHERE '.qi('hX7wRx63').'.'.qi('list').' = '.qi('9lhFb6lb').'.'.qi('ID').' AND (('.qi('hX7wRx63').'.'.qi('item').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1))) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('yvRIjwTv').' WHERE '.qi('yvRIjwTv').'.'.qi('gruppe').' = '.qi('9lhFb6lb').'.'.qi('ID').' AND (('.qi('yvRIjwTv').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1))) AND (NOT ('.qi('9lhFb6lb').'.'.qi('public').'))) END) FROM '.qi('gruppe').' '.qi('9lhFb6lb').' WHERE '.qi('9lhFb6lb').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-gruppe').' LIMIT 1), TRUE)))) AND '.qi('ID').' = ' . intval($x))->fetchColumn() != 1) {
			throw new \FOP\AccessDeniedException(_('invalidinput'));
		}
	
    
  }

  public static function parse($x) { 
    
    
    // --- BLOCK: main ---
    
		
		$result = \FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('doc').' WHERE (CONCAT('.qi('doc').'.'.qi('subject').', \' - \', '.(\FOP\Database::getDriver() == 'mysql' ? 'DATE_FORMAT(FROM_UNIXTIME' : 'to_char(to_timestamp') . '('.qi('doc').'.'.qi('date').')'.(\FOP\Database::getDriver() == 'mysql' ? '' : '::date') . ', '.\FOP\Database::sessionVarSQL('dateformat').'))) = ' . \FOP\Database::quote($x))->fetchColumn();
		if ($result) return $result;
		$result = \FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('doc').' WHERE '.qi('ID').' = ' . \FOP\Database::quote($x))->fetchColumn();
		if ($result) return $result;
		return null;
	
    
  }

  public static function descriptionAction($id) { 
    
    
    // --- BLOCK: access ---
    if(!(((\FOP\User::getDokument())))) throw new \FOP\AccessDeniedException();
    // --- BLOCK: main ---
    
		$data = \FOP\Database::query('SELECT CONCAT('.qi('doc').'.'.qi('subject').', \' - \', '.(\FOP\Database::getDriver() == 'mysql' ? 'DATE_FORMAT(FROM_UNIXTIME' : 'to_char(to_timestamp') . '('.qi('doc').'.'.qi('date').')'.(\FOP\Database::getDriver() == 'mysql' ? '' : '::date') . ', '.\FOP\Database::sessionVarSQL('dateformat').')) AS description, (('.\FOP\Database::quote(\FOP\User::getDokument()).') AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getGruppe()).' THEN TRUE ELSE NOT (('.qi('ok3G4wPh').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) END) FROM '.qi('mitglied').' '.qi('ok3G4wPh').' WHERE '.qi('ok3G4wPh').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((('.qi('2Hyq8DKe').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('7sncgH3z').' WHERE '.qi('7sncgH3z').'.'.qi('item').' = '.qi('2Hyq8DKe').'.'.qi('ID').' AND (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('eHueOsQC').' WHERE '.qi('eHueOsQC').'.'.qi('gruppe').' = '.qi('7sncgH3z').'.'.qi('list').' AND (('.qi('eHueOsQC').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1)) LIMIT 1)))) END) FROM '.qi('mitglied').' '.qi('2Hyq8DKe').' WHERE '.qi('2Hyq8DKe').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT ('.\FOP\Database::quote(\FOP\User::getProtokoll()).') FROM '.qi('protokoll').' '.qi('jYtYUs5c').' WHERE '.qi('jYtYUs5c').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-protokoll').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getSuperadmin()).' THEN TRUE ELSE NOT ('.qi('bmxCMQlw').'.'.qi('superadmin').') END) FROM '.qi('mitglied').' '.qi('bmxCMQlw').' WHERE '.qi('bmxCMQlw').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('hX7wRx63').' WHERE '.qi('hX7wRx63').'.'.qi('list').' = '.qi('9lhFb6lb').'.'.qi('ID').' AND (('.qi('hX7wRx63').'.'.qi('item').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1))) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('yvRIjwTv').' WHERE '.qi('yvRIjwTv').'.'.qi('gruppe').' = '.qi('9lhFb6lb').'.'.qi('ID').' AND (('.qi('yvRIjwTv').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1))) AND (NOT ('.qi('9lhFb6lb').'.'.qi('public').'))) END) FROM '.qi('gruppe').' '.qi('9lhFb6lb').' WHERE '.qi('9lhFb6lb').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-gruppe').' LIMIT 1), TRUE))) AS '.qi('canView').' FROM '.qi('doc').' WHERE '.qi('ID').' = ' . \FOP\Database::quote($id))->fetch(\PDO::FETCH_ASSOC);
		return $data['canView'] ? $data['description'] : null;
	
    
  }

  public static function getItems($deps, $value = null , $search = '' , $conditionSQL = '' ) { 
    
    
    // --- BLOCK: main ---
    
		
		$limit = 200;
		$sqlbase = 'SELECT '.qi('ID').' AS '.qi('ID').', CONCAT('.qi('doc').'.'.qi('subject').', \' - \', '.(\FOP\Database::getDriver() == 'mysql' ? 'DATE_FORMAT(FROM_UNIXTIME' : 'to_char(to_timestamp') . '('.qi('doc').'.'.qi('date').')'.(\FOP\Database::getDriver() == 'mysql' ? '' : '::date') . ', '.\FOP\Database::sessionVarSQL('dateformat').')) AS description, 0 AS priority FROM '.qi('doc').' WHERE ' . ($conditionSQL ?: '(('.\FOP\Database::quote(\FOP\User::getDokument()).') AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getGruppe()).' THEN TRUE ELSE NOT (('.qi('ok3G4wPh').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) END) FROM '.qi('mitglied').' '.qi('ok3G4wPh').' WHERE '.qi('ok3G4wPh').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((('.qi('2Hyq8DKe').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('7sncgH3z').' WHERE '.qi('7sncgH3z').'.'.qi('item').' = '.qi('2Hyq8DKe').'.'.qi('ID').' AND (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('eHueOsQC').' WHERE '.qi('eHueOsQC').'.'.qi('gruppe').' = '.qi('7sncgH3z').'.'.qi('list').' AND (('.qi('eHueOsQC').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1)) LIMIT 1)))) END) FROM '.qi('mitglied').' '.qi('2Hyq8DKe').' WHERE '.qi('2Hyq8DKe').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT ('.\FOP\Database::quote(\FOP\User::getProtokoll()).') FROM '.qi('protokoll').' '.qi('jYtYUs5c').' WHERE '.qi('jYtYUs5c').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-protokoll').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getSuperadmin()).' THEN TRUE ELSE NOT ('.qi('bmxCMQlw').'.'.qi('superadmin').') END) FROM '.qi('mitglied').' '.qi('bmxCMQlw').' WHERE '.qi('bmxCMQlw').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-mitglied').' LIMIT 1), TRUE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('hX7wRx63').' WHERE '.qi('hX7wRx63').'.'.qi('list').' = '.qi('9lhFb6lb').'.'.qi('ID').' AND (('.qi('hX7wRx63').'.'.qi('item').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1))) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('yvRIjwTv').' WHERE '.qi('yvRIjwTv').'.'.qi('gruppe').' = '.qi('9lhFb6lb').'.'.qi('ID').' AND (('.qi('yvRIjwTv').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1))) AND (NOT ('.qi('9lhFb6lb').'.'.qi('public').'))) END) FROM '.qi('gruppe').' '.qi('9lhFb6lb').' WHERE '.qi('9lhFb6lb').'.'.qi('ID').' = '.qi('doc').'.'.qi('to-gruppe').' LIMIT 1), TRUE)))');
		$sqladdon = '';
		if (!is_null($deps)) {
			// bei Filtern werden die Conditions außen vor gelassen (TODO: abhängig davon machen, ob eine ver-AND-ete Condition ein deps:: enthält)
			$sqlbase .= ' AND (true)';
			$sqladdon .= ' AND ((NOT '.qi('archive').'))';
		}
		$sqladdon .= ' ORDER BY '.qi('doc').'.'.qi('date').' DESC';
		$result = \FOP\Database::query($sqlbase . $sqladdon . ' LIMIT ' . intval($limit))->fetchAll(\PDO::FETCH_ASSOC);
		
		$values = [];
		foreach ($result AS $item) {
			$values[$item['ID']] = true; // build up a lookup list
		}
		if (count($result) == $limit) {
			// render '...' when limit is reached
			array_push($result, ['ID' => '_more', 'description' => '...', 'description1' => '...', 'description2' => '...', 'priority' => -1]);
		}
		if ($search) {
			// add searched items
			$addons = \FOP\Database::query($sqlbase . ' AND (CONCAT('.qi('doc').'.'.qi('subject').', \' - \', '.(\FOP\Database::getDriver() == 'mysql' ? 'DATE_FORMAT(FROM_UNIXTIME' : 'to_char(to_timestamp') . '('.qi('doc').'.'.qi('date').')'.(\FOP\Database::getDriver() == 'mysql' ? '' : '::date') . ', '.\FOP\Database::sessionVarSQL('dateformat').')) '.(\FOP\Database::getDriver() == 'pgsql' ? 'ILIKE' : 'LIKE').' '.\FOP\Database::quote('%'.$search.'%').')' . $sqladdon . ' LIMIT ' . intval($limit))->fetchAll(\PDO::FETCH_ASSOC);
			foreach ($addons AS $item) {
				if (!isset($values[$item['ID']])) {
					array_push($result, $item);
				}
			}
		}
		if ($value != -1 && !isset($values[$value])) {
			// $value was not in list: prepend
			$ownValue = \FOP\Database::query($sqlbase . ' AND '.qi('ID').' = ' . \FOP\Database::quote($value ?: 0))->fetch(\PDO::FETCH_ASSOC);
			
			if (!$ownValue) {
				// eigener Wert ist verboten, wird aber zur Speicherung mit hinzugefügt
				$ownValue = [
					'ID' => $value,
					'description' => (_('pSelect')),
					'description1' => (_('pSelect')),
					'description2' => (_('pSelect')),'priority' => -1,
					'forbidden' => true
				];
			}
			
			if ($ownValue) {
				array_unshift($result, $ownValue);
			}
		}
		return $result;
	
    
  }


  
  

  
  
}



