Skip to content

Commit

Permalink
fix templates
Browse files Browse the repository at this point in the history
  • Loading branch information
Dennis Eichhorn committed Apr 17, 2024
1 parent 1d49ceb commit 121e6b4
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 90 deletions.
2 changes: 1 addition & 1 deletion DataStorage/Database/Mapper/ReadMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -1327,7 +1327,7 @@ public function hasManyRelations(object $obj) : bool
}
}

public function paginate(string $member, string $ptype, mixed $offset) : self
public function paginate(string $member, ?string $ptype, mixed $offset) : self
{
if ($ptype === 'p') {
$this->where($member, $offset ?? 0, '<');
Expand Down
109 changes: 20 additions & 89 deletions Dispatcher/Dispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
namespace phpOMS\Dispatcher;

use phpOMS\Application\ApplicationAbstract;
use phpOMS\Autoloader;
use phpOMS\System\File\PathException;

/**
Expand Down Expand Up @@ -81,102 +80,34 @@ public function dispatch(array | string | callable $controller, mixed ...$data)
// In a different language the Api functions would require a return type
// If null is returned (i.e. void functions) these get ignored later in the response renderer as null is not "rendered"
if (\is_string($controller)) {
$views += $this->dispatchString($controller, $data);
$dispatch = \explode(':', $controller);

if (($c = \count($dispatch)) === 3) {
/* Handling static functions */
$function = $dispatch[0] . '::' . $dispatch[2];

$views[$controller] = $data === null ? $function() : $function(...$data);
} elseif ($c === 2) {
$obj = $this->getController($dispatch[0]);
$views[$controller] = $data === null
? $obj->{$dispatch[1]}()
: $obj->{$dispatch[1]}(...$data);
}
} elseif (\is_array($controller)) {
$views += $this->dispatchArray($controller, $data);
} else {
$views[] = $this->dispatchClosure($controller, $data);
}

return $views;
}

/**
* Dispatch string.
*
* The dispatcher can dispatch static functions.
* String: `some/namespace/path::myStaticFunction`
*
* Additionally it's also possible to dispatch functions of modules.
* Modules are classes which can get instantiated with `new Class(ApplicationAbstract $app)`
* String: `some/namespace/path:myMethod`
*
* @param string $controller Controller string
* @param null|array $data Data
*
* @return array
*
* @throws PathException this exception is thrown if the function cannot be autoloaded
* @throws \Exception this exception is thrown if the function is not callable
* @throws \UnexpectedValueException this exception is thrown if the controller string is malformed
*
* @since 1.0.0
*/
private function dispatchString(string $controller, ?array $data = null) : array
{
$views = [];
$dispatch = \explode(':', $controller);

if (!Autoloader::exists($dispatch[0]) && !isset($this->controllers[$dispatch[0]])) {
throw new PathException($dispatch[0]);
}

if (($c = \count($dispatch)) === 3) {
/* Handling static functions */
$function = $dispatch[0] . '::' . $dispatch[2];

if (!\is_callable($function)) {
throw new \Exception('Endpoint "'. $function .'" is not callable!');
foreach ($controller as $controllerSingle) {
$views += $data === null
? $this->dispatch($controllerSingle)
: $this->dispatch($controllerSingle, ...$data);
}

$views[$controller] = $data === null ? $function() : $function(...$data);
} elseif ($c === 2) {
$obj = $this->getController($dispatch[0]);
$views[$controller] = $data === null
? $obj->{$dispatch[1]}()
: $obj->{$dispatch[1]}(...$data);
} else {
throw new \UnexpectedValueException('Unexpected function.');
$views[] = $data === null
? $controller($this->app)
: $controller($this->app, ...$data);
}

return $views;
}

/**
* Dispatch array.
*
* @param array $controller Controller string
* @param null|array $data Data
*
* @return array
*
* @since 1.0.0
*/
private function dispatchArray(array $controller, ?array $data = null) : array
{
$views = [];
foreach ($controller as $controllerSingle) {
$views += $data === null ? $this->dispatch($controllerSingle) : $this->dispatch($controllerSingle, ...$data);
}

return $views;
}

/**
* Dispatch closure.
*
* @param Callable $controller Controller string
* @param null|array $data Data
*
* @return mixed
*
* @since 1.0.0
*/
private function dispatchClosure(callable $controller, ?array $data = null) : mixed
{
return $data === null ? $controller($this->app) : $controller($this->app, ...$data);
}

/**
* Dispatch controller.
*
Expand Down
16 changes: 16 additions & 0 deletions Views/View.php
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,22 @@ public function getHtml(string $translation, ?string $module = null, ?string $th
return \htmlspecialchars($this->getText($translation, $module, $theme));
}

/**
* Print html output.
*
* @param ?string $text Text
*
* @return string
*
* @since 1.0.0
*/
public function printTextarea(?string $text) : string
{
return $text === null
? ''
: \trim(\str_replace(["\r\n", "\n"], ['&#10;', '&#10;'], \htmlspecialchars($text)));
}

/**
* Print a numeric value
*
Expand Down

0 comments on commit 121e6b4

Please sign in to comment.