Skip to content

Commit

Permalink
Progress to PHPStan Latte level 7 (#175)
Browse files Browse the repository at this point in the history
[9 errors remaining](https://github.com/spaze/michalspacek.cz/actions/runs/5562124085/jobs/10160242058)
and they all seem to be related one way or another to form containers,
so maybe the following will help?
- efabrica-team/phpstan-latte#380

Ref #141
  • Loading branch information
spaze authored Jul 15, 2023
2 parents a9d4d8a + a4ac739 commit b85ad94
Show file tree
Hide file tree
Showing 21 changed files with 312 additions and 119 deletions.
1 change: 0 additions & 1 deletion site/app/Admin/Presenters/templates/Blog/edit.latte
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
<tbody><tr><th>{label allowedTags /}</th><td>{input allowedTags}</td></tr></tbody>
<tbody><tr><th>{label omitExports: /}</th><td>{input omitExports:}</td></tr></tbody>
<tbody><tr><th>{label editSummary /}</th><td>{input editSummary}<br><small>Shrnutí editace bude u článku zobrazeno jako aktualizace, ponechte prázdné pro malé editace</small></td></tr></tbody>
{capture $link}{link preview}{/capture}
<tr><td></td><td class="short"><p>{input submit} {input preview id => preview-button, class => lighter, formtarget => preview}</p></td></tr>
</table>
{/form}
Expand Down
2 changes: 1 addition & 1 deletion site/app/Admin/Presenters/templates/Trainings/date.latte
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
{/ifset}
{else}{/ifset}
{/capture}
<small title="{$title|strip}">
<small title="{(string)$title|strip}">
{ifset $application->priceWithCurrency}{$application->priceWithCurrency}{if $application->price > 0 && !isset($application->paid)} <strong>!</strong>{/if}{else}{/ifset}
</small>
</td>
Expand Down
49 changes: 49 additions & 0 deletions site/app/Media/Photo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php
declare(strict_types = 1);

namespace MichalSpacekCz\Media;

use Nette\Utils\Html;

class Photo
{

/**
* @param array<string, string> $sizes
*/
public function __construct(
private readonly string $title,
private readonly string $file,
private readonly string|Html $description,
private readonly array $sizes,
) {
}


public function getTitle(): string
{
return $this->title;
}


public function getFile(): string
{
return $this->file;
}


public function getDescription(): string|Html
{
return $this->description;
}


/**
* @return array<string, string>
*/
public function getSizes(): array
{
return $this->sizes;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
{define #metas}
{if count($data->getSites()) === 1}
{capture $currentRating}{=current($data->getSites())->getRating()|lower}{/capture}
{var MichalSpacekCz\Pulse\Passwords\Algorithm $currentAlgo = current(current(current($data->getStorages())->getSites())->getAlgorithms())}
{var MichalSpacekCz\Pulse\Passwords\Algorithm $currentAlgo = current($data->getSites())->getLatestAlgorithm()}
<meta property="og:image" content="{="pulse/rating-$currentRating.png"|staticImageUrl}">
<meta property="og:description" content="{=$currentAlgo->getId()}{if $currentAlgo->getFrom() || $currentAlgo->getLatestDisclosure()->getPublished()} ({if $currentAlgo->getFrom() && $currentAlgo->isFromConfirmed()}since {$currentAlgo->getFrom()|date:'F Y'}{/if}{if $currentAlgo->getFrom() && $currentAlgo->isFromConfirmed() && $currentAlgo->getLatestDisclosure()->getPublished()}, {/if}{if $currentAlgo->getLatestDisclosure()->getPublished()}disclosed {$currentAlgo->getLatestDisclosure()->getPublished()|date:'F Y'}{/if}){/if}">
{else}
Expand Down
2 changes: 1 addition & 1 deletion site/app/Training/DateList/trainingApplicationsList.latte
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
{/ifset}
{else}{/ifset}
{/capture}
<small title="{$title|strip}">
<small title="{(string)$title|strip}">
{ifset $application->priceWithCurrency}{$application->priceWithCurrency}{if $application->price > 0 && !isset($application->paid)} <strong>!</strong>{/if}{else}{/ifset}
</small>
</td>
Expand Down
40 changes: 40 additions & 0 deletions site/app/Training/Discontinued/DiscontinuedTraining.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php
declare(strict_types = 1);

namespace MichalSpacekCz\Training\Discontinued;

class DiscontinuedTraining
{

/**
* @param list<string> $trainings
*/
public function __construct(
private readonly string $description,
private readonly array $trainings,
private readonly string $newHref,
) {
}


public function getDescription(): string
{
return $this->description;
}


/**
* @return list<string>
*/
public function getTrainings(): array
{
return $this->trainings;
}


public function getNewHref(): string
{
return $this->newHref;
}

}
86 changes: 86 additions & 0 deletions site/app/Training/Discontinued/DiscontinuedTrainings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?php
declare(strict_types = 1);

namespace MichalSpacekCz\Training\Discontinued;

use MichalSpacekCz\ShouldNotHappenException;
use Nette\Database\Explorer;

class DiscontinuedTrainings
{

public function __construct(
private readonly Explorer $database,
) {
}


/**
* Get all discontinued trainings with description.
*
* @return list<DiscontinuedTraining>
*/
public function getAllDiscontinued(): array
{
$query = $this->database->fetchAll(
'SELECT
td.id_trainings_discontinued AS id,
td.description,
t.name AS training,
td.href
FROM trainings_discontinued td
JOIN trainings t ON t.key_discontinued = td.id_trainings_discontinued
ORDER BY
td.id_trainings_discontinued,
t.id_training',
);
$trainings = [];
foreach ($query as $row) {
$id = $row->id;
if (!is_int($id)) {
throw new ShouldNotHappenException(sprintf("Discontinued training id is a %s not an integer", get_debug_type($id)));
}
$trainings[$id]['description'] = (string)$row->description;
$trainings[$id]['href'] = (string)$row->href;
if (!isset($trainings[$id]['trainings'])) {
$trainings[$id]['trainings'] = [];
}
$trainings[$id]['trainings'][] = (string)$row->training;
}
$result = [];
foreach ($trainings as $training) {
$result[] = new DiscontinuedTraining($training['description'], $training['trainings'], $training['href']);
}
return $result;
}


/**
* Get discontinued trainings with description.
*
* @param int $id
* @return DiscontinuedTraining|null
*/
public function getDiscontinued(int $id): ?DiscontinuedTraining
{
$query = $this->database->fetchAll(
'SELECT
td.description,
t.name AS training,
td.href
FROM trainings_discontinued td
JOIN trainings t ON t.key_discontinued = td.id_trainings_discontinued
WHERE
td.id_trainings_discontinued = ?
ORDER BY
t.id_training',
$id,
);
$trainings = [];
foreach ($query as $row) {
$trainings[] = $row->training;
}
return empty($row) ? null : new DiscontinuedTraining($row->description, $trainings, $row->href);
}

}
66 changes: 0 additions & 66 deletions site/app/Training/Trainings.php
Original file line number Diff line number Diff line change
Expand Up @@ -245,72 +245,6 @@ public function getActionById(int $id): string
}


/**
* Get all discontinued trainings with description.
*
* @return array<int, array<string, string|string[]>>
*/
public function getAllDiscontinued(): array
{
$result = $this->database->fetchAll(
'SELECT
td.id_trainings_discontinued AS id,
td.description,
t.name AS training,
td.href
FROM trainings_discontinued td
JOIN trainings t ON t.key_discontinued = td.id_trainings_discontinued
ORDER BY
td.id_trainings_discontinued,
t.id_training',
);
$trainings = [];
foreach ($result as $row) {
$id = $row->id;
if (!is_int($id)) {
throw new ShouldNotHappenException(sprintf("Discontinued training id is a %s not an integer", get_debug_type($id)));
}
$trainings[$id]['description'] = (string)$row->description;
$trainings[$id]['href'] = (string)$row->href;
if (!isset($trainings[$id]['trainings'])) {
$trainings[$id]['trainings'] = [];
}
$trainings[$id]['trainings'][] = (string)$row->training;
}
return $trainings;
}


/**
* Get discontinued trainings with description.
*
* @param int $id
* @return array<string, string|string[]>|null
*/
public function getDiscontinued(int $id): ?array
{
$sql = 'SELECT
td.description,
t.name AS training,
td.href
FROM trainings_discontinued td
JOIN trainings t ON t.key_discontinued = td.id_trainings_discontinued
WHERE
td.id_trainings_discontinued = ?
ORDER BY
t.id_training';
$trainings = [];
foreach ($this->database->fetchAll($sql, $id) as $row) {
$trainings[] = $row->training;
}
return (empty($row) ? null : [
'description' => $row->description,
'href' => $row->href,
'trainings' => $trainings,
]);
}


/**
* @param array<int, int> $dateIds
*/
Expand Down
6 changes: 4 additions & 2 deletions site/app/Www/Presenters/CompanyTrainingsPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

use MichalSpacekCz\Formatter\TexyFormatter;
use MichalSpacekCz\Training\CompanyTrainings;
use MichalSpacekCz\Training\Discontinued\DiscontinuedTrainings;
use MichalSpacekCz\Training\Prices;
use MichalSpacekCz\Training\Reviews\TrainingReviews;
use MichalSpacekCz\Training\TrainingLocales;
Expand All @@ -22,6 +23,7 @@ public function __construct(
private readonly TexyFormatter $texyFormatter,
private readonly Trainings $trainings,
private readonly CompanyTrainings $companyTrainings,
private readonly DiscontinuedTrainings $discontinuedTrainings,
private readonly TrainingLocales $trainingLocales,
private readonly TrainingReviews $trainingReviews,
private readonly Prices $prices,
Expand All @@ -35,7 +37,7 @@ public function renderDefault(): void
{
$this->template->pageTitle = $this->translator->translate('messages.title.companytrainings');
$this->template->trainings = $this->trainings->getNames();
$this->template->discontinued = $this->trainings->getAllDiscontinued();
$this->template->discontinued = $this->discontinuedTrainings->getAllDiscontinued();
}


Expand Down Expand Up @@ -69,7 +71,7 @@ public function actionTraining(string $name): void
$this->template->materials = $training->materials;
$this->template->reviews = $this->trainingReviews->getVisibleReviews($training->trainingId, 3);
if ($training->discontinuedId !== null) {
$this->template->discontinued = [$this->trainings->getDiscontinued($training->discontinuedId)];
$this->template->discontinued = [$this->discontinuedTrainings->getDiscontinued($training->discontinuedId)];
$this->httpResponse->setCode(IResponse::S410_Gone);
} else {
$this->template->discontinued = null;
Expand Down
6 changes: 3 additions & 3 deletions site/app/Www/Presenters/HomepagePresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use MichalSpacekCz\Training\CompanyTrainings;
use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesList;
use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesListFactory;
use MichalSpacekCz\Training\Trainings;
use MichalSpacekCz\Training\Discontinued\DiscontinuedTrainings;

class HomepagePresenter extends BasePresenter
{
Expand All @@ -20,8 +20,8 @@ public function __construct(
private readonly Articles $articles,
private readonly Interviews $interviews,
private readonly Talks $talks,
private readonly Trainings $trainings,
private readonly CompanyTrainings $companyTrainings,
private readonly DiscontinuedTrainings $discontinuedTrainings,
private readonly UpcomingTrainingDatesListFactory $upcomingTrainingDatesListFactory,
private readonly ArticleSummaryFactory $articleSummaryFactory,
) {
Expand All @@ -38,7 +38,7 @@ public function renderDefault(): void
$this->template->upcomingTalks = $this->talks->getUpcoming();
$this->template->companyTrainings = $this->companyTrainings->getWithoutPublicUpcoming();
$this->template->interviews = $this->interviews->getAll(5);
$this->template->discontinued = $this->trainings->getAllDiscontinued();
$this->template->discontinued = $this->discontinuedTrainings->getAllDiscontinued();
}


Expand Down
Loading

0 comments on commit b85ad94

Please sign in to comment.