mirror of
https://github.com/standardebooks/web.git
synced 2025-07-08 15:50:29 -04:00
Show improved project details on placeholder page
This commit is contained in:
parent
7a6a743295
commit
378555d131
7 changed files with 153 additions and 55 deletions
|
@ -45,7 +45,9 @@ use function Safe\shell_exec;
|
|||
* @property string $IndexableText
|
||||
* @property ?EbookPlaceholder $EbookPlaceholder
|
||||
* @property array<Project> $Projects
|
||||
* @property array<Project> $PastProjects
|
||||
* @property ?Project $ProjectInProgress
|
||||
* @property ?Artwork $Artwork
|
||||
*/
|
||||
final class Ebook{
|
||||
use Traits\Accessor;
|
||||
|
@ -127,12 +129,30 @@ final class Ebook{
|
|||
protected ?EbookPlaceholder $_EbookPlaceholder = null;
|
||||
/** @var array<Project> $_Projects */
|
||||
protected array $_Projects;
|
||||
/** @var array<Project> $_PastProjects */
|
||||
protected array $_PastProjects;
|
||||
protected ?Project $_ProjectInProgress;
|
||||
protected ?Artwork $_Artwork;
|
||||
|
||||
// *******
|
||||
// GETTERS
|
||||
// *******
|
||||
|
||||
protected function GetArtwork(): ?Artwork{
|
||||
if(!isset($this->_Artwork)){
|
||||
$this->_Artwork = Db::Query('
|
||||
SELECT
|
||||
*
|
||||
from
|
||||
Artworks
|
||||
where
|
||||
EbookUrl = ?
|
||||
', [preg_replace('/^url:/iu', '', $this->Identifier)], Artwork::class)[0] ?? null;
|
||||
}
|
||||
|
||||
return $this->_Artwork;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<Project>
|
||||
*/
|
||||
|
@ -141,6 +161,8 @@ final class Ebook{
|
|||
$this->_Projects = Db::Query('
|
||||
SELECT *
|
||||
from Projects
|
||||
inner join Ebooks
|
||||
using(EbookId)
|
||||
where EbookId = ?
|
||||
order by Created desc
|
||||
', [$this->EbookId], Project::class);
|
||||
|
@ -158,6 +180,8 @@ final class Ebook{
|
|||
$this->_ProjectInProgress = Db::Query('
|
||||
SELECT *
|
||||
from Projects
|
||||
inner join Ebooks
|
||||
using(EbookId)
|
||||
where EbookId = ?
|
||||
and Status in (?, ?)
|
||||
', [$this->EbookId, Enums\ProjectStatusType::InProgress, Enums\ProjectStatusType::Stalled], Project::class)[0] ?? null;
|
||||
|
@ -167,6 +191,29 @@ final class Ebook{
|
|||
return $this->_ProjectInProgress;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<Project>
|
||||
*/
|
||||
protected function GetPastProjects(): array{
|
||||
if(!isset($this->_PastProjects)){
|
||||
if(!isset($this->EbookId)){
|
||||
$this->_PastProjects = [];
|
||||
}
|
||||
else{
|
||||
$this->_PastProjects = Db::Query('
|
||||
SELECT *
|
||||
from Projects
|
||||
inner join Ebooks
|
||||
using(EbookId)
|
||||
where EbookId = ?
|
||||
and Status in (?, ?)
|
||||
', [$this->EbookId, Enums\ProjectStatusType::Completed, Enums\ProjectStatusType::Abandoned], Project::class);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->_PastProjects;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<GitCommit>
|
||||
*/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?
|
||||
$preheader = $preheader ?? null;
|
||||
$letterhead = $letterhead ?? false;
|
||||
$hasDataTable = $hasDataTable ?? false;
|
||||
$hasAdminTable = $hasAdminTable ?? false;
|
||||
?><!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
@ -190,13 +190,13 @@ $hasDataTable = $hasDataTable ?? false;
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
<? if($hasDataTable){ ?>
|
||||
table.data-table td:first-child{
|
||||
<? if($hasAdminTable){ ?>
|
||||
table.admin-table td:first-child{
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table.data-table td{
|
||||
table.admin-table td{
|
||||
padding: .25em;
|
||||
border: none;
|
||||
}
|
||||
|
|
|
@ -4,56 +4,9 @@
|
|||
* @var string $role
|
||||
* @var User $user
|
||||
*/
|
||||
?><?= Template::EmailHeader(['hasDataTable' => true, 'letterhead' => true]) ?>
|
||||
?><?= Template::EmailHeader(['hasAdminTable' => true, 'letterhead' => true]) ?>
|
||||
<p>You’ve been assigned a new ebook project to <strong><?= $role ?></strong>:</p>
|
||||
<table class="data-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Title:</td>
|
||||
<td><a href="<?= SITE_URL ?><?= $project->Ebook->Url ?>"><?= Formatter::EscapeHtml($project->Ebook->Title) ?></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Producer:</td>
|
||||
<td>
|
||||
<? if($project->ProducerEmail !== null){ ?>
|
||||
<a href="mailto:<?= Formatter::EscapeHtml($project->ProducerEmail) ?>"><?= Formatter::EscapeHtml($project->ProducerName) ?></a>
|
||||
<? }elseif($project->DiscussionUrl !== null){ ?>
|
||||
<a href="<?= Formatter::EscapeHtml($project->DiscussionUrl) ?>"><?= Formatter::EscapeHtml($project->ProducerName) ?></a>
|
||||
<? }else{ ?>
|
||||
<?= Formatter::EscapeHtml($project->ProducerName) ?>
|
||||
<? } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Manager:</td>
|
||||
<td>
|
||||
<a href="<?= SITE_URL ?><?= $project->Manager->Url ?>/projects"><?= Formatter::EscapeHtml($project->Manager->DisplayName) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Reviewer:</td>
|
||||
<td>
|
||||
<a href="<?= SITE_URL ?><?= $project->Reviewer->Url ?>/projects"><?= Formatter::EscapeHtml($project->Reviewer->DisplayName) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<? if($project->VcsUrl !== null){ ?>
|
||||
<tr>
|
||||
<td>Repository:</td>
|
||||
<td>
|
||||
<a href="<?= Formatter::EscapeHtml($project->VcsUrl) ?>"><?= Formatter::EscapeHtml($project->VcsUrlDomain) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<? } ?>
|
||||
<? if($project->DiscussionUrl !== null){ ?>
|
||||
<tr>
|
||||
<td>Discussion:</td>
|
||||
<td>
|
||||
<a href="<?= Formatter::EscapeHtml($project->DiscussionUrl) ?>"><?= Formatter::EscapeHtml($project->DiscussionUrlDomain) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<? } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?= Template::ProjectDetailsTable(['project' => $project, 'useFullyQualifiedUrls' => true, 'showArtworkStatus' => false]) ?>
|
||||
<p>If you’re unable to <?= $role ?> this ebook project, <a href="mailto:<?= EDITOR_IN_CHIEF_EMAIL_ADDRESS ?>">email the Editor-in-Chief</a> and we’ll reassign it.</p>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
73
templates/ProjectDetailsTable.php
Normal file
73
templates/ProjectDetailsTable.php
Normal file
|
@ -0,0 +1,73 @@
|
|||
<?
|
||||
/**
|
||||
* @var Project $project
|
||||
*/
|
||||
|
||||
$useFullyQualifiedUrls = $useFullyQualifiedUrls ?? false;
|
||||
$showTitle = $showTitle ?? true;
|
||||
$showArtworkStatus = $showArtworkStatus ?? true;
|
||||
?>
|
||||
<table class="admin-table">
|
||||
<tbody>
|
||||
<? if($showTitle){ ?>
|
||||
<tr>
|
||||
<td>Title:</td>
|
||||
<td><a href="<? if($useFullyQualifiedUrls){ ?><?= SITE_URL ?><? } ?><?= $project->Ebook->Url ?>"><?= Formatter::EscapeHtml($project->Ebook->Title) ?></a></td>
|
||||
</tr>
|
||||
<? } ?>
|
||||
<tr>
|
||||
<td>Producer:</td>
|
||||
<td>
|
||||
<? if($project->ProducerEmail !== null){ ?>
|
||||
<a href="mailto:<?= Formatter::EscapeHtml($project->ProducerEmail) ?>"><?= Formatter::EscapeHtml($project->ProducerName) ?></a>
|
||||
<? }elseif($project->DiscussionUrl !== null){ ?>
|
||||
<a href="<?= Formatter::EscapeHtml($project->DiscussionUrl) ?>"><?= Formatter::EscapeHtml($project->ProducerName) ?></a>
|
||||
<? }else{ ?>
|
||||
<?= Formatter::EscapeHtml($project->ProducerName) ?>
|
||||
<? } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Manager:</td>
|
||||
<td>
|
||||
<a href="<? if($useFullyQualifiedUrls){ ?><?= SITE_URL ?><? } ?><?= $project->Manager->Url ?>/projects"><?= Formatter::EscapeHtml($project->Manager->DisplayName) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Reviewer:</td>
|
||||
<td>
|
||||
<a href="<? if($useFullyQualifiedUrls){ ?><?= SITE_URL ?><? } ?><?= $project->Reviewer->Url ?>/projects"><?= Formatter::EscapeHtml($project->Reviewer->DisplayName) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<? if($project->VcsUrl !== null){ ?>
|
||||
<tr>
|
||||
<td>Repository:</td>
|
||||
<td>
|
||||
<a href="<?= Formatter::EscapeHtml($project->VcsUrl) ?>"><?= Formatter::EscapeHtml($project->VcsUrlDomain) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<? } ?>
|
||||
<? if($project->DiscussionUrl !== null){ ?>
|
||||
<tr>
|
||||
<td>Discussion:</td>
|
||||
<td>
|
||||
<a href="<?= Formatter::EscapeHtml($project->DiscussionUrl) ?>"><?= Formatter::EscapeHtml($project->DiscussionUrlDomain) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<? } ?>
|
||||
<? if($showArtworkStatus){ ?>
|
||||
<tr>
|
||||
<td>Cover art:</td>
|
||||
<td>
|
||||
<? if($project->Ebook->Artwork !== null){ ?>
|
||||
<i>
|
||||
<a href="<?= $project->Ebook->Artwork->Url ?>"><?= Formatter::EscapeHtml($project->Ebook->Artwork->Name) ?></a>
|
||||
</i> <i>(<?= ucfirst($project->Ebook->Artwork->Status->value) ?>.)</i>
|
||||
<? }else{ ?>
|
||||
<i>None.</i>
|
||||
<? } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<? } ?>
|
||||
</tbody>
|
||||
</table>
|
|
@ -3296,6 +3296,7 @@ ol.ebooks-list > li.ribbon.not-pd a::after{
|
|||
content: "not p.d. yet";
|
||||
}
|
||||
|
||||
p + table.admin-table,
|
||||
h2 + table.admin-table{
|
||||
margin-top: .5rem;
|
||||
}
|
||||
|
|
|
@ -125,7 +125,31 @@ catch(Exceptions\EbookNotFoundException){
|
|||
<? } ?>
|
||||
|
||||
<? if(Session::$User?->Benefits->CanEditProjects || Session::$User?->Benefits->CanManageProjects || Session::$User?->Benefits->CanReviewProjects){ ?>
|
||||
<?= Template::EbookProjects(['ebook' => $ebook, 'showAddButton' => Session::$User->Benefits->CanEditProjects && $ebook->ProjectInProgress === null, 'showEditButton' => Session::$User->Benefits->CanEditProjects]) ?>
|
||||
<? if($ebook->ProjectInProgress !== null){ ?>
|
||||
<section id="projects">
|
||||
<h2>Project in progress</h2>
|
||||
<? if(Session::$User->Benefits->CanEditProjects){ ?>
|
||||
<p>
|
||||
<a href="<?= $ebook->ProjectInProgress->EditUrl ?>">Edit project</a>
|
||||
</p>
|
||||
<? } ?>
|
||||
<?= Template::ProjectDetailsTable(['project' => $ebook->ProjectInProgress, 'showTitle' => false]) ?>
|
||||
</section>
|
||||
<? } ?>
|
||||
|
||||
<section id="projects">
|
||||
<h2>Past projects</h2>
|
||||
<? if(Session::$User->Benefits->CanEditProjects && $ebook->ProjectInProgress === null){ ?>
|
||||
<p>
|
||||
<a href="<?= $ebook->Url ?>/projects/new">New project</a>
|
||||
</p>
|
||||
<? } ?>
|
||||
<? if(sizeof($ebook->PastProjects) == 0){ ?>
|
||||
<p class="empty-notice">None.</p>
|
||||
<? }else{ ?>
|
||||
<?= Template::ProjectsTable(['projects' => $ebook->PastProjects, 'includeTitle' => false, 'showEditButton' => Session::$User->Benefits->CanEditProjects]) ?>
|
||||
<? } ?>
|
||||
</section>
|
||||
<? } ?>
|
||||
</article>
|
||||
</main>
|
||||
|
|
|
@ -74,7 +74,7 @@ catch(Exceptions\InvalidPermissionsException){
|
|||
|
||||
<? if(isset($createdEbook)){ ?>
|
||||
<? if($isOnlyProjectCreated){ ?>
|
||||
<p class="message success">An ebook placeholder <a href="<?= $createdEbook->Url ?>">already exists</a> for this ebook, but a a new project was created!</p>
|
||||
<p class="message success">An ebook placeholder <a href="<?= $createdEbook->Url ?>">already exists</a> for this ebook, but a new project was created!</p>
|
||||
<? }elseif($isCreated){ ?>
|
||||
<p class="message success">Ebook placeholder created: <a href="<?= $createdEbook->Url ?>"><?= Formatter::EscapeHtml($createdEbook->Title) ?></a>!</p>
|
||||
<? } ?>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue