HTML frontend part 2: game details
[stouyapi.git] / bin / build-html.php
1 <?php
2 /**
3  * Take the generated JSON files and convert them to HTML for a browser
4  *
5  * @author Christian Weiske <cweiske@cweiske.de>
6  */
7 require_once __DIR__ . '/functions.php';
8
9 $wwwDir = __DIR__ . '/../www/';
10 $discoverDir = __DIR__ . '/../www/api/v1/discover-data/';
11 $wwwDiscoverDir = $wwwDir . 'discover/';
12 $gameDetailsDir = __DIR__ . '/../www/api/v1/details-data/';
13 $wwwGameDir = $wwwDir . 'game/';
14
15 if (!is_dir($wwwDiscoverDir)) {
16     mkdir($wwwDiscoverDir, 0755);
17 }
18 if (!is_dir($wwwGameDir)) {
19     mkdir($wwwGameDir, 0755);
20 }
21
22 foreach (glob($gameDetailsDir . '*.json') as $gameDataFile) {
23     $htmlFile = basename($gameDataFile, '.json') . '.htm';
24     file_put_contents(
25         $wwwGameDir . $htmlFile,
26         renderGameFile($gameDataFile)
27     );
28 }
29
30 foreach (glob($discoverDir . '*.json') as $discoverFile) {
31     $htmlFile = basename($discoverFile, '.json') . '.htm';
32     if ($htmlFile == 'discover.htm') {
33         $htmlFile = 'index.htm';
34     }
35     file_put_contents(
36         $wwwDiscoverDir . $htmlFile,
37         renderDiscoverFile($discoverFile)
38     );
39 }
40
41 function renderDiscoverFile($discoverFile)
42 {
43     $json = json_decode(file_get_contents($discoverFile));
44
45     $title    = $json->title;
46     $sections = [];
47     foreach ($json->rows as $row) {
48         $section = (object) [
49             'title' => $row->title,
50             'tiles' => [],
51         ];
52         foreach ($row->tiles as $tileId) {
53             $tileData = $json->tiles[$tileId];
54             if ($tileData->type == 'app') {
55                 $section->tiles[] = (object) [
56                     'type'        => $tileData->type,//app
57                     'thumb'       => $tileData->image,
58                     'title'       => $tileData->title,
59                     'rating'      => $tileData->rating->average,
60                     'ratingCount' => $tileData->rating->count,
61                     'detailUrl'   => '../game/' . str_replace(
62                         'ouya://launcher/details?app=',
63                         '',
64                         $tileData->url
65                     ) . '.htm',
66                 ];
67             } else {
68                 $section->tiles[] = (object) [
69                     'type'        => $tileData->type,//discover
70                     'thumb'       => $tileData->image,
71                     'title'       => $tileData->title,
72                     'detailUrl'   => str_replace(
73                         'ouya://launcher/discover/',
74                         '',
75                         $tileData->url
76                     ) . '.htm',
77                 ];
78             }
79         }
80         $sections[] = $section;
81     }
82
83     $navLinks = [];
84     if ($title == 'DISCOVER') {
85         $navLinks['../'] = 'back';
86     } else {
87         $navLinks['./'] = 'discover';
88     }
89
90     $discoverTemplate = __DIR__ . '/../data/templates/discover.tpl.php';
91     ob_start();
92     include $discoverTemplate;
93     $html = ob_get_contents();
94     ob_end_clean();
95
96     return $html;
97 }
98
99 function renderGameFile($gameDataFile)
100 {
101     $json = json_decode(file_get_contents($gameDataFile));
102     $appsDir = dirname($gameDataFile, 2) . '/apps/';
103     $downloadJson = json_decode(
104         file_get_contents(
105             $appsDir . $json->version->uuid . '-download.json'
106         )
107     );
108     $apkDownloadUrl = $downloadJson->app->downloadLink;
109
110     $navLinks = [];
111     foreach ($json->genres as $genreTitle) {
112         $url = '../discover/' . categoryPath($genreTitle) . '.htm';
113         $navLinks[$url] = $genreTitle;
114     }
115
116     $gameTemplate = __DIR__ . '/../data/templates/game.tpl.php';
117     ob_start();
118     include $gameTemplate;
119     $html = ob_get_contents();
120     ob_end_clean();
121
122     return $html;
123 }
124 ?>