Commit 0dfbc506 authored by SpinShare's avatar SpinShare

first features of song detail 2.0.0

parent 3dceb47a
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
"symfony/twig-pack": "*", "symfony/twig-pack": "*",
"symfony/validator": "4.4.*", "symfony/validator": "4.4.*",
"symfony/web-link": "4.4.*", "symfony/web-link": "4.4.*",
"symfony/yaml": "4.4.*" "symfony/yaml": "4.4.*",
"twig/extensions": "^1.5"
}, },
"require-dev": { "require-dev": {
"symfony/debug-pack": "*", "symfony/debug-pack": "*",
......
This diff is collapsed.
services:
_defaults:
public: false
autowire: true
autoconfigure: true
# Uncomment any lines below to activate that Twig extension
#Twig\Extensions\ArrayExtension: null
#Twig\Extensions\DateExtension: null
#Twig\Extensions\IntlExtension: null
#Twig\Extensions\TextExtension: null
This diff is collapsed.
This diff is collapsed.
.section-song-detail .song-detail-background {
background-size: cover;
background-position: center;
}
.section-song-detail .song-detail-background .song-detail-dim {
backdrop-filter: blur(10px);
background: linear-gradient(180deg, rgba(0, 0, 0, 0.4), #212629);
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail {
padding: 50px;
display: grid;
grid-template-columns: 200px 1fr;
grid-gap: 25px;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-cover {
width: 200px;
height: 200px;
position: relative;
align-self: center;
background: #eee;
border-radius: 6px;
background-size: cover;
background-position: center;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-title {
font-weight: bold;
font-size: 48px;
word-break: break-all;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-subtitle {
font-size: 20px;
word-break: break-all;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-artist {
margin-top: 5px;
font-size: 18px;
word-break: break-all;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-charter {
margin-top: 10px;
font-size: 14px;
opacity: 0.6;
word-break: break-all;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-tags {
margin-top: 10px;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-tags .tag {
display: inline-block;
font-size: 12px;
font-weight: bold;
color: #222;
background: #fff;
padding: 5px 20px;
border-radius: 50px;
margin-right: 10px;
margin-top: 5px;
word-break: break-all;
text-decoration: none;
transition: 0.2s ease-in-out opacity;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-tags .tag:hover {
opacity: 0.6;
cursor: pointer;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-difficulties {
margin-top: 15px;
height: 20px;
display: flex;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-difficulties img {
height: 20px;
margin-right: 10px;
opacity: 0.3;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-difficulties img.active {
opacity: 1;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-uploader {
margin-top: 15px;
display: flex;
}
.section-song-detail .song-detail-background .song-detail-dim .song-detail .song-meta-data .song-uploader .user-item {
width: auto;
color: #fff;
text-decoration: none;
padding-right: 15px;
}
.section-song-detail .song-detail-actions,
.section-song-detail .song-detail-actions-owner,
.section-song-detail .song-detail-actions-moderator {
padding: 50px;
padding-top: 0px;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-gap: 25px;
}
.section-song-detail .song-detail-actions.song-detail-actions-owner,
.section-song-detail .song-detail-actions-owner.song-detail-actions-owner,
.section-song-detail .song-detail-actions-moderator.song-detail-actions-owner {
grid-template-columns: 1fr 1fr 1fr 1fr 60px 60px;
}
.section-song-detail .song-detail-actions.song-detail-actions-moderator,
.section-song-detail .song-detail-actions-owner.song-detail-actions-moderator,
.section-song-detail .song-detail-actions-moderator.song-detail-actions-moderator {
grid-template-columns: 1fr 1fr 1fr 1fr 60px;
}
.section-song-detail .song-detail-actions .button,
.section-song-detail .song-detail-actions-owner .button,
.section-song-detail .song-detail-actions-moderator .button {
padding: 15px 0px;
font-size: 16px;
transition: 0.2s ease-in-out background, 0.2s ease-in-out color, 0.1s ease-in-out transform;
}
.section-song-detail .song-detail-actions .button.button-primary,
.section-song-detail .song-detail-actions-owner .button.button-primary,
.section-song-detail .song-detail-actions-moderator .button.button-primary {
background: #fff;
color: #222;
}
.section-song-detail .song-detail-actions .button.button-primary:hover,
.section-song-detail .song-detail-actions-owner .button.button-primary:hover,
.section-song-detail .song-detail-actions-moderator .button.button-primary:hover {
background: #fff;
color: #222;
}
.section-song-detail .song-detail-actions .button.button-icon,
.section-song-detail .song-detail-actions-owner .button.button-icon,
.section-song-detail .song-detail-actions-moderator .button.button-icon {
padding: 11px 0px;
}
.section-song-detail .song-detail-actions .button.button-icon i,
.section-song-detail .song-detail-actions-owner .button.button-icon i,
.section-song-detail .song-detail-actions-moderator .button.button-icon i {
font-size: 20px;
}
.section-song-detail .song-detail-actions .button:hover,
.section-song-detail .song-detail-actions-owner .button:hover,
.section-song-detail .song-detail-actions-moderator .button:hover {
background: rgba(255, 255, 255, 0.2);
color: #fff;
opacity: 0.6;
transform: translateY(-4px);
}
.section-song-detail .song-detail-actions .button:active,
.section-song-detail .song-detail-actions-owner .button:active,
.section-song-detail .song-detail-actions-moderator .button:active {
transform: translateY(-2px);
}
.section-song-detail {
& .song-detail-background {
background-size: cover;
background-position: center;
& .song-detail-dim {
backdrop-filter: blur(10px);
background: linear-gradient(180deg, rgba(0,0,0,0.4), #212629);
& .song-detail {
padding: 50px;
display: grid;
grid-template-columns: 200px 1fr;
grid-gap: 25px;
& .song-cover {
width: 200px;
height: 200px;
position: relative;
align-self: center;
background: #eee;
border-radius: 6px;
background-size: cover;
background-position: center;
}
& .song-meta-data {
& .song-title {
font-weight: bold;
font-size: 48px;
word-break: break-all;
}
& .song-subtitle {
font-size: 20px;
word-break: break-all;
}
& .song-artist {
margin-top: 5px;
font-size: 18px;
word-break: break-all;
}
& .song-charter {
margin-top: 10px;
font-size: 14px;
opacity: 0.6;
word-break: break-all;
}
& .song-tags {
margin-top: 10px;
& .tag {
display: inline-block;
font-size: 12px;
font-weight: bold;
color: #222;
background: #fff;
padding: 5px 20px;
border-radius: 50px;
margin-right: 10px;
margin-top: 5px;
word-break: break-all;
text-decoration: none;
transition: 0.2s ease-in-out opacity;
&:hover {
opacity: 0.6;
cursor: pointer;
}
}
}
& .song-difficulties {
margin-top: 15px;
height: 20px;
display: flex;
& img {
height: 20px;
margin-right: 10px;
opacity: 0.3;
&.active {
opacity: 1;
}
}
}
& .song-uploader {
margin-top: 15px;
display: flex;
& .user-item {
width: auto;
color: #fff;
text-decoration: none;
padding-right: 15px;
}
}
}
}
}
}
& .song-detail-actions, & .song-detail-actions-owner, & .song-detail-actions-moderator {
padding: 50px;
padding-top: 0px;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-gap: 25px;
&.song-detail-actions-owner {
grid-template-columns: 1fr 1fr 1fr 1fr 60px 60px;
}
&.song-detail-actions-moderator {
grid-template-columns: 1fr 1fr 1fr 1fr 60px;
}
& .button {
padding: 15px 0px;
font-size: 16px;
transition: 0.2s ease-in-out background, 0.2s ease-in-out color, 0.1s ease-in-out transform;
&.button-primary {
background: #fff;
color: #222;
&:hover {
background: #fff;
color: #222;
}
}
&.button-icon {
padding: 11px 0px;
& i {
font-size: 20px;
}
}
&:hover {
background: rgba(255,255,255,0.2);
color: #fff;
opacity: 0.6;
transform: translateY(-4px);
}
&:active {
transform: translateY(-2px);
}
}
}
}
\ No newline at end of file
...@@ -15,6 +15,8 @@ use Symfony\Component\Form\Extension\Core\Type\FileType; ...@@ -15,6 +15,8 @@ use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use App\Entity\Song; use App\Entity\Song;
use App\Entity\SongReview;
use App\Entity\SongSpinPlay;
use App\Utils\HelperFunctions; use App\Utils\HelperFunctions;
use App\Entity\User; use App\Entity\User;
...@@ -38,8 +40,11 @@ class SongController extends AbstractController ...@@ -38,8 +40,11 @@ class SongController extends AbstractController
$resultUploader = $em->getRepository(User::class)->findOneBy(array('id' => $resultSong->getUploader())); $resultUploader = $em->getRepository(User::class)->findOneBy(array('id' => $resultSong->getUploader()));
if(!$resultUploader) throw new NotFoundHttpException(); if(!$resultUploader) throw new NotFoundHttpException();
$resultReviewAverage = $em->getRepository(SongReview::class)->getAverageByID($songId);
$data['song'] = $resultSong; $data['song'] = $resultSong;
$data['uploader'] = $resultUploader; $data['uploader'] = $resultUploader;
$data['reviewAverage'] = $resultReviewAverage;
return $this->render('song/detail.html.twig', $data); return $this->render('song/detail.html.twig', $data);
} }
......
...@@ -19,32 +19,25 @@ class SongReviewRepository extends ServiceEntityRepository ...@@ -19,32 +19,25 @@ class SongReviewRepository extends ServiceEntityRepository
parent::__construct($registry, SongReview::class); parent::__construct($registry, SongReview::class);
} }
// /** public function getAveragebyID(int $songId) {
// * @return SongReview[] Returns an array of SongReview objects $qb = $this->createQueryBuilder("e");
// */ $qb
/* ->where('e.song = :songId')
public function findByExampleField($value) ->setParameter('songId', $songId);
{ $reviews = $qb->getQuery()->getResult();
return $this->createQueryBuilder('s')
->andWhere('s.exampleField = :val') $reviewsTotal = 0;
->setParameter('val', $value) $reviewsRecommend = 0;
->orderBy('s.id', 'ASC')
->setMaxResults(10) foreach($reviews as $review) {
->getQuery() if($review->getRecommended()) $reviewsRecommend++;
->getResult() $reviewsTotal++;
;
} }
*/
/* if($reviewsTotal > 1) {
public function findOneBySomeField($value): ?SongReview return round(($reviewsRecommend / $reviewsTotal) * 100, 1);
{ } else {
return $this->createQueryBuilder('s') return false;
->andWhere('s.exampleField = :val') }
->setParameter('val', $value)
->getQuery()
->getOneOrNullResult()
;
} }
*/
} }
...@@ -75,18 +75,6 @@ ...@@ -75,18 +75,6 @@
"doctrine/reflection": { "doctrine/reflection": {
"version": "1.2.1" "version": "1.2.1"
}, },
"easycorp/easy-log-handler": {
"version": "1.0",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "1.0",
"ref": "70062abc2cd58794d2a90274502f81b55cd9951b"
},
"files": [
"./config/packages/dev/easy_log_handler.yaml"
]
},
"egulias/email-validator": { "egulias/email-validator": {
"version": "2.1.17" "version": "2.1.17"
}, },
...@@ -522,6 +510,18 @@ ...@@ -522,6 +510,18 @@
"symfony/yaml": { "symfony/yaml": {
"version": "v4.4.6" "version": "v4.4.6"
}, },
"twig/extensions": {
"version": "1.0",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "1.0",
"ref": "a86723ee8d8b2f9437c8ce60a5546a1c267da5ed"
},
"files": [
"./config/packages/twig_extensions.yaml"
]
},
"twig/extra-bundle": { "twig/extra-bundle": {
"version": "v3.0.3" "version": "v3.0.3"
}, },
......
This diff is collapsed.
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