You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

148 lines
4.1 KiB

<?php
use App\Enumerators\SessionElement;
use App\Wrappers\DatabaseInteractions;
use App\Wrappers\SessionWrapper;
use App\Wrappers\SQLQueryBuilderWrapper;
use App\Wrappers\TwigWrapper;
require_once __DIR__ . "/../../vendor/autoload.php";
$db = new DatabaseInteractions();
$tuneDetails = $db->RunOneSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE(
table: 'Tunes',
id: $_GET["tune-id"]
)
->cols(cols: [
'SUM(CASE WHEN T_TR.Rating = 1 THEN 1 ELSE 0 END) AS Likes',
'SUM(CASE WHEN T_TR.Rating = -1 THEN 1 ELSE 0 END) AS Dislikes',
])
->join(
join: 'LEFT',
spec: 'TuneRatings AS T_TR',
cond: 'T.ID=T_TR.TuneID',
)
);
$setsThisTuneIsIn = $db->RunSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT(
table: 'TuneSetTunes'
)
->cols(cols: [
'T_TS.ID AS TuneSetID',
'T_TS.Description AS TuneSetName',
])
->join(
join: 'INNER',
spec: 'TuneSets AS T_TS',
cond: 'T.TuneSetID=T_TS.ID',
)
->where(cond: 'T.TuneID LIKE :__tune_id__')
->bindValue(name: '__tune_id__', value: $_GET["tune-id"])
->groupBy(spec: [
'T.TuneSetID',
])
);
$myVote = 0;
if(SessionWrapper::Get(SessionElement::IS_LOGGED_IN))
{
$myVote = $db->RunSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT(
table: 'TuneRatings',
)
->cols(cols: [
'Rating'
])
->where(cond: 'CreatedBy=:__user_id__')
->where(cond: 'TuneID=:__tune_id__')
->bindValue(name: '__user_id__', value: SessionWrapper::Get(SessionElement::USER_ID))
->bindValue(name: '__tune_id__', value: $_GET["tune-id"])
);
if($myVote == [])
$myVote = 0;
else
{
$myVote = $myVote[0]['Rating'];
}
}
$tuneParts = $db->RunSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT(
table: 'TuneParts',
)
->where(cond: 'T.TuneID=:__tune_id__')
->bindValue(name: '__tune_id__', value: $tuneDetails['ID'])
);
$similarTuneParts = [];
foreach($tuneParts as $tunePartDetails)
{
$similarTunesA = $db->RunSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT(
table: 'SimilarTuneParts',
)
->cols(cols: [
'T_T.ID AS TuneID',
'T_T.Title AS TuneTitle',
'T_TP.PartLetter AS TunePartLetter',
])
->join(
join: 'INNER',
spec: 'TuneParts AS T_TP',
cond: 'T.TunePartB=T_TP.ID',
)
->join(
join: 'INNER',
spec: 'Tunes AS T_T',
cond: 'T_TP.TuneID=T_T.ID',
)
->where(cond: 'T.TunePartA=:__tune_part_id__')
->bindValue(name: '__tune_part_id__', value: $tunePartDetails['ID'])
);
$similarTunesB = $db->RunSelect(
queryBuilder: SQLQueryBuilderWrapper::SELECT(
table: 'SimilarTuneParts',
)
->cols(cols: [
'T_T.ID AS TuneID',
'T_T.Title AS TuneTitle',
'T_TP.PartLetter AS TunePartLetter',
])
->join(
join: 'INNER',
spec: 'TuneParts AS T_TP',
cond: 'T.TunePartA=T_TP.ID',
)
->join(
join: 'INNER',
spec: 'Tunes AS T_T',
cond: 'T_TP.TuneID=T_T.ID',
)
->where(cond: 'T.TunePartB=:__tune_part_id__')
->bindValue(name: '__tune_part_id__', value: $tunePartDetails['ID'])
);
$builder = [];
foreach($similarTunesA as $temp)
$builder[] = $temp;
foreach($similarTunesB as $temp)
$builder[] = $temp;
$similarTuneParts[$tunePartDetails['PartLetter']] = $builder;
}
TwigWrapper::RenderTwig(
target: "Pages/tune/uuid.html.twig",
arguments: [
"TuneDetails"=>$tuneDetails,
"SetsThisTuneIsIn" => $setsThisTuneIsIn,
"MyVote"=>$myVote,
"SimilarTuneParts"=>$similarTuneParts,
]
);