From 46a35ce08da16fcfaacb1c29b723a5eb5b6310ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Thu, 23 Sep 2021 12:25:41 +0200
Subject: [PATCH] Improve/clean some code

---
 config.php          |  8 -------
 public/auth.php     | 18 +++------------
 public/callback.php | 11 ++-------
 public/index.php    | 54 ++++++++++++++-------------------------------
 spotify/spotify.php | 18 +++++++++++++++
 template.php        |  4 +++-
 6 files changed, 42 insertions(+), 71 deletions(-)
 delete mode 100644 config.php
 create mode 100644 spotify/spotify.php

diff --git a/config.php b/config.php
deleted file mode 100644
index af0c491..0000000
--- a/config.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-$parametersFile = __DIR__.'/parameters.php';
-if (!is_file($parametersFile)) {
-  die('Missing parameters file: '.$parametersFile);
-}
-
-require $parametersFile;
diff --git a/public/auth.php b/public/auth.php
index 504c46d..d6145c5 100644
--- a/public/auth.php
+++ b/public/auth.php
@@ -1,26 +1,14 @@
 <?php
-session_start();
+require '../spotify/spotify.php';
 
-require '../vendor/autoload.php';
-require '../config.php';
-
-$session = new SpotifyWebAPI\Session(
-    $CLIENT_ID,
-    $CLIENT_SECRET,
-    $REDIRECT_URI
-);
+$session = new SpotifyWebAPI\Session($CLIENT_ID, $CLIENT_SECRET, $REDIRECT_URI);
 
 $state = $session->generateState();
 
 $_SESSION['state'] = $state;
 
 $options = [
-    'scope' => [
-        'playlist-read-private',
-        'playlist-modify-private',
-        'playlist-modify-public',
-        'user-read-private',
-    ],
+    'scope' => $SPOTIFY_REQUIRED_SCOPES,
     'state' => $state,
 ];
 
diff --git a/public/callback.php b/public/callback.php
index 6fa9e94..bc7f0f3 100644
--- a/public/callback.php
+++ b/public/callback.php
@@ -1,14 +1,7 @@
 <?php
-session_start();
+require '../spotify/spotify.php';
 
-require '../vendor/autoload.php';
-require '../config.php';
-
-$session = new SpotifyWebAPI\Session(
-    $CLIENT_ID,
-    $CLIENT_SECRET,
-    $REDIRECT_URI
-);
+$session = new SpotifyWebAPI\Session($CLIENT_ID, $CLIENT_SECRET, $REDIRECT_URI);
 
 $storedState = $_SESSION['state'];
 $state = $_GET['state'];
diff --git a/public/index.php b/public/index.php
index 51e136a..6cd85fc 100644
--- a/public/index.php
+++ b/public/index.php
@@ -1,50 +1,32 @@
 <?php
-session_start();
-
-require '../vendor/autoload.php';
-require '../config.php';
+require '../spotify/spotify.php';
 
 if (isset($_GET['logout'])) {
     $_SESSION['accessToken'] = '';
     $_SESSION['refreshToken'] = '';
 }
 
-$accessToken = '';
-if (isset($_SESSION['accessToken'])) {
-    $accessToken = $_SESSION['accessToken'];
-}
-$refreshToken = '';
-if (isset($_SESSION['refreshToken'])) {
-    $refreshToken = $_SESSION['refreshToken'];
-}
+$_SESSION['accessToken'] = isset($_SESSION['accessToken']) ? $_SESSION['accessToken'] : '';
+$_SESSION['refreshToken'] = isset($_SESSION['refreshToken']) ? $_SESSION['refreshToken'] : '';
 
-if (!$accessToken) {
+if (!$_SESSION['accessToken']) {
     header('Location: auth.php');
     die();
 }
 
-$session = new SpotifyWebAPI\Session(
-    $CLIENT_ID,
-    $CLIENT_SECRET,
-    $REDIRECT_URI
-);
+$session = new SpotifyWebAPI\Session($CLIENT_ID, $CLIENT_SECRET, $REDIRECT_URI);
 
 // Use previously requested tokens fetched from session
-if ($accessToken) {
-    $session->setAccessToken($accessToken);
-    $session->setRefreshToken($refreshToken);
+if ($_SESSION['accessToken']) {
+    $session->setAccessToken($_SESSION['accessToken']);
+    $session->setRefreshToken($_SESSION['refreshToken']);
 } else {
     // Or request a new access token
-    $session->refreshAccessToken($refreshToken);
+    $session->refreshAccessToken($_SESSION['refreshToken']);
 }
 
 $options = [
-  'scope' => [
-      'playlist-read-private',
-      'playlist-modify-private',
-      'playlist-modify-public',
-      'user-read-private',
-  ],
+  'scope' => $SPOTIFY_REQUIRED_SCOPES,
   'auto_refresh' => true,
 ];
 
@@ -58,23 +40,19 @@ $_SESSION['refreshToken'] = $session->getRefreshToken();
 
 $user = $api->me();
 
-$templateData = [];
-$templateData['user'] = $user;
-$templateData['userImageUrl'] = '';
-if ($user->images[0]) {
-    $templateData['userImageUrl'] = $user->images[0]->url;
-}
+$templateData = [
+  'user' => $user,
+  'playlists' => [],
 
-$templateData['infos'] = [];
-$templateData['errors'] = [];
+  'infos' => [],
+  'errors' => [],
+];
 
 $selectedPlaylistId = '';
 if (isset($_GET['playlist'])) {
     $selectedPlaylistId = $_GET['playlist'];
 }
 
-$templateData['playlists'] = [];
-
 if ($selectedPlaylistId) {
     $playlist = $api->getPlaylist($selectedPlaylistId);
     error_log('Will create new playlist from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".');
diff --git a/spotify/spotify.php b/spotify/spotify.php
new file mode 100644
index 0000000..7a17d83
--- /dev/null
+++ b/spotify/spotify.php
@@ -0,0 +1,18 @@
+<?php
+session_start();
+
+require '../vendor/autoload.php';
+
+$parametersFile = realpath(__DIR__.'/../parameters.php');
+if (!is_file($parametersFile)) {
+  die('Missing parameters file: '.$parametersFile);
+}
+
+require $parametersFile;
+
+$SPOTIFY_REQUIRED_SCOPES = [
+    'playlist-read-private',
+    'playlist-modify-private',
+    'playlist-modify-public',
+    'user-read-private',
+];
diff --git a/template.php b/template.php
index b6b603c..1cfb760 100644
--- a/template.php
+++ b/template.php
@@ -16,7 +16,9 @@
     <div class="col-md-2">
 
       <div class="card">
-        <img src="<?php echo $templateData['userImageUrl']; ?>" class="card-img-top" alt="<?php echo $templateData['user']->display_name; ?>">
+        <?php if (count($templateData['user']->images)) { ?>
+        <img src="<?php echo $templateData['user']->images[0]->url; ?>" class="card-img-top" alt="<?php echo $templateData['user']->display_name; ?>">
+        <?php } ?>
         <div class="card-body">
           <h5 class="card-title"><?php echo $templateData['user']->display_name; ?></h5>
           <a href="<?php echo $templateData['user']->external_urls->spotify; ?>" class="btn btn-primary">View profile</a>
-- 
GitLab