Anmeldung läuft

This commit is contained in:
Robert
2024-01-17 15:23:48 +01:00
parent aa936198c8
commit d47f00093a
125 changed files with 1459 additions and 4444 deletions

Binary file not shown.

View File

@@ -0,0 +1,10 @@
{
"name": "emensa/mvc",
"description": "routing script for module Datenbanken und Webtechnologien MVC",
"license": "proprietary",
"require": {
"eftec/bladeone": "^4.1",
"ext-mysqli": "*",
"monolog/monolog": "^3.5"
}
}

231
M5/Dossier/emensa/composer.lock generated Normal file
View File

@@ -0,0 +1,231 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "56e35407c924fe62af5e2eb164530d54",
"packages": [
{
"name": "eftec/bladeone",
"version": "4.9",
"source": {
"type": "git",
"url": "https://github.com/EFTEC/BladeOne.git",
"reference": "019036c226086fbe7591360d260067c5d82400ca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/EFTEC/BladeOne/zipball/019036c226086fbe7591360d260067c5d82400ca",
"reference": "019036c226086fbe7591360d260067c5d82400ca",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": ">=7.2.5"
},
"require-dev": {
"phpunit/phpunit": "^8.5.23"
},
"suggest": {
"eftec/bladeonehtml": "Extension to create forms",
"ext-mbstring": "This extension is used if it's active"
},
"bin": [
"lib/bladeonecli"
],
"type": "library",
"autoload": {
"psr-4": {
"eftec\\bladeone\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jorge Patricio Castro Castillo",
"email": "jcastro@eftec.cl"
}
],
"description": "The standalone version Blade Template Engine from Laravel in a single php file",
"homepage": "https://github.com/EFTEC/BladeOne",
"keywords": [
"blade",
"php",
"template",
"templating",
"view"
],
"support": {
"issues": "https://github.com/EFTEC/BladeOne/issues",
"source": "https://github.com/EFTEC/BladeOne/tree/4.9"
},
"time": "2023-05-01T12:48:42+00:00"
},
{
"name": "monolog/monolog",
"version": "3.5.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448",
"reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/log": "^2.0 || ^3.0"
},
"provide": {
"psr/log-implementation": "3.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^3.0",
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^7 || ^8",
"ext-json": "*",
"graylog2/gelf-php": "^1.4.2 || ^2.0",
"guzzlehttp/guzzle": "^7.4.5",
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
"php-amqplib/php-amqplib": "~2.4 || ^3",
"phpstan/phpstan": "^1.9",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-strict-rules": "^1.4",
"phpunit/phpunit": "^10.1",
"predis/predis": "^1.1 || ^2",
"ruflin/elastica": "^7",
"symfony/mailer": "^5.4 || ^6",
"symfony/mime": "^5.4 || ^6"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
"ext-mbstring": "Allow to work properly with unicode symbols",
"ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
"ext-openssl": "Required to send log messages using SSL",
"ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "https://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "https://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
"source": "https://github.com/Seldaek/monolog/tree/3.5.0"
},
"funding": [
{
"url": "https://github.com/Seldaek",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
"type": "tidelift"
}
],
"time": "2023-10-27T15:32:31+00:00"
},
{
"name": "psr/log",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
"shasum": ""
},
"require": {
"php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/3.0.0"
},
"time": "2021-07-14T16:46:02+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"ext-mysqli": "*"
},
"platform-dev": [],
"plugin-api-version": "2.6.0"
}

View File

@@ -0,0 +1,9 @@
<?php
return [
'host' => 'localhost', // 'localhost' or '127.0.0.1'
'user' => 'root', // '<yourusername>'
'password' => 'admin', // '<yourpassword>'
'database' => 'emensawerbeseite',
// optionally: set port below if it differs from the default 3306
// 'port' => 13306 // !! this is not your webserver port, but the mariadb port
];

View File

@@ -0,0 +1,75 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/../models/benutzer.php');
class AnmeldungController
{
public function start(){
return view(
'm5_a1.anmeldung',
[]
);
}
public function anmeldung_verifizieren(RequestData $rd){
$data = $rd->getPostData();
$email = $data["email"] ?? NULL;
$passwort = $data["passwort"] ?? NULL;
$anmeldung = anmelden($email, sha1($passwort));
if($anmeldung){
$log = logger('anmeldung', '../storage/logs');
$log->info('Anmeldung erfolgreich!');
}
else{
$log = logger('anmeldung', '../storage/logs');
$log->warning('Anmeldung fehlgeschlagen!');
}
return view(
'm5_a1.anmeldung_verifizieren',
[
'email' => $email,
'passwort' => $passwort,
'anmeldung' => $anmeldung
]
);
}
public function check(RequestData $rd){
$data = $rd->getPostData();
$email = $data["email"] ?? NULL;
$passwort = $data["passwort"] ?? NULL;
$anmeldung = $data["anmeldung"] ?? NULL;
return view(
'm5_a1.anmeldung',
[
'email' => $email,
'passwort' => $passwort,
'anmeldung' => $anmeldung,
'data' => $data
]
);
}
function abmelden(){
session_unset();
session_destroy();
$log = logger('anmeldung', '../storage/logs');
$log->info('Abmeldung erfolgreich!');
return view('m5_a1.abmeldung', []);
}
}

View File

@@ -0,0 +1,51 @@
<?php
/**
* Diese Datei enthält alle SQL Statements für die Tabelle "benutzer"
*/
function anmelden(string $email, string $passwort)
{
$link = connectdb();
$sql = "SELECT * FROM benutzer
WHERE (`email` = '$email')";
$result = $link->query($sql);
$row = $result->fetch_assoc();
if ($row['passwort'] == NULL) {
$row = 0;
} elseif ($row['passwort'] == $passwort) {
session_start();
mysqli_begin_transaction($link);
$sql = "UPDATE benutzer
SET letzteanmeldung = current_time, anzahlfehler = 0
WHERE email = '$email'";
$link->query($sql);
// $sql = "UPDATE benutzer SET anzahlanmeldungen = anzahlanmeldungen + 1 WHERE id = " . $row['id'];
$sql = "CALL incrementAnzahlAnmeldungen(" . ($row['id']) . ")";
$link->query($sql);
mysqli_commit($link);
$_SESSION['uid'] = session_id();
$_SESSION['login'] = 1;
$_SESSION['name'] = $row['name'];
$_SESSION['email'] = $row['email'];
return 1;
} else {
mysqli_begin_transaction($link);
$sql = "UPDATE benutzer
SET anzahlfehler = anzahlfehler+1, letzterfehler = current_time
WHERE email = '$email'";
$link->query($sql);
mysqli_commit($link);
}
return 0;
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Beispiel: Daten aus der Datenbank</title>
</head>
<body>
<?php if(isset($data['error'])): ?>
<h1>Es gab ein Problem mit der Datenbankverbindung</h1>
<p>Fehlermeldung</p>
<pre> <?php echo \htmlentities($data['beschreibung']??'', ENT_QUOTES, 'UTF-8', false); ?></pre>
<?php else: ?>
<article>
<h1>Daten aus der Datenbank der Tabelle: Gerichte</h1>
<p>Der Controller inkludiert das benötigte Model (gerichte.php in diesem Fall)
und ruft die benötigte Funktion <code>db_gerichte_select_all()</code> zum Laden der Daten auf</p>
<ul>
<?php $__empty_1 = true; foreach($data as $a): $__empty_1 = false; ?>
<li><?php echo \htmlentities($a['name']??'', ENT_QUOTES, 'UTF-8', false); ?></li>
<?php endforeach; if ($__empty_1): ?>
<li>Keine Daten vorhanden.</li>
<?php endif; ?>
</ul>
</article>
<?php endif; ?>
</body>
</html>

View File

@@ -0,0 +1,9 @@
[2023-12-20T16:18:29.055116+00:00] anmeldung.WARNING: Anmeldung fehlgeschlagen! [] []
[2023-12-20T16:18:56.231427+00:00] anmeldung.INFO: Anmeldung erfolgreich! [] []
[2023-12-20T16:19:05.370972+00:00] anmeldung.INFO: Abmeldung erfolgreich! [] []
[2023-12-21T14:29:55.917076+00:00] anmeldung.INFO: Anmeldung erfolgreich! [] []
[2024-01-06T17:35:10.417463+00:00] anmeldung.INFO: Abmeldung erfolgreich! [] []
[2024-01-06T18:40:26.912833+00:00] anmeldung.INFO: Anmeldung erfolgreich! [] []
[2024-01-06T18:40:42.244963+00:00] anmeldung.INFO: Abmeldung erfolgreich! [] []
[2024-01-06T18:50:32.238610+00:00] anmeldung.INFO: Anmeldung erfolgreich! [] []
[2024-01-06T18:50:56.848358+00:00] anmeldung.INFO: Abmeldung erfolgreich! [] []

25
M5/Dossier/emensa/vendor/autoload.php vendored Normal file
View File

@@ -0,0 +1,25 @@
<?php
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
trigger_error(
$err,
E_USER_ERROR
);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit0a19be8f09bdc5d4e2b07ba9e95a5801::getLoader();

View File

@@ -0,0 +1,18 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../eftec/bladeone/lib/bladeonecli)
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
return include __DIR__ . '/..'.'/eftec/bladeone/lib/bladeonecli';

View File

@@ -0,0 +1,579 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
/** @var \Closure(string):void */
private static $includeFile;
/** @var string|null */
private $vendorDir;
// PSR-4
/**
* @var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array<string, list<string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* List of PSR-0 prefixes
*
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
*
* @var array<string, array<string, list<string>>>
*/
private $prefixesPsr0 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var array<string, bool>
*/
private $missingClasses = array();
/** @var string|null */
private $apcuPrefix;
/**
* @var array<string, self>
*/
private static $registeredLoaders = array();
/**
* @param string|null $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
self::initializeIncludeClosure();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return list<string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return list<string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return array<string, string> Array of classname => path
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array<string, string> $classMap Class to filename map
*
* @return void
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
$paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
$paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
$paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
$paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders keyed by their corresponding vendor directories.
*
* @return array<string, self>
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}

View File

@@ -0,0 +1,10 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
);

View File

@@ -0,0 +1,9 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
);

View File

@@ -0,0 +1,12 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'eftec\\bladeone\\' => array($vendorDir . '/eftec/bladeone/lib'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
);

View File

@@ -0,0 +1,38 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit0a19be8f09bdc5d4e2b07ba9e95a5801
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit0a19be8f09bdc5d4e2b07ba9e95a5801', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit0a19be8f09bdc5d4e2b07ba9e95a5801', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit0a19be8f09bdc5d4e2b07ba9e95a5801::getInitializer($loader));
$loader->register(true);
return $loader;
}
}

View File

@@ -0,0 +1,52 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInit0a19be8f09bdc5d4e2b07ba9e95a5801
{
public static $prefixLengthsPsr4 = array (
'e' =>
array (
'eftec\\bladeone\\' => 15,
),
'P' =>
array (
'Psr\\Log\\' => 8,
),
'M' =>
array (
'Monolog\\' => 8,
),
);
public static $prefixDirsPsr4 = array (
'eftec\\bladeone\\' =>
array (
0 => __DIR__ . '/..' . '/eftec/bladeone/lib',
),
'Psr\\Log\\' =>
array (
0 => __DIR__ . '/..' . '/psr/log/src',
),
'Monolog\\' =>
array (
0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
),
);
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit0a19be8f09bdc5d4e2b07ba9e95a5801::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit0a19be8f09bdc5d4e2b07ba9e95a5801::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit0a19be8f09bdc5d4e2b07ba9e95a5801::$classMap;
}, null, ClassLoader::class);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,328 @@
<?php /** @noinspection UnknownInspectionInspection */
/** @noinspection TypeUnsafeComparisonInspection */
namespace eftec\bladeone;
use Exception;
use function fclose;
use function file_put_contents;
use function filemtime;
use function filesize;
use function fopen;
use function fwrite;
use function is_array;
use function is_object;
use function ob_get_contents;
use function print_r;
use function strlen;
use function substr;
use function time;
/**
* trait BladeOneCache
* Copyright (c) 2016 Jorge Patricio Castro Castillo MIT License. Don't delete this comment, its part of the license.
* Extends the tags of the class BladeOne. Its optional
* It adds the next tags to the template
* <code>
* @ cache([cacheid],[duration=86400]). The id is optional. The duration of the cache is in seconds
* // content here
* @ endcache()
* </code>
* It also adds a new function (optional) to the business or logic layer
* <code>
* if ($blade->cacheExpired('hellocache',1,5)) { //'helloonecache' =template, =1 id cache, 5=duration (seconds)
* // cache expired, so we should do some stuff (such as read from the database)
* }
* </code>
*
* @package BladeOneCache
* @version 3.42 2020-04-25
* @link https://github.com/EFTEC/BladeOne
* @author Jorge Patricio Castro Castillo <jcastro arroba eftec dot cl>
*/
trait BladeOneCache
{
protected $curCacheId = 0;
protected $curCacheDuration = 0;
protected $curCachePosition = 0;
protected $cacheRunning = false;
protected $cachePageRunning = false;
protected $cacheLog;
/**
* @var array avoids comparing the file different times. It also avoids race conditions.
*/
private $cacheExpired = [];
/**
* @var string=['get','post','getpost','request',null][$i]
*/
private $cacheStrategy;
/** @var array|null */
private $cacheStrategyIndex;
/**
* @return null|string $cacheStrategy=['get','post','getpost','request',null][$i]
*/
public function getCacheStrategy(): ?string
{
return $this->cacheStrategy;
}
/**
* It sets the cache log. If not cache log then it does not generate a log file<br>
* The cache log stores each time a template is creates or expired.<br>
*
* @param string $file
*/
public function setCacheLog($file): void
{
$this->cacheLog=$file;
}
public function writeCacheLog($txt, $nivel): void
{
if (!$this->cacheLog) {
return; // if there is not a file assigned then it skips saving.
}
$fz = @filesize($this->cacheLog);
if (is_object($txt) || is_array($txt)) {
$txt = print_r($txt, true);
}
// Rewrite file if more than 100000 bytes
$mode=($fz > 100000) ? 'w':'a';
$fp = fopen($this->cacheLog, $mode);
if ($fp === false) {
return;
}
switch ($nivel) {
case 1:
$txtNivel='expired';
break;
case 2:
$txtNivel='new';
break;
default:
$txtNivel='other';
}
$txtarg=json_encode($this->cacheUniqueGUID(false));
fwrite($fp, date('c') . "\t$txt\t$txtNivel\t$txtarg\n");
fclose($fp);
}
/**
* It sets the strategy of the cache page.
*
* @param null|string $cacheStrategy =['get','post','getpost','request',null][$i]
* @param array|null $index if null then it reads all indexes. If not, it reads an indexes.
*/
public function setCacheStrategy($cacheStrategy, $index = null): void
{
$this->cacheStrategy = $cacheStrategy;
$this->cacheStrategyIndex = $index;
}
/**
* It obtains a unique GUID based in:<br>
* <b>get</b>= parameters from the url<br>
* <b>post</b>= parameters sends via post<br>
* <b>getpost</b> = a mix between get and post<br>
* <b>request</b> = get, post and cookies (including sessions)<br>
* MD5 could generate colisions (2^64 = 18,446,744,073,709,551,616) but the end hash is the sum of the hash of
* the page + this GUID.
*
* @param bool $serialize if true then it serializes using md5
* @return string|null
*/
private function cacheUniqueGUID($serialize = true): ?string
{
switch ($this->cacheStrategy) {
case 'get':
$r = $_GET;
break;
case 'post':
$r = $_POST;
break;
case 'getpost':
$arr = array_merge($_GET, $_POST);
$r = $arr;
break;
case 'request':
$r = $_REQUEST;
break;
default:
$r = null;
}
if ($this->cacheStrategyIndex === null || !is_array($r)) {
$r= serialize($r);
} else {
$copy=[];
foreach ($r as $key => $item) {
if (in_array($key, $this->cacheStrategyIndex, true)) {
$copy[$key]=$item;
}
}
$r=serialize($copy);
}
return $serialize===true ? md5($r): $r;
}
public function compileCache($expression): string
{
// get id of template
// if the file exists then
// compare date.
// if the date is too old then re-save.
// else
// save for the first time.
return $this->phpTag . "echo \$this->cacheStart$expression; if(!\$this->cacheRunning) { ?>";
}
public function compileEndCache($expression): string
{
return $this->phpTag . "} // if cacheRunning\necho \$this->cacheEnd$expression; ?>";
}
/**
* It gets the filename of the compiled file (cached). If cache is not enabled, then it
* returns the regular file.
*
* @param string $view
* @return string The full filename
*/
private function getCompiledFileCache($view): string
{
$id = $this->cacheUniqueGUID();
if ($id !== null) {
return str_replace($this->compileExtension, '_cache' . $id
. $this->compileExtension, $this->getCompiledFile($view));
}
return $this->getCompiledFile($view);
}
/**
* run the blade engine. It returns the result of the code.
*
* @param string $view The name of the cache. Ex: "folder.folder.view" ("/folder/folder/view.blade")
* @param array $variables An associative arrays with the values to display.
* @param int $ttl time to live (in second).
* @return string
* @throws Exception
*/
public function runCache($view, $variables = [], $ttl = 86400): string
{
$this->cachePageRunning = true;
$cacheStatus=$this->cachePageExpired($view, $ttl);
if ($cacheStatus!==0) {
$this->writeCacheLog($view, $cacheStatus);
$this->cacheStart('_page_', $ttl);
$content = $this->run($view, $variables); // if no cache, then it runs normally.
$this->fileName = $view; // sometimes the filename is replaced (@include), so we restore it
$this->cacheEnd($content); // and it stores as a cache paged.
} else {
$content = $this->getFile($this->getCompiledFileCache($view));
}
$this->cachePageRunning = false;
return $content;
}
/**
* Returns true if the block cache expired (or doesn't exist), otherwise false.
*
* @param string $templateName name of the template to use (such hello for template hello.blade.php)
* @param string $id (id of cache, optional, if not id then it adds automatically a number)
* @param int $cacheDuration (duration of the cache in seconds)
* @return int 0=cache exists, 1= cache expired, 2=not exists, string= the cache file (if any)
*/
public function cacheExpired($templateName, $id, $cacheDuration): int
{
if ($this->getMode() & 1) {
return 2; // forced mode, hence it always expires. (fast mode is ignored).
}
$compiledFile = $this->getCompiledFile($templateName) . '_cache' . $id;
return $this->cacheExpiredInt($compiledFile, $cacheDuration);
}
/**
* It returns true if the whole page expired.
*
* @param string $templateName
* @param int $cacheDuration is seconds.
* @return int 0=cache exists, 1= cache expired, 2=not exists, string= the cache content (if any)
*/
public function cachePageExpired($templateName, $cacheDuration): int
{
if ($this->getMode() & 1) {
return 2; // forced mode, hence it always expires. (fast mode is ignored).
}
$compiledFile = $this->getCompiledFileCache($templateName);
return $this->CacheExpiredInt($compiledFile, $cacheDuration);
}
/**
* This method is used by cacheExpired() and cachePageExpired()
*
* @param string $compiledFile
* @param int $cacheDuration is seconds.
* @return int|mixed 0=cache exists, 1= cache expired, 2=not exists, string= the cache content (if any)
*/
private function cacheExpiredInt($compiledFile, $cacheDuration)
{
if (isset($this->cacheExpired[$compiledFile])) {
// if the information is already in the array then returns it.
return $this->cacheExpired[$compiledFile];
}
$date = @filemtime($compiledFile);
if ($date) {
if ($date + $cacheDuration < time()) {
$this->cacheExpired[$compiledFile] = 1;
return 2; // time-out.
}
} else {
$this->cacheExpired[$compiledFile] = 2;
return 1; // no file
}
$this->cacheExpired[$compiledFile] = 0;
return 0; // cache active.
}
public function cacheStart($id = '', $cacheDuration = 86400): void
{
$this->curCacheId = ($id == '') ? ($this->curCacheId + 1) : $id;
$this->curCacheDuration = $cacheDuration;
$this->curCachePosition = strlen(ob_get_contents());
if ($this->cachePageRunning) {
$compiledFile = $this->getCompiledFileCache($this->fileName);
} else {
$compiledFile = $this->getCompiledFile() . '_cache' . $this->curCacheId;
}
if ($this->cacheExpired('', $id, $cacheDuration) !==0) {
$this->cacheRunning = false;
} else {
$this->cacheRunning = true;
$content = $this->getFile($compiledFile);
echo $content;
}
}
public function cacheEnd($txt = null): void
{
if (!$this->cacheRunning) {
$txt = $txt ?? substr(ob_get_contents(), $this->curCachePosition);
if ($this->cachePageRunning) {
$compiledFile = $this->getCompiledFileCache($this->fileName);
} else {
$compiledFile = $this->getCompiledFile() . '_cache' . $this->curCacheId;
}
file_put_contents($compiledFile, $txt);
}
$this->cacheRunning = false;
}
}

View File

@@ -0,0 +1,160 @@
<?php
namespace eftec\bladeone;
use Redis;
use function class_exists;
use function file_put_contents;
use function filemtime;
use function ob_get_contents;
use function strlen;
use function substr;
use function time;
/**
* trait BladeOneCacheRedis
* Copyright (c) 2016 Jorge Patricio Castro Castillo MIT License. Don't delete this comment, its part of the license.
* Extends the tags of the class BladeOne. Its optional
* It adds the next tags to the template
* <code>
* @ cache([cacheid],[duration=86400]). The id is optional. The duration of the cache is in seconds
* // content here
* @ endcache()
* </code>
* It also adds a new function (optional) to the business or logic layer
* <code>
* if ($blade->cacheExpired('hellocache',1,5)) { //'helloonecache' =template, =1 id cache, 5=duration (seconds)
* // cache expired, so we should do some stuff (such as read from the database)
* }
* </code>
*
* @package BladeOneCacheRedis
* @version 0.1 2017-12-15 NOT YET IMPLEMENTED, ITS A WIP!!!!!!!!
* @link https://github.com/EFTEC/BladeOne
* @author Jorge Patricio Castro Castillo <jcastro arroba eftec dot cl>
*/
const CACHEREDIS_SCOPEURL = 1;
trait BladeOneCacheRedis
{
protected $curCacheId = 0;
protected $curCacheDuration = "";
protected $curCachePosition = 0;
protected $cacheRunning = false;
/** @var \Redis $redis */
protected $redis;
protected $redisIP = '127.0.0.1';
protected $redisPort = 6379;
protected $redisTimeOut = 2.5;
protected $redisConnected = false;
protected $redisNamespace = 'bladeonecache:';
protected $redisBase = 0;
private $cacheExpired = []; // avoids to compare the file different times.
//<editor-fold desc="compile">
public function compileCache($expression)
{
// get id of template
// if the file exists then
// compare date.
// if the date is too old then re-save.
// else
// save for the first time.
return $this->phpTag . "echo \$this->cacheStart{$expression}; if(!\$this->cacheRunning) { ?>";
}
public function compileEndCache($expression)
{
return $this->phpTag . "} // if cacheRunning\necho \$this->cacheEnd{$expression}; ?>";
}
//</editor-fold>
public function connect($redisIP = null, $redisPort = null, $redisTimeOut = null)
{
if ($this->redisConnected) {
return true;
}
if (!class_exists('Redis')) {
return false; // it requires redis.
}
if ($redisIP !== null) {
$this->redisIP = $redisIP;
$this->redisPort = $redisPort;
$this->redisTimeOut = $redisTimeOut;
}
$this->redis = new Redis();
// 2.5 sec timeout.
$this->redisConnected = $this->redis->connect($this->redisIP, $this->redisPort, $this->redisTimeOut);
return $this->redisConnected;
}
/**
* Returns true if the cache expired (or doesn't exist), otherwise false.
*
* @param string $templateName name of the template to use (such hello for template hello.blade.php)
* @param string $id (id of cache, optional, if not id then it adds automatically a number)
* @param int $scope scope of the cache.
* @param int $cacheDuration (duration of the cache in seconds)
* @return bool (return if the cache expired)
*/
public function cacheExpired($templateName, $id, $scope, $cacheDuration)
{
if ($this->getMode() & 1) {
return true; // forced mode, hence it always expires. (fast mode is ignored).
}
$compiledFile = $this->getCompiledFile($templateName) . '_cache' . $id;
if (isset($this->cacheExpired[$compiledFile])) {
// if the information is already in the array then returns it.
return $this->cacheExpired[$compiledFile];
}
$date = @filemtime($compiledFile);
if ($date) {
if ($date + $cacheDuration < time()) {
$this->cacheExpired[$compiledFile] = true;
return true; // time-out.
}
} else {
$this->cacheExpired[$compiledFile] = true;
return true; // no file
}
$this->cacheExpired[$compiledFile] = false;
return false; // cache active.
}
public function cacheStart($id = "", $cacheDuration = 86400)
{
$this->curCacheId = ($id == "") ? ($this->curCacheId + 1) : $id;
$this->curCacheDuration = $cacheDuration;
$this->curCachePosition = strlen(ob_get_contents());
$compiledFile = $this->getCompiledFile() . '_cache' . $this->curCacheId;
if ($this->cacheExpired('', $id, $cacheDuration)) {
$this->cacheRunning = false;
} else {
$this->cacheRunning = true;
$content = $this->getFile($compiledFile);
echo $content;
}
// getFile($fileName)
}
public function cacheEnd()
{
if (!$this->cacheRunning) {
$txt = substr(ob_get_contents(), $this->curCachePosition);
$compiledFile = $this->getCompiledFile() . '_cache' . $this->curCacheId;
file_put_contents($compiledFile, $txt);
}
$this->cacheRunning = false;
}
private function keyByScope($scope)
{
$key = '';
if ($scope && CACHEREDIS_SCOPEURL) {
$key .= $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
}
}
}

View File

@@ -0,0 +1,59 @@
<?php /** @noinspection ReturnTypeCanBeDeclaredInspection */
/** @noinspection PhpMissingReturnTypeInspection */
/** @noinspection UnknownInspectionInspection */
/** @noinspection PhpUnused */
namespace eftec\bladeone;
/*
* It's an example of a custom set of functions for bladeone.
* in examples/TestCustom.php there is a working example
*/
use function array_pop;
trait BladeOneCustom
{
private $customItem = []; // indicates the type of the current tag. such as select/selectgroup/etc.
//<editor-fold desc="compile function">
/**
* Usage @panel('title',true,true).....@endpanel()
*
* @param $expression
* @return string
*/
protected function compilePanel($expression)
{
$this->customItem[] = 'Panel';
return $this->phpTag . "echo \$this->panel$expression; ?>";
}
protected function compileEndPanel()
{
$r = @array_pop($this->customItem);
if ($r === null) {
$this->showError('@endpanel', 'Missing @compilepanel or so many @compilepanel', true);
}
return ' </div></section><!-- end panel -->'; // we don't need to create a function for this.
}
//</editor-fold>
//<editor-fold desc="used function">
protected function panel($title = '', $toggle = true, $dismiss = true)
{
return "<section class='panel'>
<header class='panel-heading'>
<div class='panel-actions'>
" . (($toggle) ? "<a href='#' class='panel-action panel-action-toggle' data-panel-toggle></a>" : '') . '
' . (($dismiss) ? "<a href='#' class='panel-action panel-action-dismiss' data-panel-dismiss></a>" : '') . "
</div>
<h2 class='panel-title'>$title</h2>
</header>
<div class='panel-body'>";
}
//</editor-fold>
}

View File

@@ -0,0 +1,29 @@
<?php
namespace eftec;
// this code only runs on CLI but only if bladeonecli.php is called directly and via command line.
use eftec\bladeone\BladeOne;
if (!defined('PHPUNIT_COMPOSER_INSTALL') && !defined('__PHPUNIT_PHAR__')
&& isset($_SERVER['PHP_SELF']) &&
!http_response_code() &&
(basename($_SERVER['PHP_SELF']) === 'bladeonecli.php' || basename($_SERVER['PHP_SELF']) === 'bladeonecli')
) {
// we also excluded it if it is called by phpunit.
include_once __DIR__ . '/BladeOne.php';
$compilepath = BladeOne::getParameterCli('compilepath', null);
$templatepath = BladeOne::getParameterCli('templatepath', null);
if (!BladeOne::isAbsolutePath($compilepath)) {
$compilepath = getcwd() . '/' . $compilepath;
}
if (!BladeOne::isAbsolutePath($templatepath)) {
$templatepath = getcwd() . '/' . $templatepath;
}
$inst = new BladeOne($templatepath, $compilepath);
$inst->cliEngine();
} else {
@http_response_code(404);
}

View File

@@ -0,0 +1,31 @@
@extends("layouts.main_layout", ['title' => "E-Mensa"])
@section("header")
<link rel="stylesheet" href="/css/style.css">
@endsection
@section("nav")
<div class="grid">
<div>
<img src="/img/fh-logo.jpg" alt="FH-Logo">
</div>
<div>
<a href="#ankündigung">Ankündigung</a>
<a href="#speisen">Speisen</a>
<a href="#zahlen">Zahlen</a>
<a href="#kontakt">Kontakt</a>
<a href="#wichtig">Wichtig für uns</a>
</div>
</div>
@endsection
@section("footer")
<tr>
<td>(c) E-Mensa GmbH</td>
<td>Şafak Hazinedar & Robert Joel</td>
<td><a href="">Impressum</a></td>
</tr>
@endsection

View File

@@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Beispiel: Daten aus der Datenbank</title>
</head>
<body>
@if (isset($data['error']))
<h1>Es gab ein Problem mit der Datenbankverbindung</h1>
<p>Fehlermeldung</p>
<pre> {{$data['beschreibung']}}</pre>
@else
<article>
<h1>Daten aus der Datenbank der Tabelle: Gerichte</h1>
<p>Der Controller inkludiert das benötigte Model (gerichte.php in diesem Fall)
und ruft die benötigte Funktion <code>db_gerichte_select_all()</code> zum Laden der Daten auf</p>
<ul>
@forelse($data as $a)
<li>{{$a['name']}}</li>
@empty
<li>Keine Daten vorhanden.</li>
@endforelse
</ul>
</article>
@endif
</body>
</html>

View File

@@ -0,0 +1,11 @@
@extends("m5_a1.layout_anmeldung")
@section("main")
@if(!isset($_SESSION['name']))
<meta http-equiv="refresh" content="0;url=/" />
@endif
@endsection

View File

@@ -0,0 +1,23 @@
@extends("m5_a1.layout_anmeldung")
@section("main")
<form action="/anmeldung_verifizieren" method="post">
<label for="email">E-Mail</label>
<input id="email" name="email" type="email" placeholder="email" required maxlength="100">
<label for="passwort">Passwort</label>
<input id="passwort" name="passwort" type="password" placeholder="passwort" required maxlength="200">
<button type="submit" >Anmelden</button>
</form>
@if(!isset($anmeldung)) Bitte anmelden!
@elseif ($anmeldung == 1)
{{ session_start() }}
Anmeldung erlaubt!
@else Es ist ein Fehler aufgetretten!
@endif
@endsection

View File

@@ -0,0 +1,23 @@
@extends("m5_a1.layout_anmeldung")
@section("main")
<form action="/anmeldung_verifizieren" method="post">
<label for="email">E-Mail</label>
<input id="email" name="email" type="email" placeholder="email" required maxlength="100">
<label for="passwort">Passwort</label>
<input id="passwort" name="passwort" type="password" placeholder="passwort" required maxlength="200">
<button type="submit" >Anmelden</button>
</form>
@if(!isset($anmeldung)) Bitte anmelden!
@elseif ($anmeldung == 1)
{{ session_start() }}
Anmeldung erlaubt!
@else Es ist ein Fehler aufgetretten!
@endif
@endsection

View File

@@ -0,0 +1,50 @@
@extends("m5_a1.layout_anmeldung")
@section("main")
@if($anmeldung == 1)
<meta http-equiv="refresh" content="/"/>
<form id="form_ok" action="/"></form>
<script type="text/javascript">
function formAutoSubmit() {
var frm = document.getElementById("form_ok");
frm.submit();
}
window.onload = formAutoSubmit;
</script>
@else
<form method="post" id="auto_form" action="/anmeldung_fehler">
<input type="hidden" name="email" value={{ $email}}>
<input type="hidden" name="passwort" value={{$passwort}}>
<input type="hidden" name="anmeldung" value={{$anmeldung }}>
</form>
<script type="text/javascript">
function formAutoSubmit() {
var frm = document.getElementById("auto_form");
frm.submit();
}
window.onload = formAutoSubmit;
</script>
@endif
<img src="https://upload.wikimedia.org/wikipedia/commons/b/b1/Loading_icon.gif?20151024034921" alt="loading">
<br>
Bitte warten!
@endsection