Commit 29f9bcd3 authored by Andreas Heimann's avatar Andreas Heimann

add chart publication status

parent 6df5bc51
......@@ -112,12 +112,20 @@
border: 0px;
transition: 0.2s ease-in-out background, 0.2s ease-in-out color;
}
.box .tags-input .tags-field select:not(:disabled):hover,
.box .input .tags-field select:not(:disabled):hover,
.box .tags-input .tags-field input[type="text"]:not(:disabled):hover,
.box .input .tags-field input[type="text"]:not(:disabled):hover,
.box .tags-input .tags-field textarea:not(:disabled):hover,
.box .input .tags-field textarea:not(:disabled):hover {
.box .tags-input .tags-field select:hover,
.box .input .tags-field select:hover,
.box .tags-input .tags-field input[type="text"]:hover,
.box .input .tags-field input[type="text"]:hover,
.box .tags-input .tags-field textarea:hover,
.box .input .tags-field textarea:hover {
cursor: pointer;
}
.box .tags-input .tags-field select:not(:disabled):not(select):hover,
.box .input .tags-field select:not(:disabled):not(select):hover,
.box .tags-input .tags-field input[type="text"]:not(:disabled):not(select):hover,
.box .input .tags-field input[type="text"]:not(:disabled):not(select):hover,
.box .tags-input .tags-field textarea:not(:disabled):not(select):hover,
.box .input .tags-field textarea:not(:disabled):not(select):hover {
background: rgba(255, 255, 255, 0.4);
color: #fff;
cursor: text;
......@@ -200,3 +208,4 @@
border-color: #c5414c;
color: #c5414c;
}
/*# sourceMappingURL=upload.css.map */
\ No newline at end of file
{"version":3,"sources":["upload.less"],"names":[],"mappings":"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","file":"upload.css"}
\ No newline at end of file
......@@ -110,7 +110,10 @@
border: 0px;
transition: 0.2s ease-in-out background, 0.2s ease-in-out color;
&:not(:disabled):hover {
&:hover {
cursor: pointer;
}
&:not(:disabled):not(select):hover {
background: rgba(255,255,255,0.4);
color: #fff;
cursor: text;
......
......@@ -117,7 +117,8 @@ class APIDiscoveryController extends AbstractController
// Users
$resultsUsers = $em->getRepository(User::class)->createQueryBuilder('o')
->where('o.username LIKE :query')
->where('o.publicationStatus IN (0, 1)')
->andWhere('o.username LIKE :query')
->orderBy('o.id', 'DESC')
->setParameter('query', '%'.$searchQuery.'%')
->getQuery()
......@@ -141,7 +142,8 @@ class APIDiscoveryController extends AbstractController
// Songs
$resultsSongs = $em->getRepository(Song::class)->createQueryBuilder('o')
->where('o.title LIKE :query')
->where('o.publicationStatus IN (0, 1)')
->andWhere('o.title LIKE :query')
->orWhere('o.subtitle LIKE :query')
->orWhere('o.tags LIKE :query')
->orWhere('o.artist LIKE :query')
......
......@@ -29,7 +29,7 @@ class APISongPlaylistController extends AbstractController
$em = $this->getDoctrine()->getManager();
$data = [];
$result = $em->getRepository(SongPlaylist::class)->findOneBy(array('id' => $id));
$result = $em->getRepository(SongPlaylist::class)->findOneBy(array('id' => $id, 'publicationStatus' => array(0, 1, 2)));
$baseUrl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
if(!$result) {
......
......@@ -48,7 +48,7 @@ class APIUserController extends AbstractController
}
// Get User Lists
$resultsSongs = $em->getRepository(Song::class)->findBy(array('uploader' => $result->getId()), array('uploadDate' => 'DESC'));
$resultsSongs = $em->getRepository(Song::class)->findBy(array('uploader' => $result->getId(), 'publicationStatus' => array(0, 1)), array('uploadDate' => 'DESC'));
$resultsReviews = $em->getRepository(SongReview::class)->findBy(array('user' => $result->getId()), array('reviewDate' => 'DESC'));
$resultsSpinPlays = $em->getRepository(SongSpinPlay::class)->findBy(array('user' => $result->getId(), 'isActive' => true), array('submitDate' => 'DESC'));
$resultsCards = $em->getRepository(UserCard::class)->findBy(array('user' => $result->getId()), array('givenDate' => 'DESC'));
......
......@@ -4,6 +4,7 @@ namespace App\Controller;
use App\Entity\SongPlaylist;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
......@@ -214,6 +215,7 @@ class SongController extends AbstractController
->add('tags', TextType::class, ['label' => 'Tags', 'row_attr' => array('class' => 'tags-field'), 'required' => false, 'data' => $song->getTags()])
->add('description', TextareaType::class, ['label' => 'Description', 'attr' => array('rows' => 5), 'row_attr' => array('class' => 'tags-field'), 'required' => false, 'data' => $song->getDescription()])
->add('isExplicit', CheckboxType::class, ['label' => 'Is the song explicit?', 'row_attr' => array('class' => "tags-field"), 'required' => false, 'data' => $song->getIsExplicit()])
->add('publicationStatus', ChoiceType::class, ['label' => 'Publication Status', 'row_attr' => array('class' => "tags-field"), 'required' => true, 'choices' => ['Public' => 0, 'Hide from lists' => 1, 'Unlisted' => 2]])
->add('save', SubmitType::class, ['label' => 'Upload'])
->getForm();
......@@ -229,6 +231,7 @@ class SongController extends AbstractController
$song->setTags($data['tags']);
$song->setDescription($data['description']);
$song->setIsExplicit($data['isExplicit']);
$song->setPublicationStatus($data['publicationStatus']);
if($backupFile) {
$zip = new \ZipArchive;
......
......@@ -11,6 +11,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
......@@ -35,6 +36,7 @@ class UploadController extends AbstractController
->add('tags', TextType::class, ['label' => 'Tags', 'row_attr' => array('class' => 'tags-field'), 'required' => false])
->add('description', TextareaType::class, ['label' => 'Description', 'attr' => array('rows' => 5), 'row_attr' => array('class' => 'tags-field'), 'required' => false])
->add('isExplicit', CheckboxType::class, ['label' => 'Is the song explicit?', 'row_attr' => array('class' => "tags-field"), 'required' => false])
->add('publicationStatus', ChoiceType::class, ['label' => 'Publication Status', 'row_attr' => array('class' => "tags-field"), 'required' => true, 'choices' => ['Public' => 0, 'Hide from lists' => 1, 'Unlisted' => 2]])
->add('save', SubmitType::class, ['label' => 'Upload'])
->getForm();
$form->handleRequest($request);
......@@ -52,6 +54,7 @@ class UploadController extends AbstractController
$song->setDescription($data['description']);
$song->setUploadDate(new \DateTime('NOW'));
$song->setIsExplicit($data['isExplicit']);
$song->setPublicationStatus($data['publicationStatus']);
$zip = new ZipArchive;
if($zip->open($backupFile)) {
......
......@@ -52,7 +52,13 @@ class UserController extends AbstractController
$resultUser = $em->getRepository(User::class)->findOneBy(array('id' => $userId));
if(!$resultUser) throw new NotFoundHttpException();
if($user == $resultUser) {
$resultCharts = $em->getRepository(Song::class)->findBy(array('uploader' => $resultUser->getId()), array('uploadDate' => 'DESC'));
} else {
$resultCharts = $em->getRepository(Song::class)->findBy(array('uploader' => $resultUser->getId(), 'publicationStatus' => array(0, 1)), array('uploadDate' => 'DESC'));
}
$resultPlaylists = $em->getRepository(SongPlaylist::class)->findBy(array('user' => $resultUser->getId()), array('id' => 'DESC'));
$resultReviews = $em->getRepository(SongReview::class)->findBy(array('user' => $resultUser->getId()), array('reviewDate' => 'DESC'));
$resultSpinPlays = $em->getRepository(SongSpinPlay::class)->findBy(array('isActive' => true, 'user' => $resultUser->getId()), array('submitDate' => 'DESC'));
......
......@@ -69,6 +69,11 @@ class Song
*/
private $isExplicit;
/**
* @ORM\Column(type="integer", nullable=true, options={"default": 0})
*/
private $publicationStatus;
/**
* @ORM\Column(type="boolean")
*/
......@@ -256,6 +261,18 @@ class Song
return $this;
}
public function getPublicationStatus(): ?int
{
return $this->publicationStatus;
}
public function setPublicationStatus(int $publicationStatus): self
{
$this->publicationStatus = $publicationStatus;
return $this;
}
public function getHasEasyDifficulty(): ?bool
{
return $this->hasEasyDifficulty;
......@@ -415,6 +432,7 @@ class Song
'views' => $this->views,
'downloads' => $this->downloads,
'isExplicit' => $this->isExplicit,
'publicationStatus' => $this->publicationStatus,
'hasEasyDifficulty' => $this->hasEasyDifficulty,
'hasNormalDifficulty' => $this->hasNormalDifficulty,
'hasHardDifficulty' => $this->hasHardDifficulty,
......
......@@ -22,6 +22,7 @@ class SongRepository extends ServiceEntityRepository
public function getNew(int $page) {
$qb = $this->createQueryBuilder("e");
$qb
->where('e.publicationStatus = 0')
->orderBy('e.uploadDate', 'DESC')
->setFirstResult(12 * $page)
->setMaxResults(12);
......@@ -31,7 +32,8 @@ class SongRepository extends ServiceEntityRepository
public function getHot(int $page) {
$qb = $this->createQueryBuilder("e");
$qb
->where('e.uploadDate <= :begin')
->where('e.publicationStatus = 0')
->andWhere('e.uploadDate <= :begin')
->andWhere('e.uploadDate >= :end')
->orderBy('e.downloads', 'DESC')
->addOrderBy('e.views', 'DESC')
......@@ -43,12 +45,6 @@ class SongRepository extends ServiceEntityRepository
}
public function getPopular(int $page) {
$qb = $this->createQueryBuilder("e");
$qb
->orderBy('e.downloads', 'DESC')
->addOrderBy('e.views', 'DESC')
->setFirstResult(12 * $page)
->setMaxResults(12);
return $qb->getQuery()->getResult();
return [];
}
}
......@@ -25,6 +25,10 @@
<div class="tags-input">
{{ form_row(uploadForm.description) }}
</div>
<div class="tags-input">
{{ form_row(uploadForm.publicationStatus) }}
<div class="input-notice">"Hide from lists" hides your chart from "New" and "Top".<br />"Unlisted" also hides it from the search and your profile (but not from playlists).</div>
</div>
<div class="tags-input">
{{ form_row(uploadForm.isExplicit) }}
<div class="input-notice">Are the lyrics, cover or any other meta data of this song unsuitable for children and/or not safe for work?</div>
......
......@@ -33,6 +33,10 @@
{{ form_row(uploadForm.tags) }}
<div class="input-notice">Add multiple tags by seperating them with a comma. (eg: "Memes,Funny,Osu")</div>
</div>
<div class="tags-input">
{{ form_row(uploadForm.publicationStatus) }}
<div class="input-notice">"Hide from lists" hides your chart from "New" and "Top".<br />"Unlisted" also hides it from the search and your profile (but not from playlists).</div>
</div>
<div class="tags-input">
{{ form_row(uploadForm.isExplicit) }}
<div class="input-notice">Are the lyrics, cover or any other meta data of this song unsuitable for children and/or not safe for work?</div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment