Code-Modernisierungen für PHP-8-Kompatibilität.
Zusätzlich Charsets, Linebreaks und Kommentar-Blöcke korrigiert.
This commit is contained in:
parent
4afbdaf52b
commit
7b28fea35c
@ -8,7 +8,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstra<EFBFBD>e 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
@ -30,12 +30,12 @@
|
||||
|
||||
/*
|
||||
|
||||
Aufl<EFBFBD>sungen zu allen Fragen
|
||||
Auflösungen zu allen Fragen
|
||||
|
||||
*/
|
||||
|
||||
|
||||
$tpl->addVars('navAntworten', 'current');
|
||||
$GLOBALS['tpl']->addVars('navAntworten', 'current');
|
||||
|
||||
$katalog = -1;
|
||||
if (isset($_REQUEST['katalog'])) {
|
||||
@ -44,13 +44,13 @@ if (isset($_REQUEST['katalog'])) {
|
||||
|
||||
$abschnitte = getTopics();
|
||||
foreach ($abschnitte as $nr => $description) {
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'abschnittNr' => $nr,
|
||||
'abschnittName' => htmlspecialchars($description),
|
||||
'navAntwortenAbschnitt' => ($katalog == $nr) ? 'current':''
|
||||
'navAntwortenAbschnitt' => ($katalog == $nr) ? 'current' : ''
|
||||
));
|
||||
|
||||
$tpl->parseBlock('page-body', 'NavAntworten', 'Sublinks', TRUE);
|
||||
$GLOBALS['tpl']->parseBlock('page-body', 'NavAntworten', 'Sublinks', TRUE);
|
||||
}
|
||||
|
||||
if (isset($_SESSION['zufallsfragen']) || isset($_SESSION['bogen'])) {
|
||||
@ -61,9 +61,8 @@ if (isset($_SESSION['zufallsfragen']) || isset($_SESSION['bogen'])) {
|
||||
unset($_SESSION['fragen_cnt']);
|
||||
unset($_SESSION['zufallstats']);
|
||||
unset($_SESSION['bogen']);
|
||||
}
|
||||
else {
|
||||
$tpl->addTemplates(Array('content' => 'aufloesung-error'));
|
||||
} else {
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'aufloesung-error'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -78,20 +77,20 @@ if ($katalog > 0) {
|
||||
$stmt->bind_result($selectedNr, $selectedDescription);
|
||||
$stmt->fetch();
|
||||
|
||||
addBreadcrumb($_REQUEST['show'].'&katalog=' . $selectedNr, $selectedDescription);
|
||||
addBreadcrumb($_REQUEST['show'] . '&katalog=' . $selectedNr, $selectedDescription);
|
||||
|
||||
$tpl->addTemplates(Array(
|
||||
$GLOBALS['tpl']->addTemplates(array(
|
||||
'content' => 'aufloesung-antworten'
|
||||
));
|
||||
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'abschnittNr' => $selectedNr,
|
||||
'abschnittName' => htmlspecialchars($selectedDescription)
|
||||
));
|
||||
|
||||
$stmt->close();
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT * FROM `fragen` WHERE `Abschnitt` = ? AND `Jahr` = ? ORDER BY Abschnitt,Nr ASC');
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT * FROM `fragen` WHERE `Abschnitt` = ? AND `Jahr` = ? ORDER BY Abschnitt,Nr');
|
||||
$stmt->bind_param('ii', $katalog, $_SESSION['jahr']);
|
||||
$stmt->execute();
|
||||
$questions = $stmt->get_result();
|
||||
@ -100,32 +99,34 @@ if ($katalog > 0) {
|
||||
|
||||
while ($question = $questions->fetch_array(MYSQLI_ASSOC)) {
|
||||
ShowAnswer($question);
|
||||
$tpl->parseBlock('content', 'Antworten', 'Row', TRUE, TRUE);
|
||||
if ($I%10==0) {
|
||||
$tpl->parseBlock('content', 'Antworten', 'Topline', TRUE);
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Antworten', 'Row', TRUE, TRUE);
|
||||
if ($I % 10 == 0) {
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Antworten', 'Topline', TRUE);
|
||||
}
|
||||
$I++;
|
||||
}
|
||||
$questions->close();
|
||||
$stmt->close();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
|
||||
$tpl->addTemplates('content', 'aufloesung-abschnitte');
|
||||
$GLOBALS['tpl']->addTemplates('content', 'aufloesung-abschnitte');
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT `Nr`,`Beschreibung` FROM `abschnitte` WHERE `Jahr` = ? ORDER BY Nr ASC');
|
||||
$nr = 0;
|
||||
$description = '';
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT `Nr`,`Beschreibung` FROM `abschnitte` WHERE `Jahr` = ? ORDER BY Nr');
|
||||
$stmt->bind_param('i', $_SESSION['jahr']);
|
||||
$stmt->execute();
|
||||
$stmt->bind_result($nr, $description);
|
||||
|
||||
while ($stmt->fetch()) {
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'abschnittNr' => $nr,
|
||||
'abschnittName' => $description
|
||||
));
|
||||
|
||||
$tpl->parseBlock('content', 'Abschnitte', 'Row', TRUE);
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Abschnitte', 'Row', TRUE);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
|
@ -1,15 +1,12 @@
|
||||
<?php
|
||||
|
||||
|
||||
if (isset($_POST['normal'])) {
|
||||
setcookie("stylesheet", "normal", time()+60*60*24*365);
|
||||
$tpl->addVars('extraStyleSheet', '');
|
||||
$GLOBALS['tpl']->addVars('extraStyleSheet', '');
|
||||
}
|
||||
|
||||
if (isset($_POST['barrierefrei'])) {
|
||||
setcookie("stylesheet", "barrierefrei", time()+60*60*24*365);
|
||||
}
|
||||
|
||||
$tpl->addTemplates(Array("content" => "barrierefreiheit"));
|
||||
|
||||
?>
|
||||
$GLOBALS['tpl']->addTemplates(Array("content" => "barrierefreiheit"));
|
||||
|
@ -8,7 +8,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
@ -29,523 +29,633 @@
|
||||
*/
|
||||
|
||||
/************************************************************
|
||||
* Template class
|
||||
*
|
||||
* This class is capable of replacing variables with text,
|
||||
* including other templates, and it can parse dynamic blocks
|
||||
* which can be nested inside other blocks.
|
||||
*
|
||||
* Predefined variables:
|
||||
*
|
||||
* {templatePath} Contains the template path
|
||||
* {templateLang} Contains the country code, if set
|
||||
*
|
||||
* If you don't need them, remove them immediately after
|
||||
* creating the class instance or setting a new template path.
|
||||
*
|
||||
* $id: class Template v1.0 / Kai Blaschke $
|
||||
*
|
||||
**************************************************************/
|
||||
* Template class
|
||||
*
|
||||
* This class is capable of replacing variables with text,
|
||||
* including other templates, and it can parse dynamic blocks
|
||||
* which can be nested inside other blocks.
|
||||
*
|
||||
* Predefined template variables:
|
||||
*
|
||||
* - {templatePath} Contains the template path
|
||||
* - {templateLang} Contains the country code, if set
|
||||
*
|
||||
* If you don't need them, remove them immediately after
|
||||
* creating the class instance or setting a new template path.
|
||||
*
|
||||
**************************************************************/
|
||||
class Template
|
||||
{
|
||||
/**
|
||||
* @var array Contains all template filenames
|
||||
*/
|
||||
private array $templateFiles = array();
|
||||
|
||||
/**
|
||||
* @var array Contains all template data
|
||||
*/
|
||||
private array $templateData = array();
|
||||
|
||||
class Template {
|
||||
/**
|
||||
* @var array Already loaded templates.
|
||||
*/
|
||||
private array $loadedTemplates = array();
|
||||
|
||||
// ************************************************************
|
||||
// Member variables
|
||||
/**
|
||||
* @var array Array of variable/value pairs stored as $LOADED[HANDLE]=>true
|
||||
*/
|
||||
private array $parserVariables = array();
|
||||
|
||||
var $TPLFILES = array(); // Contains all template filenames
|
||||
var $TPLDATA = array(); // Contains all template data
|
||||
var $LOADED = array(); // Already loaded templates are
|
||||
// stored as $LOADED[HANDLE]=>TRUE
|
||||
var $PARSEVARS = array(); // Array of variable/value pairs
|
||||
// to be replaced in templates
|
||||
var $HANDLES = array(); // Handles which contain parsed templates
|
||||
/**
|
||||
* @var array Handles which contain parsed templates to be replaced in templates
|
||||
*/
|
||||
private array $templateHandles = array();
|
||||
|
||||
var $BLOCKS = array(); // Array with dynamic block data
|
||||
var $H_BLOCKS = array(); // Parsed block data
|
||||
/**
|
||||
* @var array Array with dynamic block data
|
||||
*/
|
||||
private array $templateBlocks = array();
|
||||
|
||||
// Filename: $TPLDIR/filename[.$LANG].tpl
|
||||
var $TPLDIR; // Path to template files
|
||||
var $LANG; // Country code (en, de, fr, ...)
|
||||
var $TPLEXT; // Filename extension (default is .tpl)
|
||||
/**
|
||||
* @var array Parsed block data
|
||||
*/
|
||||
private array $parsedBlocks = array();
|
||||
|
||||
/**
|
||||
* @var string Path to template files. Filename: $templateDirectory/filename[.$languageCode].tpl
|
||||
*/
|
||||
private string $templateDirectory;
|
||||
|
||||
// ************************************************************
|
||||
// Global settings
|
||||
/**
|
||||
* @var string Country code (en, de, fr, ...)
|
||||
*/
|
||||
private string $languageCode;
|
||||
|
||||
var $RPLBRACES = TRUE; // Safely replaces curly braces with HTML
|
||||
// entities in variable values if
|
||||
// set to TRUE.
|
||||
var $WIN32 = FALSE; // Set to "TRUE" on Win32 systems, if
|
||||
// you encounter problems with paths.
|
||||
var $DIEONERR = TRUE; // If set to TRUE, die() is called in error
|
||||
/**
|
||||
* @var string Filename extension (default is .tpl)
|
||||
*/
|
||||
private string $templateExtension;
|
||||
|
||||
/**
|
||||
* @var bool Safely replaces curly braces with HTML entities in variable values if set to true.
|
||||
*/
|
||||
public bool $replaceBraces = true;
|
||||
|
||||
/**
|
||||
* @var bool Set to "true" on Windows systems, if you encounter problems with paths.
|
||||
*/
|
||||
public bool $useWindowsPathSeparator = false;
|
||||
|
||||
/**
|
||||
* @var bool If set to true, die() is called in error
|
||||
*/
|
||||
public bool $dieOnError = true;
|
||||
|
||||
// ************************************************************
|
||||
// Constructor
|
||||
|
||||
function Template($tpldir, $lang = "", $tplext = "tpl")
|
||||
/**
|
||||
* constructor.
|
||||
* @param string $tpldir The template base directory.
|
||||
* @param string $lang The browser language code.
|
||||
* @param string $tplext Optional. The template file extension.
|
||||
*/
|
||||
function __construct(string $tpldir,
|
||||
string $lang = "",
|
||||
string $tplext = "tpl")
|
||||
{
|
||||
$this->setPath($tpldir);
|
||||
$this->LANG = strtolower($lang);
|
||||
$this->TPLEXT = $tplext;
|
||||
$this->languageCode = strtolower($lang);
|
||||
$this->templateExtension = $tplext;
|
||||
|
||||
$this->addVars("templateLang", $this->LANG);
|
||||
$this->addVars("templateLang", $this->languageCode);
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Sets or changes the template search path
|
||||
|
||||
function setPath($path)
|
||||
/**
|
||||
* Sets or changes the template search path
|
||||
* @param string $path New template base directory.
|
||||
* @return bool true if the path was set correctly, false if an error occurred.
|
||||
*/
|
||||
function setPath(string $path): bool
|
||||
{
|
||||
if ($this->WIN32) {
|
||||
if (ord(substr($path, -1)) != 92) $path .= chr(92);
|
||||
if ($this->useWindowsPathSeparator) {
|
||||
if (ord(substr($path, -1)) != 92) {
|
||||
$path .= chr(92);
|
||||
}
|
||||
} else {
|
||||
if (ord(substr($path, -1)) != 47) $path .= chr(47);
|
||||
if (ord(substr($path, -1)) != 47) {
|
||||
$path .= chr(47);
|
||||
}
|
||||
}
|
||||
|
||||
if (is_dir($path)) {
|
||||
$this->TPLDIR = $path;
|
||||
$this->templateDirectory = $path;
|
||||
|
||||
// Add a path variable for use in templates
|
||||
$this->addVars("templatePath", $path);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
} else {
|
||||
echo "[TEMPLATE ENGINE] The specified template path "
|
||||
."'<b>".$path."</b>' is invalid!<br />";
|
||||
. "'<b>" . $path . "</b>' is invalid!<br />";
|
||||
|
||||
$this->TPLDIR = "";
|
||||
$this->templateDirectory = "";
|
||||
|
||||
if ($this->DIEONERR == TRUE) die();
|
||||
return FALSE;
|
||||
if ($this->dieOnError) {
|
||||
die();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Get dynamic blocks recursively to enable nested blocks
|
||||
|
||||
function getDynamicBlocks($tplFilename, $contents)
|
||||
/**
|
||||
* Get dynamic blocks recursively to enable nested blocks.
|
||||
* @param string $tplFilename Template base filename.
|
||||
* @param string $contents Content to search for dynamic blocks.
|
||||
* @return void
|
||||
*/
|
||||
function getDynamicBlocks(string $tplFilename,
|
||||
string $contents): void
|
||||
{
|
||||
preg_match_all("/(\{\|([a-zA-Z0-9]+)\})(.*?)\\1/s",
|
||||
$contents, $blocks);
|
||||
preg_match_all("/(\{\|([a-zA-Z0-9]+)})(.*?)\\1/s", $contents, $blocks);
|
||||
|
||||
if (empty($blocks[0])) return;
|
||||
if (empty($blocks[0])) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Go through all blocks and save them in $this->BLOCKS
|
||||
for ($I=0; $I<count($blocks[0]); $I++) {
|
||||
for ($I = 0; $I < count($blocks[0]); $I++) {
|
||||
$blockparts = array();
|
||||
preg_match_all("/(\{\|" . $blocks[2][$I] .
|
||||
"\*([a-zA-Z0-9]+)\})(.*?)\\1/s",
|
||||
$blocks[3][$I], $blockparts);
|
||||
|
||||
for ($J=0; $J<count($blockparts[0]); $J++) {
|
||||
preg_match_all("/(\{\|" . $blocks[2][$I] . "\*([a-zA-Z0-9]+)})(.*?)\\1/s", $blocks[3][$I], $blockparts);
|
||||
|
||||
for ($J = 0; $J < count($blockparts[0]); $J++) {
|
||||
// Get nested blocks
|
||||
$this->getDynamicBlocks($tplFilename, $blockparts[3][$J]);
|
||||
|
||||
// Replace block data with placeholders
|
||||
$blockparts[3][$J] =
|
||||
preg_replace("/(\{\|([a-zA-Z0-9]+)\})(.*?)\\1/s",
|
||||
"\\1", $blockparts[3][$J]);
|
||||
$blockparts[3][$J] = preg_replace("/(\{\|([a-zA-Z0-9]+)})(.*?)\\1/s", "\\1", $blockparts[3][$J]);
|
||||
|
||||
// Save block data
|
||||
$this->BLOCKS[$tplFilename][$blocks[2][$I]][$blockparts[2][$J]]
|
||||
= $blockparts[3][$J];
|
||||
$this->templateBlocks[$tplFilename][$blocks[2][$I]][$blockparts[2][$J]] = $blockparts[3][$J];
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Loads a template, runs some checks and extracts dynamic blocks
|
||||
|
||||
function loadTemplate($tplFilename)
|
||||
/**
|
||||
* Loads a template, runs some checks and extracts dynamic blocks.
|
||||
* @param string $tplFilename Template base filename.
|
||||
* @return bool true if the template is loaded, false if an error occurred.
|
||||
*/
|
||||
function loadTemplate(string $tplFilename): bool
|
||||
{
|
||||
// Template already loaded?
|
||||
if (isset($this->LOADED[$tplFilename])) return TRUE;
|
||||
if (isset($this->loadedTemplates[$tplFilename])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Has the path been set?
|
||||
if (empty($this->TPLDIR)) {
|
||||
if (empty($this->templateDirectory)) {
|
||||
echo "[TEMPLATE ENGINE] Template path not set or invalid!<br />";
|
||||
|
||||
if ($this->DIEONERR == TRUE) die();
|
||||
return FALSE;
|
||||
if ($this->dieOnError) {
|
||||
die();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is a user-defined county code set?
|
||||
if (!empty($this->LANG)) {
|
||||
if (!empty($this->languageCode)) {
|
||||
// Yes. Try to find template with the specified CC
|
||||
if (file_exists($this->TPLDIR.$this->TPLFILES[$tplFilename]."."
|
||||
.$this->LANG.".".$this->TPLEXT)) {
|
||||
$filename = $this->TPLDIR.$this->TPLFILES[$tplFilename].".".
|
||||
$this->LANG.".".$this->TPLEXT;
|
||||
if (file_exists($this->templateDirectory . $this->templateFiles[$tplFilename] . "." . $this->languageCode . "." . $this->templateExtension)) {
|
||||
$filename = $this->templateDirectory . $this->templateFiles[$tplFilename] . "." . $this->languageCode . "." . $this->templateExtension;
|
||||
} else {
|
||||
// Otherwise, use template filename without CC
|
||||
if (file_exists($this->TPLDIR.$this->TPLFILES[$tplFilename]."."
|
||||
.$this->TPLEXT)) {
|
||||
$filename = $this->TPLDIR.$this->TPLFILES[$tplFilename]."."
|
||||
.$this->TPLEXT;
|
||||
if (file_exists($this->templateDirectory . $this->templateFiles[$tplFilename] . "." . $this->templateExtension)) {
|
||||
$filename = $this->templateDirectory . $this->templateFiles[$tplFilename] . "."
|
||||
. $this->templateExtension;
|
||||
} else {
|
||||
echo "[TEMPLATE ENGINE] Can't find template "
|
||||
."'".$tplFilename."'!<br />";
|
||||
echo "[TEMPLATE ENGINE] Can't find template " . "'" . $tplFilename . "'!<br />";
|
||||
|
||||
if ($this->DIEONERR == TRUE) die();
|
||||
return FALSE;
|
||||
if ($this->dieOnError) {
|
||||
die();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// No. Use template filename without CC
|
||||
if (file_exists($this->TPLDIR.$this->TPLFILES[$tplFilename]."."
|
||||
.$this->TPLEXT)) {
|
||||
$filename = $this->TPLDIR.$this->TPLFILES[$tplFilename]."."
|
||||
.$this->TPLEXT;
|
||||
if (file_exists($this->templateDirectory . $this->templateFiles[$tplFilename] . "." . $this->templateExtension)) {
|
||||
$filename = $this->templateDirectory . $this->templateFiles[$tplFilename] . "." . $this->templateExtension;
|
||||
} else {
|
||||
echo "[TEMPLATE ENGINE] Can't find template "
|
||||
."'".$tplFilename."'!<br />";
|
||||
echo "[TEMPLATE ENGINE] Can't find template " . "'" . $tplFilename . "'!<br />";
|
||||
|
||||
if ($this->DIEONERR == TRUE) die();
|
||||
return FALSE;
|
||||
if ($this->dieOnError) {
|
||||
die();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Load template file
|
||||
$contents = implode("", (@file($filename)));
|
||||
|
||||
if (!$contents || empty($contents)) {
|
||||
echo "[TEMPLATE ENGINE] Can't load template '"
|
||||
.$tplFilename."'!<br />";
|
||||
if (empty($contents)) {
|
||||
echo "[TEMPLATE ENGINE] Can't load template '" . $tplFilename . "'!<br />";
|
||||
|
||||
if ($this->DIEONERR == TRUE) die();
|
||||
return FALSE;
|
||||
if ($this->dieOnError) {
|
||||
die();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Parse dynamic blocks recursively
|
||||
$this->getDynamicBlocks($tplFilename, $contents);
|
||||
|
||||
// Replace all block data with placeholders
|
||||
$contents = preg_replace("/(\{\|([a-zA-Z0-9]+)\})(.*?)\\1/s", "\\1",
|
||||
$contents);
|
||||
$contents = preg_replace("/(\{\|([a-zA-Z0-9]+)})(.*?)\\1/s", "\\1", $contents);
|
||||
|
||||
$this->TPLDATA[$tplFilename] = $contents;
|
||||
$this->LOADED[$tplFilename] = 1;
|
||||
$this->templateData[$tplFilename] = $contents;
|
||||
$this->loadedTemplates[$tplFilename] = 1;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Parses a template and loads it if neccessary.
|
||||
// The result is assigned or concatenated to the specified handle.
|
||||
|
||||
function parse($handle = "",
|
||||
$file = "",
|
||||
$append = FALSE,
|
||||
$delunused = FALSE)
|
||||
/**
|
||||
* Parses a template and loads it if necessary.
|
||||
* The result is assigned or concatenated to the specified handle.
|
||||
* @param string $handle Result handle to store the parsed template in.
|
||||
* @param string $file Template file to parse.
|
||||
* @param bool $append true to append the parsed template to the given handle, false replaces the contents.
|
||||
* @param bool $delunused true to delete unused variable placeholders, false to keep them for later processing.
|
||||
* @return bool true if the file was parsed correctly, false if an error occurred.
|
||||
*/
|
||||
function parse(string $handle = "",
|
||||
string $file = "",
|
||||
bool $append = false,
|
||||
bool $delunused = false): bool
|
||||
{
|
||||
// Check if all prerequisites are met
|
||||
if (empty($handle) || empty($file))
|
||||
return FALSE;
|
||||
if (empty($handle) || empty($file)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!isset($this->TPLFILES[$file]))
|
||||
return FALSE;
|
||||
if (!isset($this->templateFiles[$file])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!isset($this->LOADED[$file])&&!$this->loadTemplate($file))
|
||||
return FALSE;
|
||||
if (!isset($this->loadedTemplates[$file]) && !$this->loadTemplate($file)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$templateCopy = $this->TPLDATA[$file];
|
||||
$templateCopy = $this->templateData[$file];
|
||||
|
||||
// Reset array pointers
|
||||
reset($this->HANDLES);
|
||||
reset($this->PARSEVARS);
|
||||
reset($this->templateHandles);
|
||||
reset($this->parserVariables);
|
||||
|
||||
// Replace blocks
|
||||
if (isset($this->H_BLOCKS[$file])) {
|
||||
reset($this->H_BLOCKS[$file]);
|
||||
if (isset($this->parsedBlocks[$file])) {
|
||||
reset($this->parsedBlocks[$file]);
|
||||
|
||||
while (list($varname, $value) = each($this->H_BLOCKS[$file]))
|
||||
$templateCopy = preg_replace("/\{\|".$varname."\}/i",
|
||||
foreach ($this->parsedBlocks[$file] as $varname => $value) {
|
||||
$templateCopy = preg_replace("/\{\|" . $varname . "}/i",
|
||||
$value, $templateCopy);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace variables
|
||||
while (list($varname, $value) = each($this->PARSEVARS))
|
||||
$templateCopy = preg_replace("/\{".$varname."\}/i",
|
||||
foreach ($this->parserVariables as $varname => $value) {
|
||||
$templateCopy = preg_replace("/\{" . $varname . "}/i",
|
||||
$value, $templateCopy);
|
||||
}
|
||||
|
||||
// Replace {~name} placeholders with already parsed handle of
|
||||
// the same name
|
||||
while (list($varname, $value) = each($this->HANDLES))
|
||||
$templateCopy = preg_replace("/\{\~".$varname."\}/i",
|
||||
foreach ($this->templateHandles as $varname => $value) {
|
||||
$templateCopy = preg_replace("/\{~" . $varname . "}/i",
|
||||
$value, $templateCopy);
|
||||
}
|
||||
|
||||
// Delete unused variables and placeholders
|
||||
if ($delunused)
|
||||
$templateCopy = preg_replace("/\{[~|\|]?(\w*?)\}/", "",
|
||||
$templateCopy);
|
||||
if ($delunused) {
|
||||
$templateCopy = preg_replace("/\{[~|]?(\w*?)}/", "", $templateCopy);
|
||||
}
|
||||
|
||||
// Assign to handle
|
||||
if ($append && isset($this->HANDLES[$handle])) {
|
||||
$this->HANDLES[$handle] .= $templateCopy;
|
||||
if ($append && isset($this->templateHandles[$handle])) {
|
||||
$this->templateHandles[$handle] .= $templateCopy;
|
||||
} else {
|
||||
$this->HANDLES[$handle] = $templateCopy;
|
||||
$this->templateHandles[$handle] = $templateCopy;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Parses multiple templates.
|
||||
// $list is an associative array of the type "handle"=>"template".
|
||||
// Note that concatenation is not possible. Use the parse() method instead.
|
||||
|
||||
function multiParse($list)
|
||||
/**
|
||||
* Parses multiple templates.
|
||||
*
|
||||
* $list is an associative array of the type "handle"=>"template".
|
||||
* Note that concatenation is not possible. Use the parse() method instead.
|
||||
* @param array $list Associative array with handles as key and files as values.
|
||||
* @return bool true if all templates were parsed correctly, false if an error occurred.
|
||||
*/
|
||||
function multiParse(array $list): bool
|
||||
{
|
||||
if (!is_array($list)) return FALSE;
|
||||
|
||||
while (list($handle, $file) = each($list))
|
||||
if (!$this->parse($handle, $file)) return FALSE;
|
||||
|
||||
return TRUE;
|
||||
foreach ($list as $handle => $file) {
|
||||
if (!$this->parse($handle, $file)) return false;
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Parses a template and prints the result.
|
||||
return true;
|
||||
}
|
||||
|
||||
function printParse($handle = "", $file = "", $append = FALSE)
|
||||
/**
|
||||
* Parses a template and prints the result.
|
||||
* @param string $handle Result handle to store the parsed template in.
|
||||
* @param string $file Template base filename to parse.
|
||||
* @param bool $append true to append the parsed template to the given handle, false replaces the contents.
|
||||
* @return bool true if the template was parsed correctly, false if an error occurred.
|
||||
*/
|
||||
function printParse(string $handle = "",
|
||||
string $file = "",
|
||||
bool $append = false): bool
|
||||
{
|
||||
if ($this->parse($handle, $file, $append)) {
|
||||
$this->printHandle($handle);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Parses a block and replaces or appends the result to the block handle.
|
||||
//
|
||||
// Note: First argument is the template file name containing the blocks,
|
||||
// not a handle name!
|
||||
//
|
||||
// Note: This function has no effect on any template handle.
|
||||
// Parsed block data is inserted into the template handle in the
|
||||
// parse() method.
|
||||
|
||||
function parseBlock($file = "",
|
||||
$block = "",
|
||||
$blockpart = "",
|
||||
$append = FALSE,
|
||||
$delunused = FALSE)
|
||||
/**
|
||||
* Parses a block and replaces or appends the result to the block handle.
|
||||
*
|
||||
* Note: First argument is the template file name containing the blocks,
|
||||
* not a handle name!
|
||||
*
|
||||
* Note: This function has no effect on any template handle.
|
||||
* Parsed block data is inserted into the template handle in the
|
||||
* parse() method.
|
||||
* @param string $file Template base filename to parse.
|
||||
* @param string $block Block name to parse.
|
||||
* @param string $blockpart Block part to parse.
|
||||
* @param bool $append true appends the parsed data to the block contents, false replaces it.
|
||||
* @param bool $delunused true removes unused variable placeholders, false keeps them for later processing.
|
||||
* @return bool true if the bock was parsed successfully, false if an error occurred.
|
||||
*/
|
||||
function parseBlock(string $file = "",
|
||||
string $block = "",
|
||||
string $blockpart = "",
|
||||
bool $append = false,
|
||||
bool $delunused = false): bool
|
||||
{
|
||||
if (empty($file) || empty($block) || empty($blockpart))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (!isset($this->TPLFILES[$file]))
|
||||
return FALSE;
|
||||
if (!isset($this->templateFiles[$file]))
|
||||
return false;
|
||||
|
||||
if (!isset($this->LOADED[$file])&&!$this->loadTemplate($file))
|
||||
return FALSE;
|
||||
if (!isset($this->loadedTemplates[$file]) && !$this->loadTemplate($file))
|
||||
return false;
|
||||
|
||||
$blockCopy = $this->BLOCKS[$file][$block][$blockpart];
|
||||
$blockCopy = $this->templateBlocks[$file][$block][$blockpart];
|
||||
|
||||
// Reset array pointers
|
||||
reset($this->H_BLOCKS);
|
||||
reset($this->PARSEVARS);
|
||||
reset($this->parsedBlocks);
|
||||
reset($this->parserVariables);
|
||||
|
||||
// Replace blocks
|
||||
if (isset($this->H_BLOCKS[$file])) {
|
||||
reset($this->H_BLOCKS[$file]);
|
||||
if (isset($this->parsedBlocks[$file])) {
|
||||
reset($this->parsedBlocks[$file]);
|
||||
|
||||
while (list($varname, $value) = each($this->H_BLOCKS[$file]))
|
||||
$blockCopy = preg_replace("/\{\|".$varname."\}/i",
|
||||
foreach ($this->parsedBlocks[$file] as $varname => $value) {
|
||||
$blockCopy = preg_replace("/\{\|" . $varname . "}/i",
|
||||
$value, $blockCopy);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace variables
|
||||
while (list($varname, $value) = each($this->PARSEVARS))
|
||||
$blockCopy = preg_replace("/\{".$varname."\}/i",
|
||||
foreach ($this->parserVariables as $varname => $value) {
|
||||
$blockCopy = preg_replace("/\{" . $varname . "}/i",
|
||||
$value, $blockCopy);
|
||||
}
|
||||
|
||||
// Replace {~name} placeholders with already parsed handle of
|
||||
// the same name
|
||||
while (list($varname, $value) = each($this->HANDLES))
|
||||
$blockCopy = preg_replace("/\{\~".$varname."\}/i",
|
||||
foreach ($this->templateHandles as $varname => $value) {
|
||||
$blockCopy = preg_replace("/\{~" . $varname . "}/i",
|
||||
$value, $blockCopy);
|
||||
}
|
||||
|
||||
// Delete unused variables and placeholders
|
||||
if ($delunused)
|
||||
$blockCopy = preg_replace("/\{[~|]?(\w*?)\}/", "", $blockCopy);
|
||||
if ($delunused) {
|
||||
$blockCopy = preg_replace("/\{[~|]?(\w*?)}/", "", $blockCopy);
|
||||
}
|
||||
|
||||
// Assign to handle
|
||||
if ($append && isset($this->H_BLOCKS[$file][$block])) {
|
||||
$this->H_BLOCKS[$file][$block] .= $blockCopy;
|
||||
if ($append && isset($this->parsedBlocks[$file][$block])) {
|
||||
$this->parsedBlocks[$file][$block] .= $blockCopy;
|
||||
} else {
|
||||
$this->H_BLOCKS[$file][$block] = $blockCopy;
|
||||
$this->parsedBlocks[$file][$block] = $blockCopy;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Deletes all block handles
|
||||
|
||||
function clearBlockHandles()
|
||||
/**
|
||||
* Deletes all block handles.
|
||||
* @return void
|
||||
*/
|
||||
function clearBlockHandles(): void
|
||||
{
|
||||
if (!empty($this->H_BLOCKS)) {
|
||||
reset($this->H_BLOCKS);
|
||||
while (list($ref, $val) = each($this->H_BLOCKS))
|
||||
unset($this->H_BLOCKS[$ref]);
|
||||
if (!empty($this->parsedBlocks)) {
|
||||
reset($this->parsedBlocks);
|
||||
foreach ($this->parsedBlocks as $ref => $val) {
|
||||
unset($this->parsedBlocks[$ref]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Deletes the specified block handle
|
||||
|
||||
function delBlockHandle($file, $block)
|
||||
/**
|
||||
* Deletes the specified block handle
|
||||
* @param string $file The template base file the block is found ion.
|
||||
* @param string $block The block name to delete.
|
||||
* @return void
|
||||
*/
|
||||
function delBlockHandle(string $file,
|
||||
string $block): void
|
||||
{
|
||||
if (!empty($file) && !empty($block))
|
||||
if (isset($this->H_BLOCKS[$file][$block]))
|
||||
unset($this->H_BLOCKS[$file][$block]);
|
||||
if (!empty($file) && !empty($block)) {
|
||||
if (isset($this->parsedBlocks[$file][$block])) {
|
||||
unset($this->parsedBlocks[$file][$block]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Adds one or more templates
|
||||
// You can pass one associative array with $handle=>$filename pairs,
|
||||
// or two strings ($handle, $filename) to this function.
|
||||
|
||||
function addTemplates($tplList, $tplFilename = "")
|
||||
/**
|
||||
* Adds one or more templates
|
||||
* You can pass one associative array with $handle=>$filename pairs,
|
||||
* or two strings ($handle, $filename) to this function.
|
||||
* @param mixed $tplList A template handle or an associative array with template handles as keys and filenames as values.
|
||||
* @param string $tplFilename A template base filename. Only used if $tplList is a single string.
|
||||
* @return void
|
||||
*/
|
||||
function addTemplates(mixed $tplList,
|
||||
string $tplFilename = ""): void
|
||||
{
|
||||
if (is_array($tplList)) {
|
||||
reset($tplList);
|
||||
while (list($handle, $filename) = each($tplList)) {
|
||||
foreach ($tplList as $handle => $filename) {
|
||||
// Add handle to list
|
||||
$this->TPLFILES[$handle] = $filename;
|
||||
$this->templateFiles[$handle] = $filename;
|
||||
// Delete loaded flag if set
|
||||
unset($this->LOADED[$handle]);
|
||||
unset($this->loadedTemplates[$handle]);
|
||||
}
|
||||
} else {
|
||||
$this->TPLFILES[$tplList] = $tplFilename;
|
||||
unset($this->LOADED[$tplList]);
|
||||
$this->templateFiles[$tplList] = $tplFilename;
|
||||
unset($this->loadedTemplates[$tplList]);
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Deletes all template handles
|
||||
|
||||
function clearHandles()
|
||||
/**
|
||||
* Deletes all template handles
|
||||
* @return void
|
||||
*/
|
||||
function clearHandles(): void
|
||||
{
|
||||
if (!empty($this->HANDLES)) {
|
||||
reset($this->HANDLES);
|
||||
while (list($ref, $val) = each($this->HANDLES))
|
||||
unset($this->HANDLES[$ref]);
|
||||
if (!empty($this->templateHandles)) {
|
||||
reset($this->templateHandles);
|
||||
foreach ($this->templateHandles as $ref => $val) {
|
||||
unset($this->templateHandles[$ref]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Deletes the specified template handle
|
||||
|
||||
function delHandle($handleName = "")
|
||||
/**
|
||||
* Deletes the specified template handle
|
||||
* @param string $handleName Template handle to delete.
|
||||
* @return void
|
||||
*/
|
||||
function delHandle(string $handleName = ""): void
|
||||
{
|
||||
if (!empty($handleName))
|
||||
if (isset($this->HANDLES[$handleName]))
|
||||
unset($this->HANDLES[$handleName]);
|
||||
if (!empty($handleName)) {
|
||||
if (isset($this->templateHandles[$handleName])) {
|
||||
unset($this->templateHandles[$handleName]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Returns the contents of the specified template handle
|
||||
|
||||
function getHandle($handleName = "")
|
||||
/**
|
||||
* Returns the contents of the specified template handle.
|
||||
* @param string $handleName The handle to return the contents for.
|
||||
* @return bool|string false if the handle doesn't exist, or a string with the contents.
|
||||
*/
|
||||
function getHandle(string $handleName = ""): bool|string
|
||||
{
|
||||
if (empty($handleName))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
if (isset($this->HANDLES[$handleName]))
|
||||
return $this->HANDLES[$handleName];
|
||||
if (isset($this->templateHandles[$handleName]))
|
||||
return $this->templateHandles[$handleName];
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Prints a parsed template handle
|
||||
|
||||
function printHandle($handleName = "")
|
||||
/**
|
||||
* Prints a parsed template handle to the output stream.
|
||||
* @param string $handleName The handle to print.
|
||||
* @return bool false if the handle doesn't exist, true if the handle was printed.
|
||||
*/
|
||||
function printHandle(string $handleName = ""): bool
|
||||
{
|
||||
if (empty($handleName)) return FALSE;
|
||||
if (empty($handleName)) return false;
|
||||
|
||||
// Remove all remaining placeholders
|
||||
$this->HANDLES[$handleName] = preg_replace("/\{[~|\|]?(\w*?)\}/",
|
||||
"", $this->HANDLES[$handleName]);
|
||||
$this->templateHandles[$handleName] = preg_replace("/\{[~|]?(\w*?)}/",
|
||||
"", $this->templateHandles[$handleName]);
|
||||
|
||||
if (isset($this->HANDLES[$handleName])) {
|
||||
echo $this->HANDLES[$handleName];
|
||||
return TRUE;
|
||||
if (isset($this->templateHandles[$handleName])) {
|
||||
echo $this->templateHandles[$handleName];
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Deletes all variables set with the addVars() method
|
||||
|
||||
function clearVars()
|
||||
/**
|
||||
* Deletes all variables set with the addVars() method.
|
||||
* @return void
|
||||
*/
|
||||
function clearVars(): void
|
||||
{
|
||||
if (!empty($this->PARSEVARS)) {
|
||||
reset($this->PARSEVARS);
|
||||
while (list($ref, $val) = each ($this->PARSEVARS))
|
||||
unset($this->PARSEVARS[$ref]);
|
||||
if (!empty($this->parserVariables)) {
|
||||
reset($this->parserVariables);
|
||||
foreach ($this->parserVariables as $ref => $val) {
|
||||
unset($this->parserVariables[$ref]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Adds one or more variables.
|
||||
// You can pass one associative array with $varname=>$value pairs
|
||||
// or two strings ($varname, $value) to this function.
|
||||
|
||||
function addVars($varList, $varValue = "")
|
||||
/**
|
||||
* Adds one or more variables.
|
||||
* You can pass one associative array with $varname=>$value pairs
|
||||
* or two strings ($varname, $value) to this function.
|
||||
* @param mixed $varList Either an associative array with variable names as keys and values as values, or a string with the variable name.
|
||||
* @param string $varValue the value to insert for this variable. Only used if $varList is a string with the name of the variable.
|
||||
* @return void
|
||||
*/
|
||||
function addVars(mixed $varList,
|
||||
string $varValue = ""): void
|
||||
{
|
||||
if (is_array($varList)) {
|
||||
reset($varList);
|
||||
while (list($varname, $value) = each($varList)) {
|
||||
foreach ($varList as $varname => $value) {
|
||||
// Replace curly braces
|
||||
if ($this->RPLBRACES == TRUE) {
|
||||
$value = preg_replace(Array("/(\{)/", "/(\})/"),
|
||||
Array("{", "}"),
|
||||
if ($this->replaceBraces == true) {
|
||||
$value = preg_replace(array("/(\{)/", "/(})/"),
|
||||
array("{", "}"),
|
||||
$value);
|
||||
}
|
||||
|
||||
// Add/replace variable
|
||||
if (!preg_match("/[^0-9a-z\-\_]/i", $varname))
|
||||
$this->PARSEVARS[$varname] = $value;
|
||||
if (!preg_match("/[^0-9a-z\-_]/i", $varname))
|
||||
$this->parserVariables[$varname] = $value;
|
||||
}
|
||||
} else {
|
||||
// Replace curly braces
|
||||
if ($this->RPLBRACES == TRUE) {
|
||||
$varValue = preg_replace(Array("/(\{)/", "/(\})/"),
|
||||
Array("{", "}"),
|
||||
if ($this->replaceBraces == true) {
|
||||
$varValue = preg_replace(array("/(\{)/", "/(})/"),
|
||||
array("{", "}"),
|
||||
$varValue);
|
||||
}
|
||||
|
||||
// Add/replace variable
|
||||
if (!preg_match("/[^0-9a-z\-\_]/i", $varList))
|
||||
$this->PARSEVARS[$varList] = $varValue;
|
||||
if (!preg_match("/[^0-9a-z\-_]/i", $varList))
|
||||
$this->parserVariables[$varList] = $varValue;
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
// Returns a value set by the addVars() method
|
||||
|
||||
function getVar($varName = "")
|
||||
/**
|
||||
* Returns a value set by the addVars() method.
|
||||
* @param string $varName The variable to return the value of.
|
||||
* @return bool|string false, if the variable didn't exist, or a string with the contents.
|
||||
*/
|
||||
function getVar(string $varName = ""): bool|string
|
||||
{
|
||||
if (empty($varName)) return FALSE;
|
||||
if (isset($this->PARSEVARS[$varName]))
|
||||
return $this->PARSEVARS[$varName];
|
||||
return FALSE;
|
||||
if (empty($varName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// ************************************************************
|
||||
if (isset($this->parserVariables[$varName])) {
|
||||
return $this->parserVariables[$varName];
|
||||
}
|
||||
|
||||
} // End of class 'Template'
|
||||
return false;
|
||||
}
|
||||
|
||||
?>
|
||||
}
|
||||
|
2
db.php
2
db.php
@ -50,6 +50,8 @@ function callBindParamArray($stmt, $bindArguments = null) {
|
||||
}
|
||||
|
||||
function getSingleResult($query, $bindArguments = null) {
|
||||
$retVal = '';
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare($query);
|
||||
callBindParamArray($stmt, $bindArguments);
|
||||
$stmt->execute();
|
||||
|
@ -8,7 +8,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
@ -29,13 +29,12 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Holt eine Einzelne Frage aus der DB
|
||||
*
|
||||
* @param $id Die Frage-ID
|
||||
*
|
||||
* @return array Die Frage
|
||||
* Holt eine einzelne Frage aus der Datenbank.
|
||||
* @param int $id Die Frage-ID
|
||||
* @return array Die Fragen-Inhalte als assoziatives Array.
|
||||
*/
|
||||
function getQuestionById($id) {
|
||||
function getQuestionById(int $id): array
|
||||
{
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT * FROM fragen WHERE ID=?');
|
||||
$stmt->bind_param('i', $id);
|
||||
$stmt->execute();
|
||||
@ -48,11 +47,14 @@ function getQuestionById($id) {
|
||||
|
||||
/**
|
||||
* Holt eine Liste aller Abschnitte im aktuellen Jahr
|
||||
*
|
||||
* @return array
|
||||
* @return array Liste der Themenbereiche.
|
||||
*/
|
||||
function getTopics() {
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT `Nr`,`Beschreibung` FROM `abschnitte` WHERE `Jahr` = ? ORDER BY `Nr` ASC');
|
||||
function getTopics(): array
|
||||
{
|
||||
$nr = 0;
|
||||
$description = '';
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT `Nr`,`Beschreibung` FROM `abschnitte` WHERE `Jahr` = ? ORDER BY `Nr`');
|
||||
$stmt->bind_param('i', $_SESSION['jahr']);
|
||||
$stmt->execute();
|
||||
$stmt->bind_result($nr, $description);
|
||||
@ -66,13 +68,14 @@ function getTopics() {
|
||||
return $topics;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Kopfzeile mit Informationen über Fragennummer und Lernabschnitt
|
||||
*
|
||||
/******************************************************************************/
|
||||
|
||||
function questionHeader($id, $nr, $questionCount)
|
||||
/**
|
||||
* Kopfzeile mit Informationen über Fragen-Nummer und Lernabschnitt.
|
||||
* @param int $id Frage-ID
|
||||
* @param int $nr Frage-Nummer
|
||||
* @param int $questionCount Anzahl Fragen
|
||||
* @return void
|
||||
*/
|
||||
function questionHeader(int $id, int $nr, int $questionCount): void
|
||||
{
|
||||
$section = getSingleResult('SELECT Abschnitt FROM fragen WHERE ID=? AND Jahr=?',
|
||||
array('ii', $id, $_SESSION['jahr']));
|
||||
@ -90,27 +93,28 @@ function questionHeader($id, $nr, $questionCount)
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Kopf', 'Content');
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Eine einzelne Frage mit Kopfzeile ausgeben
|
||||
*
|
||||
/******************************************************************************/
|
||||
|
||||
function SingleQuestion($id, $Nr, $questionCount)
|
||||
/**
|
||||
* Eine einzelne Frage mit Kopfzeile ausgeben.
|
||||
* @param int $id Frage-ID
|
||||
* @param int $nr Frage-Nummer
|
||||
* @param int $questionCount Anzahl Fragen
|
||||
* @return void
|
||||
*/
|
||||
function SingleQuestion(int $id, int $nr, int $questionCount): void
|
||||
{
|
||||
questionHeader($id, $Nr, $questionCount);
|
||||
questionHeader($id, $nr, $questionCount);
|
||||
showQuestion($id);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
/**
|
||||
* Fragengenerator
|
||||
* Erzeugt eine Tabelle mit Frage, Antworten und Formularinformationen
|
||||
* zur übergebenen Fragen-ID
|
||||
*
|
||||
/******************************************************************************/
|
||||
|
||||
function showQuestion($id)
|
||||
* Erzeugt eine Tabelle mit Frage, Antworten und Formularinformationen
|
||||
* zur übergebenen Fragen-ID
|
||||
* @param int $id Fragen-ID
|
||||
* @return void
|
||||
*/
|
||||
function showQuestion(int $id): void
|
||||
{
|
||||
// Frage aus DB holen
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT * FROM fragen WHERE ID=?');
|
||||
@ -143,15 +147,17 @@ function showQuestion($id)
|
||||
$stmt->close();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
/**
|
||||
* Auswertung
|
||||
* Erzeugt eine Tabelle mit Frage, Antworten und Markiert richtige/falsche
|
||||
* Antworten farblich (grün=richtig, rot=falsch)
|
||||
*
|
||||
/******************************************************************************/
|
||||
|
||||
function Answer($id, $answer, $showStatus = TRUE)
|
||||
* Erzeugt eine Tabelle mit Frage, Antworten und Markiert richtige/falsche
|
||||
* Antworten farblich (grün=richtig, rot=falsch)
|
||||
* @param int $id Frage-ID
|
||||
* @param array $answer Antwort-Array
|
||||
* @param bool $showStatus Status anzeigen
|
||||
* @return bool true, falls korrekt beantwortet, sonst false.
|
||||
*/
|
||||
function Answer(int $id, array $answer, bool $showStatus = true): bool
|
||||
{
|
||||
// Frage aus DB holen
|
||||
$question = getQuestionById($id);
|
||||
@ -165,7 +171,7 @@ function Answer($id, $answer, $showStatus = TRUE)
|
||||
&& ($solution[2] == (isset($answer[$id][2]) ? $answer[$id][2] : 0))
|
||||
&& ($solution[3] == (isset($answer[$id][3]) ? $answer[$id][3] : 0)));
|
||||
|
||||
// Aufräumen
|
||||
// Aufräumen
|
||||
$GLOBALS['tpl']->delHandle('antwortStatus');
|
||||
$GLOBALS['tpl']->delHandle('antwort1Loesung');
|
||||
$GLOBALS['tpl']->delHandle('antwort2Loesung');
|
||||
@ -212,31 +218,36 @@ function Answer($id, $answer, $showStatus = TRUE)
|
||||
if (isset($answer[$id][2]) && $answer[$id][2] === '1') $GLOBALS['tpl']->parseBlock('content', 'A2L', 'Haken');
|
||||
if (isset($answer[$id][3]) && $answer[$id][3] === '1') $GLOBALS['tpl']->parseBlock('content', 'A3L', 'Haken');
|
||||
|
||||
// Anhängen per default
|
||||
// Anhängen per default
|
||||
$GLOBALS['tpl']->parse('content', 'antwort', TRUE, TRUE);
|
||||
|
||||
return $correct;
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
/**
|
||||
* Brotkrumen-Navigation.
|
||||
*
|
||||
* Antwort
|
||||
* Zeigt die Frage und die zugehörigen korrekten Antworten an
|
||||
* Antworten sind farblich gekennzeichnet (grün=richtig, rot=falsch)
|
||||
*
|
||||
/******************************************************************************/
|
||||
|
||||
function addBreadcrumb($params, $title)
|
||||
* Fügt einen Link zur Brotkrumen-Navigation hinzu.
|
||||
* @param string $page Seiten-Link
|
||||
* @param string $title Seiten-Titel
|
||||
* @return void
|
||||
*/
|
||||
function addBreadcrumb(string $page, string $title): void
|
||||
{
|
||||
$GLOBALS['tpl']->addVars(Array(
|
||||
'page' => htmlspecialchars($params),
|
||||
'page' => htmlspecialchars($page),
|
||||
'pageTitle' => htmlspecialchars($title)
|
||||
));
|
||||
$GLOBALS['tpl']->parseBlock('page-body', 'Breadcrumb', 'Link', TRUE);
|
||||
}
|
||||
|
||||
function ShowAnswer(&$frage)
|
||||
/**
|
||||
* Zeigt die Auflösung an.
|
||||
* @param array $frage Referenz auf das assoziative Fragen-Array
|
||||
* @return void
|
||||
*/
|
||||
function ShowAnswer(array &$frage): void
|
||||
{
|
||||
|
||||
|
||||
@ -245,7 +256,7 @@ function ShowAnswer(&$frage)
|
||||
2 => (($frage['Loesung'] & 0x2) >> 1),
|
||||
3 => (($frage['Loesung'] & 0x4) >> 2));
|
||||
|
||||
// Aufräumen
|
||||
// Aufräumen
|
||||
$GLOBALS['tpl']->delHandle('antwortStatus');
|
||||
$GLOBALS['tpl']->delHandle('antwort1Loesung');
|
||||
$GLOBALS['tpl']->delHandle('antwort2Loesung');
|
||||
@ -280,5 +291,3 @@ function ShowAnswer(&$frage)
|
||||
$GLOBALS['tpl']->parseBlock('content', 'ThreeRows', 'Row');
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
22
home.inc.php
22
home.inc.php
@ -8,7 +8,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
@ -28,7 +28,19 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
function getStats() {
|
||||
/**
|
||||
* Holt die Gesamt-Statistiken aus der Datenbank und füllt das Template.
|
||||
* @return void
|
||||
*/
|
||||
function getStats(): void
|
||||
{
|
||||
$fragen = 0;
|
||||
$richtig = 0;
|
||||
$falsch = 0;
|
||||
$boegen = 0;
|
||||
$bestanden = 0;
|
||||
$durchgefallen = 0;
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT fragen,richtig,falsch,boegen,bestanden,durchgefallen FROM statistik');
|
||||
$stmt->execute();
|
||||
$stmt->bind_result(
|
||||
@ -42,7 +54,7 @@ function getStats() {
|
||||
|
||||
$stmt->fetch();
|
||||
|
||||
$GLOBALS['tpl']->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'statsFragen' => sprintf('%0.d', $fragen),
|
||||
'statsFragenRichtig' => sprintf('%0.d (%0.2f %%)', $richtig, ($fragen > 0 ? $richtig / $fragen * 100 : 0)),
|
||||
'statsFragenFalsch' => sprintf('%0.d (%0.2f %%)', $falsch, ($fragen > 0 ? $falsch / $fragen * 100 : 0)),
|
||||
@ -55,7 +67,7 @@ function getStats() {
|
||||
}
|
||||
|
||||
getStats();
|
||||
$GLOBALS['tpl']->addTemplates(Array(
|
||||
|
||||
$GLOBALS['tpl']->addTemplates(array(
|
||||
'content' => 'home'
|
||||
));
|
||||
?>
|
58
index.php
58
index.php
@ -8,7 +8,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
@ -28,54 +28,54 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
require_once 'db.php';
|
||||
require_once 'class.template.inc.php';
|
||||
require_once 'functions.inc.php';
|
||||
require_once 'init.inc.php';
|
||||
require_once 'db.php';
|
||||
require_once 'class.template.inc.php';
|
||||
require_once 'functions.inc.php';
|
||||
require_once 'init.inc.php';
|
||||
|
||||
if (!isset($_REQUEST['show'])) {
|
||||
if (!isset($_REQUEST['show'])) {
|
||||
$_REQUEST['show'] = 'home';
|
||||
}
|
||||
}
|
||||
|
||||
switch ($_REQUEST['show']) {
|
||||
switch ($_REQUEST['show']) {
|
||||
case 'fragen':
|
||||
addBreadcrumb($_REQUEST['show'], 'Zufallsfragen beantworten');
|
||||
include ('zufallsfragen.inc.php');
|
||||
include('zufallsfragen.inc.php');
|
||||
break;
|
||||
|
||||
case 'bogen':
|
||||
addBreadcrumb($_REQUEST['show'], 'Prüfungsbogen üben');
|
||||
include ('pruefbogen.inc.php');
|
||||
addBreadcrumb($_REQUEST['show'], 'Prüfungsbogen üben');
|
||||
include('pruefbogen.inc.php');
|
||||
break;
|
||||
|
||||
case 'loesung':
|
||||
addBreadcrumb($_REQUEST['show'], 'Antworten anzeigen');
|
||||
include ('antworten.inc.php');
|
||||
include('antworten.inc.php');
|
||||
break;
|
||||
|
||||
case 'ordnung':
|
||||
addBreadcrumb($_REQUEST['show'], 'Prüfungsordnung');
|
||||
$tpl->addVars('navOrdnung', 'current');
|
||||
$tpl->addTemplates(Array('content' => 'ordnung'));
|
||||
addBreadcrumb($_REQUEST['show'], 'Prüfungsordnung');
|
||||
$GLOBALS['tpl']->addVars('navOrdnung', 'current');
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'ordnung'));
|
||||
break;
|
||||
|
||||
case 'stats':
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
// Statistik Zufallsfragen
|
||||
'fragenBisher' => $_SESSION['stats']['Fragen_Bisher'],
|
||||
'fragenRichtig' => $_SESSION['stats']['Fragen_Richtig'],
|
||||
'fragenFalsch' => $_SESSION['stats']['Fragen_Falsch'],
|
||||
'fragenQuote' => (($_SESSION['stats']['Fragen_Bisher']>0)?(preg_replace('/\./is', ',', number_format($_SESSION['stats']['Fragen_Richtig']/$_SESSION['stats']['Fragen_Bisher']*100,2))):('0')) . '%',
|
||||
'fragenQuote' => (($_SESSION['stats']['Fragen_Bisher'] > 0) ? (preg_replace('/\./is', ',', number_format($_SESSION['stats']['Fragen_Richtig'] / $_SESSION['stats']['Fragen_Bisher'] * 100, 2))) : ('0')) . '%',
|
||||
|
||||
// Statistik Prüfungsbögen
|
||||
// Statistik Prüfungsbögen
|
||||
'boegenBisher' => $_SESSION['stats']['Boegen_Bisher'],
|
||||
'boegenRichtig' => $_SESSION['stats']['Boegen_Bestanden'],
|
||||
'boegenFalsch' => $_SESSION['stats']['Boegen_Durchgefallen'],
|
||||
'boegenQuote' => (($_SESSION['stats']['Boegen_Bisher']>0)?(preg_replace('/\./is', ',', number_format($_SESSION['stats']['Boegen_Bestanden']/$_SESSION['stats']['Boegen_Bisher']*100,2))):('0')) . '%'
|
||||
'boegenQuote' => (($_SESSION['stats']['Boegen_Bisher'] > 0) ? (preg_replace('/\./is', ',', number_format($_SESSION['stats']['Boegen_Bestanden'] / $_SESSION['stats']['Boegen_Bisher'] * 100, 2))) : ('0')) . '%'
|
||||
));
|
||||
addBreadcrumb($_REQUEST['show'], 'Statistiken');
|
||||
$tpl->addVars('navStats', 'current');
|
||||
$tpl->addTemplates(Array('content' => 'stats'));
|
||||
$GLOBALS['tpl']->addVars('navStats', 'current');
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'stats'));
|
||||
break;
|
||||
|
||||
case "barrierefreiheit":
|
||||
@ -85,26 +85,24 @@
|
||||
|
||||
case 'impressum':
|
||||
addBreadcrumb($_REQUEST['show'], 'Impressum');
|
||||
$tpl->addTemplates(Array('content' => 'impressum'));
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'impressum'));
|
||||
break;
|
||||
|
||||
case 'datenschutz':
|
||||
addBreadcrumb($_REQUEST['show'], 'Datenschutzhinweis');
|
||||
$tpl->addTemplates(Array('content' => 'datenschutz'));
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'datenschutz'));
|
||||
break;
|
||||
|
||||
case "downloads":
|
||||
addBreadcrumb($_REQUEST["show"], "Offline-Version");
|
||||
$tpl->addVars("navOffline", "current");
|
||||
$tpl->addTemplates(Array("content" => "offline"));
|
||||
$GLOBALS['tpl']->addVars("navOffline", "current");
|
||||
$GLOBALS['tpl']->addTemplates(array("content" => "offline"));
|
||||
break;
|
||||
|
||||
default:
|
||||
$title = '';
|
||||
include('home.inc.php');
|
||||
}
|
||||
}
|
||||
|
||||
$tpl->parse('pageContent', 'content');
|
||||
$tpl->printParse('pageMain', 'page-body');
|
||||
|
||||
?>
|
||||
$GLOBALS['tpl']->parse('pageContent', 'content');
|
||||
$GLOBALS['tpl']->printParse('pageMain', 'page-body');
|
||||
|
19
init.inc.php
19
init.inc.php
@ -30,10 +30,9 @@
|
||||
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
|
||||
$GLOBALS['tpl'] = new Template('./templates/');
|
||||
$tpl =& $GLOBALS['tpl'];
|
||||
$GLOBALS['tpl'] = new Template(__DIR__ . '/templates/');
|
||||
|
||||
$tpl->addTemplates(Array(
|
||||
$GLOBALS['tpl']->addTemplates(Array(
|
||||
'page-body' => 'page-body',
|
||||
'top-line' => 'top-line'
|
||||
));
|
||||
@ -60,14 +59,12 @@ if (isset($_REQUEST['jahr'])) {
|
||||
$_SESSION['jahr'] = 2020;
|
||||
}
|
||||
|
||||
srand(microtime()*(double)10000);
|
||||
mt_srand(intval(microtime()) * 10000);
|
||||
|
||||
if ((isset($_COOKIE['stylesheet']) && $_COOKIE['stylesheet'] == 'barrierefrei')
|
||||
|| isset($_POST['barrierefrei'])
|
||||
|| (isset($_GET['style']) && $_GET['style'] == 'rg')) {
|
||||
$tpl->addVars('extraStyleSheet', '<link href="rg-styles.css" rel="stylesheet" type="text/css" />');
|
||||
} else {
|
||||
|
||||
$GLOBALS['tpl']->addVars('extraStyleSheet', '<link href="rg-styles.css" rel="stylesheet" type="text/css" />');
|
||||
}
|
||||
|
||||
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
|
||||
@ -78,14 +75,12 @@ if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
|
||||
$protocol = 'http';
|
||||
}
|
||||
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(Array(
|
||||
// Globale Variablen
|
||||
'scriptName' => $_SERVER['SCRIPT_NAME'],
|
||||
'catalogYear' => $_SESSION['jahr'],
|
||||
'baseUrl' => $protocol . '://thw-theorie.de/'
|
||||
'baseUrl' => $protocol . '://' . $_SERVER['HTTP_HOST'] . '/'
|
||||
));
|
||||
|
||||
|
||||
$tpl->parse('topLine', 'top-line');
|
||||
|
||||
?>
|
||||
$GLOBALS['tpl']->parse('topLine', 'top-line');
|
||||
|
@ -8,7 +8,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
@ -30,12 +30,12 @@
|
||||
|
||||
/*
|
||||
*
|
||||
* Vollständiger Prüfungsbogen mit zufälligen Fragen
|
||||
* Vollständiger Prüfungsbogen mit zufälligen Fragen
|
||||
*
|
||||
*/
|
||||
|
||||
$tpl->parseBlock('page-body', 'NavBogen', 'Sublinks');
|
||||
$tpl->addVars('navBogen', 'current');
|
||||
$GLOBALS['tpl']->parseBlock('page-body', 'NavBogen', 'Sublinks');
|
||||
$GLOBALS['tpl']->addVars('navBogen', 'current');
|
||||
|
||||
if (isset($_REQUEST['create']) && $_REQUEST['create'] == '1') {
|
||||
// Neuen Bogen erstellen
|
||||
@ -43,17 +43,20 @@ if (isset($_REQUEST['create']) && $_REQUEST['create'] == '1') {
|
||||
|
||||
// Werte initialisieren
|
||||
$_SESSION['bogen']['StartTime'] = time();
|
||||
$_SESSION['bogen']['Fragen'] = Array();
|
||||
$_SESSION['bogen']['Fragen'] = array();
|
||||
|
||||
// Anz. Abschnitte und Fragen aus der DB holen
|
||||
$sectionCount = getSingleResult('SELECT COUNT(*) FROM abschnitte WHERE Jahr = ?', array('i', $_SESSION['jahr']));
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT ID, Abschnitt FROM fragen WHERE Jahr = ? ORDER BY Abschnitt, Nr ASC');
|
||||
$questionId = 0;
|
||||
$questionSection = 0;
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT ID, Abschnitt FROM fragen WHERE Jahr = ? ORDER BY Abschnitt, Nr');
|
||||
$stmt->bind_param('i', $_SESSION['jahr']);
|
||||
$stmt->execute();
|
||||
$stmt->bind_result($questionId, $questionSection);
|
||||
|
||||
// Fragen in Array übertragen
|
||||
// Fragen in Array übertragen
|
||||
while ($stmt->fetch()) {
|
||||
$fragen[$questionId] = $questionSection;
|
||||
}
|
||||
@ -74,13 +77,14 @@ if (isset($_REQUEST['create']) && $_REQUEST['create'] == '1') {
|
||||
unset($fragen[$id]);
|
||||
}
|
||||
|
||||
// Restliche Fragen zufällig auffüllen
|
||||
// Restliche Fragen zufällig auffüllen.
|
||||
// Dazu verbliebene Keys von $fragen als Values in neues Array $fragen2 kopieren,
|
||||
// da shuffle() die Keys verwirft!
|
||||
$fragen2 = Array();
|
||||
foreach ($fragen As $key => $value) {
|
||||
$fragen2 = array();
|
||||
foreach ($fragen as $key => $value) {
|
||||
array_push($fragen2, $key);
|
||||
}
|
||||
|
||||
shuffle($fragen2);
|
||||
for ($i = 0; $i < 40 - $sectionCount; $i++) {
|
||||
array_push($_SESSION['bogen']['Fragen'], array_shift($fragen2));
|
||||
@ -97,14 +101,14 @@ if (isset($_SESSION['bogen'])) {
|
||||
$richtig = 0;
|
||||
$falsch = 0;
|
||||
$fragen_cnt = count($_SESSION['bogen']['Fragen']);
|
||||
$zeit = time()-$_SESSION['bogen']['StartTime'];
|
||||
$zeit = time() - $_SESSION['bogen']['StartTime'];
|
||||
|
||||
for ($i = 0; $i < $fragen_cnt; $i++) {
|
||||
$id = $_SESSION['bogen']['Fragen'][$i];
|
||||
$solutionBitmask = getSingleResult('SELECT `Loesung` FROM `fragen` WHERE `ID` = ?',
|
||||
array('i', $id));
|
||||
|
||||
$loesung = array( 1 => ( $solutionBitmask & 0x1),
|
||||
$loesung = array(1 => ($solutionBitmask & 0x1),
|
||||
2 => (($solutionBitmask & 0x2) >> 1),
|
||||
3 => (($solutionBitmask & 0x4) >> 2));
|
||||
|
||||
@ -112,7 +116,7 @@ if (isset($_SESSION['bogen'])) {
|
||||
$korrekt = (($loesung[1] == (isset($_POST['antwort'][$id][1]) ? $_POST['antwort'][$id][1] : 0))
|
||||
&& ($loesung[2] == (isset($_POST['antwort'][$id][2]) ? $_POST['antwort'][$id][2] : 0))
|
||||
&& ($loesung[3] == (isset($_POST['antwort'][$id][3]) ? $_POST['antwort'][$id][3] : 0)));
|
||||
} else{
|
||||
} else {
|
||||
$korrekt = false;
|
||||
}
|
||||
|
||||
@ -134,58 +138,59 @@ if (isset($_SESSION['bogen'])) {
|
||||
$_SESSION["stats"]['Boegen_Durchgefallen']++;
|
||||
|
||||
$GLOBALS['db']->query('UPDATE statistik SET fragen=fragen+' . $fragen_cnt
|
||||
.',richtig=richtig+' . $richtig
|
||||
.',falsch=falsch+' . $falsch
|
||||
.',boegen=boegen+1'
|
||||
.',bestanden=bestanden+' . (($richtig / $fragen_cnt) >= 0.8?1:0)
|
||||
.',durchgefallen=durchgefallen+' . (($richtig / $fragen_cnt) < 0.8?1:0));
|
||||
. ',richtig=richtig+' . $richtig
|
||||
. ',falsch=falsch+' . $falsch
|
||||
. ',boegen=boegen+1'
|
||||
. ',bestanden=bestanden+' . (($richtig / $fragen_cnt) >= 0.8 ? 1 : 0)
|
||||
. ',durchgefallen=durchgefallen+' . (($richtig / $fragen_cnt) < 0.8 ? 1 : 0));
|
||||
|
||||
$tpl->addTemplates('content', 'bogen-ende');
|
||||
$GLOBALS['tpl']->addTemplates('content', 'bogen-ende');
|
||||
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'anzFragen' => count($_SESSION['bogen']['Fragen']),
|
||||
'zeit' => sprintf('%02d:%02d\'%02d', $zeit / 3600, ($zeit/60)%60, $zeit%60),
|
||||
'zeit' => sprintf('%02d:%02d\'%02d', $zeit / 3600, ($zeit / 60) % 60, $zeit % 60),
|
||||
'fragenRichtig' => $richtig,
|
||||
'fragenRichtigQuote' => sprintf('%.2f %%', $richtig / $fragen_cnt * 100),
|
||||
'fragenFalsch' => $falsch,
|
||||
'fragenFalschQuote' => sprintf('%.2f %%', $falsch / $fragen_cnt * 100)
|
||||
));
|
||||
|
||||
if (($richtig / $fragen_cnt) >= 0.8)
|
||||
$tpl->parseBlock('content', 'Bestanden', 'Ja');
|
||||
else
|
||||
$tpl->parseBlock('content', 'Bestanden', 'Nein');
|
||||
if (($richtig / $fragen_cnt) >= 0.8) {
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Bestanden', 'Ja');
|
||||
}
|
||||
else {
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Bestanden', 'Nein');
|
||||
}
|
||||
|
||||
for ($i=0; $i<count($_SESSION['bogen']['Fragen']); $i++) {
|
||||
if ($i>0 && $i%10==0) {
|
||||
// 'Nach oben'-Zeile an Handle anhängen
|
||||
$tpl->parseBlock('content', 'Aufloesung', 'Topline', TRUE);
|
||||
for ($i = 0; $i < count($_SESSION['bogen']['Fragen']); $i++) {
|
||||
if ($i > 0 && $i % 10 == 0) {
|
||||
// 'Nach oben'-Zeile an Handle anhängen
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Aufloesung', 'Topline', TRUE);
|
||||
}
|
||||
Answer($_SESSION['bogen']['Fragen'][$i], $_POST['antwort'], FALSE);
|
||||
$tpl->parseBlock('content', 'Aufloesung', 'Antwort', TRUE, TRUE);
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Aufloesung', 'Antwort', TRUE, TRUE);
|
||||
}
|
||||
|
||||
unset($_SESSION['bogen']);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// Fragen anzeigen
|
||||
$tpl->addTemplates(Array(
|
||||
$GLOBALS['tpl']->addTemplates(array(
|
||||
'content' => 'bogen-fragen'
|
||||
));
|
||||
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'zeit' => date('G:i', $_SESSION['bogen']['StartTime'])
|
||||
));
|
||||
|
||||
for ($i=0; $i<count($_SESSION['bogen']['Fragen']); $i++) {
|
||||
if ($i>0 && $i%10==0) {
|
||||
$tpl->parseBlock('content', 'Bogen', 'Topline', TRUE);
|
||||
for ($i = 0; $i < count($_SESSION['bogen']['Fragen']); $i++) {
|
||||
if ($i > 0 && $i % 10 == 0) {
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Bogen', 'Topline', TRUE);
|
||||
}
|
||||
|
||||
// Frage aus DB holen
|
||||
$question = getQuestionById($_SESSION['bogen']['Fragen'][$i]);
|
||||
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'frageIndex' => $i + 1,
|
||||
'frageID' => $question['ID'],
|
||||
'frageNr' => $question['Nr'],
|
||||
@ -197,20 +202,18 @@ if (isset($_SESSION['bogen'])) {
|
||||
));
|
||||
|
||||
if ($question['Antwort3'] == '') {
|
||||
$tpl->addVars('rowCnt', '2');
|
||||
$tpl->delBlockHandle('content', 'ThreeRows');
|
||||
}
|
||||
else {
|
||||
$tpl->addVars('rowCnt', '3');
|
||||
$tpl->parseBlock('content', 'ThreeRows', 'Row');
|
||||
$GLOBALS['tpl']->addVars('rowCnt', '2');
|
||||
$GLOBALS['tpl']->delBlockHandle('content', 'ThreeRows');
|
||||
} else {
|
||||
$GLOBALS['tpl']->addVars('rowCnt', '3');
|
||||
$GLOBALS['tpl']->parseBlock('content', 'ThreeRows', 'Row');
|
||||
}
|
||||
|
||||
$tpl->parseBlock('content', 'Bogen', 'Frage', TRUE, TRUE);
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Bogen', 'Frage', TRUE, TRUE);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
$tpl->addVars('navBogenNeu', 'current');
|
||||
$tpl->addTemplates(Array('content' => 'bogen-start'));
|
||||
} else {
|
||||
$GLOBALS['tpl']->addVars('navBogenNeu', 'current');
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'bogen-start'));
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
|
@ -6,7 +6,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
|
@ -8,7 +8,7 @@
|
||||
* of the
|
||||
*
|
||||
* Bundesanstalt Technisches Hilfswerk
|
||||
* Provinzialstraße 93
|
||||
* Provinzialstraße 93
|
||||
* D-53127 Bonn
|
||||
* Germany
|
||||
* E-Mail: redaktion@thw.de
|
||||
@ -30,27 +30,27 @@
|
||||
|
||||
/*
|
||||
*
|
||||
* Fragen in zufälliger Reihenfolge üben
|
||||
* Fragen in zufälliger Reihenfolge üben
|
||||
*
|
||||
*/
|
||||
|
||||
$tpl->parseBlock('page-body', 'NavZufall', 'Sublinks');
|
||||
$tpl->addVars('navZufall', 'current');
|
||||
$GLOBALS['tpl']->parseBlock('page-body', 'NavZufall', 'Sublinks');
|
||||
$GLOBALS['tpl']->addVars('navZufall', 'current');
|
||||
|
||||
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'neu') {
|
||||
// Fragenkatalog löschen
|
||||
// Fragenkatalog löschen
|
||||
unset($_SESSION['zufallsfragen']);
|
||||
}
|
||||
|
||||
if (isset($_SESSION['zufallsfragen'])) {
|
||||
// Fragenkatalog schon vorhanden. Zu nächster unbeantworteter Frage
|
||||
// bzw. Antwort der letzten Frage springen
|
||||
// Fragenkatalog schon vorhanden. Zu nächster unbeantworteter Frage
|
||||
// bzw. Antwort der letzten Frage springen.
|
||||
// Wenn keine Fragen mehr im Katalog vorhanden sind,
|
||||
// Statistik anzeigen.
|
||||
|
||||
if (count($_SESSION['zufallsfragen'])==0) {
|
||||
if (count($_SESSION['zufallsfragen']) == 0) {
|
||||
// Alle Fragen beantwortet, Ergebnis zeigen
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'anzFragen' => $_SESSION['fragen_cnt'],
|
||||
'fragenRichtig' => $_SESSION['zufallstats']['Richtig'],
|
||||
'fragenRichtigQuote' => sprintf('%.2f %%', $_SESSION['zufallstats']['Richtig'] / $_SESSION['fragen_cnt'] * 100),
|
||||
@ -58,17 +58,16 @@ if (isset($_SESSION['zufallsfragen'])) {
|
||||
'fragenFalschQuote' => sprintf('%.2f %%', $_SESSION['zufallstats']['Falsch'] / $_SESSION['fragen_cnt'] * 100),
|
||||
));
|
||||
|
||||
$tpl->addTemplates('content', 'zufallsfragen-ende');
|
||||
|
||||
$GLOBALS['tpl']->addTemplates('content', 'zufallsfragen-ende');
|
||||
|
||||
|
||||
if (($_SESSION['zufallstats']['Richtig'] / $_SESSION['fragen_cnt']) >= 0.8) {
|
||||
$tpl->parseBlock('content', 'Bestanden', 'Ja');
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Bestanden', 'Ja');
|
||||
} else {
|
||||
$tpl->parseBlock('content', 'Bestanden', 'Nein');
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Bestanden', 'Nein');
|
||||
}
|
||||
|
||||
// Sessiondaten löschen
|
||||
// Sessiondaten löschen
|
||||
unset($_SESSION['zufallsfragen']);
|
||||
unset($_SESSION['frage_nr']);
|
||||
unset($_SESSION['fragen_cnt']);
|
||||
@ -76,12 +75,11 @@ if (isset($_SESSION['zufallsfragen'])) {
|
||||
unset($_SESSION['bogen']);
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (!isset($_REQUEST['frage_id']) || $_REQUEST['frage_id'][0] <> $_SESSION['zufallsfragen'][0]) {
|
||||
$tpl->addTemplates(Array('content' => 'zufallsfragen-frage'));
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'zufallsfragen-frage'));
|
||||
|
||||
// Frage stellen
|
||||
SingleQuestion($_SESSION['zufallsfragen'][0], $_SESSION['frage_nr'], $_SESSION['fragen_cnt']);
|
||||
@ -89,11 +87,11 @@ if (isset($_SESSION['zufallsfragen'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$tpl->addTemplates(Array('content' => 'zufallsfragen-aufloesung'));
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'zufallsfragen-aufloesung'));
|
||||
|
||||
// Antwort auswerten
|
||||
|
||||
questionHeader($_REQUEST['frage_id'][0], $_SESSION['frage_nr'], $_SESSION['fragen_cnt'], $_SESSION['jahr']);
|
||||
questionHeader($_REQUEST['frage_id'][0], $_SESSION['frage_nr'], $_SESSION['fragen_cnt']);
|
||||
$korrekt = Answer($_REQUEST['frage_id'][0], $_REQUEST['antwort']);
|
||||
|
||||
// Statistik anpassen
|
||||
@ -101,20 +99,19 @@ if (isset($_SESSION['zufallsfragen'])) {
|
||||
$_SESSION['zufallstats']['Richtig']++;
|
||||
$_SESSION['stats']['Fragen_Richtig']++;
|
||||
$stmt = $GLOBALS['db']->prepare('UPDATE statistik SET fragen=fragen+1,richtig=richtig+1');
|
||||
$stmt->execute();
|
||||
} else {
|
||||
$_SESSION['zufallstats']['Falsch']++;
|
||||
$_SESSION['stats']['Fragen_Falsch']++;
|
||||
$stmt = $GLOBALS['db']->prepare('UPDATE statistik SET fragen=fragen+1,falsch=falsch+1');
|
||||
$stmt->execute();
|
||||
}
|
||||
$stmt->execute();
|
||||
|
||||
$tpl->addVars(Array(
|
||||
'submitText' => ($_SESSION['frage_nr']==$_SESSION['fragen_cnt'])?'Gesamtstatistik':'Nächste Frage',
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'submitText' => ($_SESSION['frage_nr'] == $_SESSION['fragen_cnt']) ? 'Gesamtstatistik' : 'Nächste Frage',
|
||||
'aktuelleFrage' => $_SESSION['frage_nr'],
|
||||
'fragenRichtig' => $_SESSION['zufallstats']['Richtig'],
|
||||
'fragenFalsch' => $_SESSION['zufallstats']['Falsch'],
|
||||
'fragenQuote' => sprintf('%0.2f', $_SESSION['zufallstats']['Falsch']/$_SESSION['frage_nr']*100) . '%'
|
||||
'fragenQuote' => sprintf('%0.2f', $_SESSION['zufallstats']['Falsch'] / $_SESSION['frage_nr'] * 100) . '%'
|
||||
));
|
||||
|
||||
// Frage entfernen
|
||||
@ -129,26 +126,24 @@ if (isset($_SESSION['zufallsfragen'])) {
|
||||
// Neuen Fragenkatalog erstellen
|
||||
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'start') {
|
||||
|
||||
$topicCount = getSingleResult('SELECT COUNT(*) AS Cnt FROM abschnitte WHERE Jahr = ?',
|
||||
array('i', $_SESSION['jahr']));
|
||||
$topicCount = getSingleResult('SELECT COUNT(*) AS Cnt FROM abschnitte WHERE Jahr = ?', array('i', $_SESSION['jahr']));
|
||||
|
||||
// Gewählte Abschnitte in Query einsetzen
|
||||
// Gewählte Abschnitte in Query einsetzen
|
||||
$selectedTopics = array();
|
||||
for ($topic = 1; $topic <= $topicCount; $topic++){
|
||||
for ($topic = 1; $topic <= $topicCount; $topic++) {
|
||||
if (isset($_REQUEST['abschnitt'][$topic]) && $_REQUEST['abschnitt'][$topic] == '1') {
|
||||
array_push($selectedTopics, $topic);
|
||||
$selectedTopics[] = $topic;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($selectedTopics) == 0)
|
||||
{
|
||||
// Kein Themenabschnitt gewählt
|
||||
$tpl->addTemplates(Array('content' => 'zufallsfragen-error'));
|
||||
if (count($selectedTopics) == 0) {
|
||||
// Kein Themenabschnitt gewählt
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'zufallsfragen-error'));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Sessiondaten löschen
|
||||
// Sessiondaten löschen
|
||||
unset($_SESSION['zufallsfragen']);
|
||||
unset($_SESSION['frage_nr']);
|
||||
unset($_SESSION['fragen_cnt']);
|
||||
@ -160,28 +155,30 @@ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'start') {
|
||||
$_SESSION['frage_nr'] = 1;
|
||||
$_SESSION['zufallstats'] = array('Richtig' => '0', 'Falsch' => '0');
|
||||
|
||||
$tpl->addTemplates(Array('content' => 'zufallsfragen-frage'));
|
||||
$GLOBALS['tpl']->addTemplates(array('content' => 'zufallsfragen-frage'));
|
||||
|
||||
// Fragen holen
|
||||
$inClauseParams = implode(',', array_fill(0, count($selectedTopics), '?'));
|
||||
$inClauseTypes = str_repeat('i', count($selectedTopics));
|
||||
$params = array_merge(array('i'.$inClauseTypes, $_SESSION['jahr']), $selectedTopics);
|
||||
$params = array_merge(array('i' . $inClauseTypes, $_SESSION['jahr']), $selectedTopics);
|
||||
|
||||
$id = 0;
|
||||
|
||||
$stmt = $GLOBALS['db']->prepare('SELECT ID FROM fragen WHERE Jahr = ? AND Abschnitt IN (' . $inClauseParams . ')');
|
||||
callBindParamArray($stmt, $params);
|
||||
$stmt->execute();
|
||||
$stmt->bind_result($id);
|
||||
|
||||
// Fragen in Array übertragen
|
||||
// Fragen in Array übertragen
|
||||
while ($stmt->fetch()) {
|
||||
array_push($_SESSION['zufallsfragen'], $id);
|
||||
$_SESSION['zufallsfragen'][] = $id;
|
||||
}
|
||||
$stmt->close();
|
||||
|
||||
// Fragen zufällig mischen
|
||||
// Fragen zufällig mischen
|
||||
shuffle($_SESSION['zufallsfragen']);
|
||||
|
||||
// Nur gewählte Anzahl Fragen zulassen
|
||||
// Nur gewählte Anzahl Fragen zulassen
|
||||
if ($_REQUEST['fragen'] > 0 && $_REQUEST['fragen'] < count($_SESSION['zufallsfragen'])) {
|
||||
$_SESSION['zufallsfragen'] = array_slice($_SESSION['zufallsfragen'], 0, $_REQUEST['fragen']);
|
||||
}
|
||||
@ -197,25 +194,25 @@ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'start') {
|
||||
}
|
||||
|
||||
// Startseite mit Abschnittsauswahl
|
||||
$tpl->addVars('navZufallNeu', 'current');
|
||||
$GLOBALS['tpl']->addVars('navZufallNeu', 'current');
|
||||
$abschnitte = getTopics();
|
||||
$topicCount = getSingleResult('SELECT COUNT(*) AS Cnt FROM abschnitte WHERE Jahr = ?',
|
||||
array('i', $_SESSION['jahr']));
|
||||
$maxFragen = getSingleResult('SELECT COUNT(*) AS Cnt FROM fragen WHERE Jahr = ?',
|
||||
array('i', $_SESSION['jahr']));
|
||||
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'abschnitteAnz' => $topicCount,
|
||||
'maxFragen' => $maxFragen
|
||||
));
|
||||
|
||||
$tpl->addTemplates('content', 'zufallsfragen-start');
|
||||
$GLOBALS['tpl']->addTemplates('content', 'zufallsfragen-start');
|
||||
|
||||
foreach ($abschnitte as $nr => $description) {
|
||||
$tpl->addVars(Array(
|
||||
$GLOBALS['tpl']->addVars(array(
|
||||
'abschnittNr' => $nr,
|
||||
'abschnittDesc' => htmlspecialchars($description)
|
||||
));
|
||||
|
||||
$tpl->parseBlock('content', 'Abschnitte', 'Row', TRUE);
|
||||
$GLOBALS['tpl']->parseBlock('content', 'Abschnitte', 'Row', TRUE);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user