<?php declare(strict_types=1); class ArtistsTheme extends Themelet { public function get_author_editor_html(string $author): string { $h_author = html_escape($author); return " <tr> <th>Author</th> <td> <span class='view'>$h_author</span> <input class='edit' type='text' name='tag_edit__author' value='$h_author'> </td> </tr> "; } public function sidebar_options(string $mode, ?int $artistID=null, $is_admin=false): void { global $page, $user; $html = ""; if ($mode == "neutral") { $html = "<form method='post' action='".make_link("artist/new_artist")."'> ".$user->get_auth_html()." <input type='submit' name='edit' id='edit' value='New Artist'/> </form>"; } if ($mode == "editor") { $html = "<form method='post' action='".make_link("artist/new_artist")."'> ".$user->get_auth_html()." <input type='submit' name='edit' value='New Artist'/> </form> <form method='post' action='".make_link("artist/edit_artist")."'> ".$user->get_auth_html()." <input type='submit' name='edit' value='Edit Artist'/> <input type='hidden' name='artist_id' value='".$artistID."'> </form>"; if ($is_admin) { $html .= "<form method='post' action='".make_link("artist/nuke_artist")."'> ".$user->get_auth_html()." <input type='submit' name='edit' value='Delete Artist'/> <input type='hidden' name='artist_id' value='".$artistID."'> </form>"; } $html .= "<form method='post' action='".make_link("artist/add_alias")."'> ".$user->get_auth_html()." <input type='submit' name='edit' value='Add Alias'/> <input type='hidden' name='artist_id' value='".$artistID."'> </form> <form method='post' action='".make_link("artist/add_member")."'> ".$user->get_auth_html()." <input type='submit' name='edit' value='Add Member'/> <input type='hidden' name='artist_id' value='".$artistID."'> </form> <form method='post' action='".make_link("artist/add_url")."'> ".$user->get_auth_html()." <input type='submit' name='edit' value='Add Url'/> <input type='hidden' name='artist_id' value='".$artistID."'> </form>"; } if ($html) { $page->add_block(new Block("Manage Artists", $html, "left", 10)); } } public function show_artist_editor($artist, $aliases, $members, $urls) { global $user; $artistName = $artist['name']; $artistNotes = $artist['notes']; $artistID = $artist['id']; // aliases $aliasesString = ""; $aliasesIDsString = ""; foreach ($aliases as $alias) { $aliasesString .= $alias["alias_name"]." "; $aliasesIDsString .= $alias["alias_id"]." "; } $aliasesString = rtrim($aliasesString); $aliasesIDsString = rtrim($aliasesIDsString); // members $membersString = ""; $membersIDsString = ""; foreach ($members as $member) { $membersString .= $member["name"]." "; $membersIDsString .= $member["id"]." "; } $membersString = rtrim($membersString); $membersIDsString = rtrim($membersIDsString); // urls $urlsString = ""; $urlsIDsString = ""; foreach ($urls as $url) { $urlsString .= $url["url"]."\n"; $urlsIDsString .= $url["id"]." "; } $urlsString = substr($urlsString, 0, strlen($urlsString) -1); $urlsIDsString = rtrim($urlsIDsString); $html = ' <form method="POST" action="'.make_link("artist/edited/".$artist['id']).'"> '.$user->get_auth_html().' <table> <tr><td>Name:</td><td><input type="text" name="name" value="'.$artistName.'" /> <input type="hidden" name="id" value="'.$artistID.'" /></td></tr> <tr><td>Alias:</td><td><input type="text" name="aliases" value="'.$aliasesString.'" /> <input type="hidden" name="aliasesIDs" value="'.$aliasesIDsString.'" /></td></tr> <tr><td>Members:</td><td><input type="text" name="members" value="'.$membersString.'" /> <input type="hidden" name="membersIDs" value="'.$membersIDsString.'" /></td></tr> <tr><td>URLs:</td><td><textarea name="urls">'.$urlsString.'</textarea> <input type="hidden" name="urlsIDs" value="'.$urlsIDsString.'" /></td></tr> <tr><td>Notes:</td><td><textarea name="notes">'.$artistNotes.'</textarea></td></tr> <tr><td colspan="2"><input type="submit" value="Submit" /></td></tr> </table> </form> '; global $page; $page->add_block(new Block("Edit artist", $html, "main", 10)); } public function new_artist_composer() { global $page, $user; $html = "<form action=".make_link("artist/create")." method='POST'> ".$user->get_auth_html()." <table> <tr><td>Name:</td><td><input type='text' name='name' /></td></tr> <tr><td>Aliases:</td><td><input type='text' name='aliases' /></td></tr> <tr><td>Members:</td><td><input type='text' name='members' /></td></tr> <tr><td>URLs:</td><td><textarea name='urls'></textarea></td></tr> <tr><td>Notes:</td><td><textarea name='notes'></textarea></td></tr> <tr><td colspan='2'><input type='submit' value='Submit' /></td></tr> </table> "; $page->set_title("Artists"); $page->set_heading("Artists"); $page->add_block(new Block("Artists", $html, "main", 10)); } public function list_artists($artists, $pageNumber, $totalPages) { global $user, $page; $html = "<table id='poolsList' class='zebra'>". "<thead><tr>". "<th>Name</th>". "<th>Type</th>". "<th>Last updater</th>". "<th>Posts</th>"; if (!$user->is_anonymous()) { $html .= "<th colspan='2'>Action</th>"; } // space for edit link $html .= "</tr></thead>"; $deletionLinkActionArray = [ 'artist' => 'artist/nuke/', 'alias' => 'artist/alias/delete/', 'member' => 'artist/member/delete/', ]; $editionLinkActionArray = [ 'artist' => 'artist/edit/', 'alias' => 'artist/alias/edit/', 'member' => 'artist/member/edit/', ]; $typeTextArray = [ 'artist' => 'Artist', 'alias' => 'Alias', 'member' => 'Member', ]; foreach ($artists as $artist) { if ($artist['type'] != 'artist') { $artist['name'] = str_replace("_", " ", $artist['name']); } $elementLink = "<a href='".make_link("artist/view/".$artist['artist_id'])."'>".str_replace("_", " ", $artist['name'])."</a>"; //$artist_link = "<a href='".make_link("artist/view/".$artist['artist_id'])."'>".str_replace("_", " ", $artist['artist_name'])."</a>"; $user_link = "<a href='".make_link("user/".$artist['user_name'])."'>".$artist['user_name']."</a>"; $edit_link = "<a href='".make_link($editionLinkActionArray[$artist['type']].$artist['id'])."'>Edit</a>"; $del_link = "<a href='".make_link($deletionLinkActionArray[$artist['type']].$artist['id'])."'>Delete</a>"; $html .= "<tr>". "<td class='left'>".$elementLink; //if ($artist['type'] == 'member') // $html .= " (member of ".$artist_link.")"; //if ($artist['type'] == 'alias') // $html .= " (alias for ".$artist_link.")"; $html .= "</td>". "<td>".$typeTextArray[$artist['type']]."</td>". "<td>".$user_link."</td>". "<td>".$artist['posts']."</td>"; if (!$user->is_anonymous()) { $html .= "<td>".$edit_link."</td>"; } if ($user->can(Permissions::ARTISTS_ADMIN)) { $html .= "<td>".$del_link."</td>"; } $html .= "</tr>"; } $html .= "</tbody></table>"; $page->set_title("Artists"); $page->set_heading("Artists"); $page->add_block(new Block("Artists", $html, "main", 10)); $this->display_paginator($page, "artist/list", null, $pageNumber, $totalPages); } public function show_new_alias_composer($artistID) { global $user; $html = ' <form method="POST" action='.make_link("artist/alias/add").'> '.$user->get_auth_html().' <table> <tr><td>Alias:</td><td><input type="text" name="aliases" /> <input type="hidden" name="artistID" value='.$artistID.' /></td></tr> <tr><td colspan="2"><input type="submit" value="Submit" /></td></tr> </table> </form> '; global $page; $page->add_block(new Block("Artist Aliases", $html, "main", 20)); } public function show_new_member_composer($artistID) { global $user; $html = ' <form method="POST" action='.make_link("artist/member/add").'> '.$user->get_auth_html().' <table> <tr><td>Members:</td><td><input type="text" name="members" /> <input type="hidden" name="artistID" value='.$artistID.' /></td></tr> <tr><td colspan="2"><input type="submit" value="Submit" /></td></tr> </table> </form> '; global $page; $page->add_block(new Block("Artist members", $html, "main", 30)); } public function show_new_url_composer($artistID) { global $user; $html = ' <form method="POST" action='.make_link("artist/url/add").'> '.$user->get_auth_html().' <table> <tr><td>URL:</td><td><textarea name="urls"></textarea> <input type="hidden" name="artistID" value='.$artistID.' /></td></tr> <tr><td colspan="2"><input type="submit" value="Submit" /></td></tr> </table> </form> '; global $page; $page->add_block(new Block("Artist URLs", $html, "main", 40)); } public function show_alias_editor($alias) { global $user; $html = ' <form method="POST" action="'.make_link("artist/alias/edited/".$alias['id']).'"> '.$user->get_auth_html().' <label for="alias">Alias:</label> <input type="text" name="alias" id="alias" value="'.$alias['alias'].'" /> <input type="hidden" name="aliasID" value="'.$alias['id'].'" /> <input type="submit" value="Submit" /> </form> '; global $page; $page->add_block(new Block("Edit Alias", $html, "main", 10)); } public function show_url_editor($url) { global $user; $html = ' <form method="POST" action="'.make_link("artist/url/edited/".$url['id']).'"> '.$user->get_auth_html().' <label for="url">URL:</label> <input type="text" name="url" id="url" value="'.$url['url'].'" /> <input type="hidden" name="urlID" value="'.$url['id'].'" /> <input type="submit" value="Submit" /> </form> '; global $page; $page->add_block(new Block("Edit URL", $html, "main", 10)); } public function show_member_editor($member) { global $user; $html = ' <form method="POST" action="'.make_link("artist/member/edited/".$member['id']).'"> '.$user->get_auth_html().' <label for="name">Member name:</label> <input type="text" name="name" id="name" value="'.$member['name'].'" /> <input type="hidden" name="memberID" value="'.$member['id'].'" /> <input type="submit" value="Submit" /> </form> '; global $page; $page->add_block(new Block("Edit Member", $html, "main", 10)); } public function show_artist($artist, $aliases, $members, $urls, $images, $userIsLogged, $userIsAdmin) { global $page; $artist_link = "<a href='".make_link("post/list/".$artist['name']."/1")."'>".str_replace("_", " ", $artist['name'])."</a>"; $html = "<table id='poolsList' class='zebra'> <thead> <tr> <th></th> <th></th>"; if ($userIsLogged) { $html .= "<th></th>"; } if ($userIsAdmin) { $html .= "<th></th>"; } $html .= " <tr> </thead> <tr> <td class='left'>Name:</td> <td class='left'>".$artist_link."</td>"; if ($userIsLogged) { $html .= "<td></td>"; } if ($userIsAdmin) { $html .= "<td></td>"; } $html .= "</tr>"; $html .= $this->render_aliases($aliases, $userIsLogged, $userIsAdmin); $html .= $this->render_members($members, $userIsLogged, $userIsAdmin); $html .= $this->render_urls($urls, $userIsLogged, $userIsAdmin); $html .= "<tr> <td class='left'>Notes:</td> <td class='left'>".$artist["notes"]."</td>"; if ($userIsLogged) { $html .= "<td></td>"; } if ($userIsAdmin) { $html .= "<td></td>"; } //TODO how will notes be edited? On edit artist? (should there be an editartist?) or on a editnotes? //same question for deletion $html .= "</tr> </table>"; $page->set_title("Artist"); $page->set_heading("Artist"); $page->add_block(new Block("Artist", $html, "main", 10)); //we show the images for the artist $artist_images = ""; foreach ($images as $image) { $thumb_html = $this->build_thumb_html($image); $artist_images .= '<span class="thumb">'. '<a href="$image_link">'.$thumb_html.'</a>'. '</span>'; } $page->add_block(new Block("Artist Posts", $artist_images, "main", 20)); } private function render_aliases(array $aliases, bool $userIsLogged, bool $userIsAdmin): string { $html = ""; if (count($aliases) > 0) { $aliasViewLink = str_replace("_", " ", $aliases[0]['alias_name']); // no link anymore $aliasEditLink = "<a href='" . make_link("artist/alias/edit/" . $aliases[0]['alias_id']) . "'>Edit</a>"; $aliasDeleteLink = "<a href='" . make_link("artist/alias/delete/" . $aliases[0]['alias_id']) . "'>Delete</a>"; $html .= "<tr> <td class='left'>Aliases:</td> <td class='left'>" . $aliasViewLink . "</td>"; if ($userIsLogged) { $html .= "<td class='left'>" . $aliasEditLink . "</td>"; } if ($userIsAdmin) { $html .= "<td class='left'>" . $aliasDeleteLink . "</td>"; } $html .= "</tr>"; if (count($aliases) > 1) { for ($i = 1; $i < count($aliases); $i++) { $aliasViewLink = str_replace("_", " ", $aliases[$i]['alias_name']); // no link anymore $aliasEditLink = "<a href='" . make_link("artist/alias/edit/" . $aliases[$i]['alias_id']) . "'>Edit</a>"; $aliasDeleteLink = "<a href='" . make_link("artist/alias/delete/" . $aliases[$i]['alias_id']) . "'>Delete</a>"; $html .= "<tr> <td class='left'> </td> <td class='left'>" . $aliasViewLink . "</td>"; if ($userIsLogged) { $html .= "<td class='left'>" . $aliasEditLink . "</td>"; } if ($userIsAdmin) { $html .= "<td class='left'>" . $aliasDeleteLink . "</td>"; } $html .= "</tr>"; } } } return $html; } private function render_members(array $members, bool $userIsLogged, bool $userIsAdmin): string { $html = ""; if (count($members) > 0) { $memberViewLink = str_replace("_", " ", $members[0]['name']); // no link anymore $memberEditLink = "<a href='" . make_link("artist/member/edit/" . $members[0]['id']) . "'>Edit</a>"; $memberDeleteLink = "<a href='" . make_link("artist/member/delete/" . $members[0]['id']) . "'>Delete</a>"; $html .= "<tr> <td class='left'>Members:</td> <td class='left'>" . $memberViewLink . "</td>"; if ($userIsLogged) { $html .= "<td class='left'>" . $memberEditLink . "</td>"; } if ($userIsAdmin) { $html .= "<td class='left'>" . $memberDeleteLink . "</td>"; } $html .= "</tr>"; if (count($members) > 1) { for ($i = 1; $i < count($members); $i++) { $memberViewLink = str_replace("_", " ", $members[$i]['name']); // no link anymore $memberEditLink = "<a href='" . make_link("artist/member/edit/" . $members[$i]['id']) . "'>Edit</a>"; $memberDeleteLink = "<a href='" . make_link("artist/member/delete/" . $members[$i]['id']) . "'>Delete</a>"; $html .= "<tr> <td class='left'> </td> <td class='left'>" . $memberViewLink . "</td>"; if ($userIsLogged) { $html .= "<td class='left'>" . $memberEditLink . "</td>"; } if ($userIsAdmin) { $html .= "<td class='left'>" . $memberDeleteLink . "</td>"; } $html .= "</tr>"; } } } return $html; } private function render_urls(array $urls, bool $userIsLogged, bool $userIsAdmin): string { $html = ""; if (count($urls) > 0) { $urlViewLink = "<a href='" . str_replace("_", " ", $urls[0]['url']) . "' target='_blank'>" . str_replace("_", " ", $urls[0]['url']) . "</a>"; $urlEditLink = "<a href='" . make_link("artist/url/edit/" . $urls[0]['id']) . "'>Edit</a>"; $urlDeleteLink = "<a href='" . make_link("artist/url/delete/" . $urls[0]['id']) . "'>Delete</a>"; $html .= "<tr> <td class='left'>URLs:</td> <td class='left'>" . $urlViewLink . "</td>"; if ($userIsLogged) { $html .= "<td class='left'>" . $urlEditLink . "</td>"; } if ($userIsAdmin) { $html .= "<td class='left'>" . $urlDeleteLink . "</td>"; } $html .= "</tr>"; if (count($urls) > 1) { for ($i = 1; $i < count($urls); $i++) { $urlViewLink = "<a href='" . str_replace("_", " ", $urls[$i]['url']) . "' target='_blank'>" . str_replace("_", " ", $urls[$i]['url']) . "</a>"; $urlEditLink = "<a href='" . make_link("artist/url/edit/" . $urls[$i]['id']) . "'>Edit</a>"; $urlDeleteLink = "<a href='" . make_link("artist/url/delete/" . $urls[$i]['id']) . "'>Delete</a>"; $html .= "<tr> <td class='left'> </td> <td class='left'>" . $urlViewLink . "</td>"; if ($userIsLogged) { $html .= "<td class='left'>" . $urlEditLink . "</td>"; } if ($userIsAdmin) { $html .= "<td class='left'>" . $urlDeleteLink . "</td>"; } $html .= "</tr>"; } return $html; } } return $html; } public function get_help_html(): string { return '<p>Search for posts with a particular artist.</p> <div class="command_example"> <pre>artist=leonardo</pre> <p>Returns posts with the artist "leonardo".</p> </div> '; } }