Embed meta data into generated screenshot file
[phancap.git] / www / setup.php
1 <?php
2 /**
3  * Check if everything is setup correctly
4  *
5  * PHP version 5
6  *
7  * @category  Tools
8  * @package   Phancap
9  * @author    Christian Weiske <cweiske@cweiske.de>
10  * @copyright 2014 Christian Weiske
11  * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
12  * @link      http://cweiske.de/phancap.htm
13  */
14 namespace phancap;
15 header('HTTP/1.0 500 Internal Server Error');
16
17 if (file_exists(__DIR__ . '/../src/phancap/Autoloader.php')) {
18     include_once __DIR__ . '/../src/phancap/Autoloader.php';
19     Autoloader::register();
20 } else {
21     include_once 'phancap/Autoloader.php';
22 }
23
24 $messages = array();
25
26 $config = new Config();
27 try {
28     $config->load();
29     if ($config->disableSetup) {
30         header('HTTP/1.0 403 Forbidden');
31         header('Content-type: text/plain');
32         echo "Setup check is disabled.\n";
33         exit(1);
34     }
35     $messages[][] = array('ok', 'Base configuration is ok');
36
37     if ($config->access === true) {
38         $messages[][] = array('ok', 'Everyone may access the API');
39     } else if ($config->access === false) {
40         $messages[][] = array('err', 'API access is disabled');
41     } else {
42         $messages[][] = array(
43             'ok',
44             count($config->access) . ' users may access the API'
45         );
46     }
47
48     foreach ($config->cfgFiles as $cfgFile) {
49         $messages[][] = array(
50             'info', 'Possible config file: ' . $cfgFile
51         );
52     }
53     if ($config->cfgFileExists) {
54         $messages[][] = array(
55             'ok', 'Configuration file loaded'
56         );
57     } else {
58         $messages[][] = array(
59             'info', 'No configuration file found'
60         );
61     }
62 } catch (\Exception $e) {
63     $messages[][] = array('err', $e->getMessage());
64 }
65
66 $adapter = array(
67     'Cutycapt'
68 );
69 foreach ($adapter as $classpart) {
70     $class = '\\phancap\\Adapter_' . $classpart;
71     $adapter = new $class();
72     $adapter->setConfig($config);
73     $errors = $adapter->isAvailable();
74     if ($errors === true) {
75         $messages[][] = array(
76             'ok', 'Adapter ' . $classpart . ' is available'
77         );
78     } else {
79         foreach ($errors as $msg) {
80             $messages['Adapter: '. $classpart][] = array('err', $msg);
81         }
82     }
83 }
84
85 if (!function_exists('idn_to_ascii')) {
86     $messages[][] = array(
87         'err', 'Function "idn_to_ascii" is not available'
88     );
89 }
90 if (\System::which('exiftool') === false) {
91     $messages[][] = array(
92         'err', '"exiftool" is not installed'
93     );
94 }
95
96 $out = <<<HTM
97 <!DOCTYPE html>
98 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
99  <head>
100   <title>phancap setup check</title>
101   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
102   <link rel="stylesheet" href="css/bootstrap.min.css"/>
103   <link rel="stylesheet" href="css/bootstrap-theme.min.css"/>
104   <link rel="stylesheet" href="css/phancap.css"/>
105   <meta name="viewport" content="width=device-width, initial-scale=1"/>
106   <style type="text/css">
107     /*
108     li:before {
109         text-align: center;
110         display: inline-block;
111         width: 1em;
112         padding: 0 0.5ex;
113         margin-right: 0.5ex;
114     }
115     li.ok:before {
116         content: '✔';
117         color: green;
118     }
119     li.err:before {
120         content: "✘";
121         color: white;
122         background-color: red;
123     }
124     li.info:before {
125         content: "i";
126         font-weight: bold;
127         color: blue;
128     }
129     */
130   </style>
131  </head>
132  <body>
133   <div class="container">
134    <div class="row">
135     <div class="col-md-2"></div>
136     <div class="col-md-8">
137
138      <div class="page-header">
139       <h1>phancap setup check</h1>
140      </div>
141
142      <ul class="list-group">
143 HTM;
144 $stateMap = array(
145     'ok' => 'success',
146     'info' => 'info',
147     'err' => 'danger'
148 );
149 foreach ($messages as $key => $messages) {
150     if (!is_numeric($key)) {
151         $out .= '<li class="list-group-item">' . htmlspecialchars($key)
152             . '<ul class="list-group">';
153     }
154     foreach ($messages as $data) {
155         list($state, $message) = $data;
156         $out .= '<li class="list-group-item list-group-item-'
157             . $stateMap[$state] . '">';
158         $out .= htmlspecialchars($message);
159         $out .= '</li>' . "\n";
160     }
161     if (!is_numeric($key)) {
162         $out .= '</ul></li>' . "\n";
163     }
164 }
165 $out .= <<<HTM
166      </ul>
167      <p>
168       <a href="./">back</a> to the index
169      </p>
170     </div>
171    </div>
172   </div>
173
174   <div class="container footer">
175    <a href="http://cweiske.de/phancap.htm">phancap</a>,
176    the self-hosted website screenshot service is available under the
177    <a href="http://www.gnu.org/licenses/agpl-3.0.html">
178     <abbr title="GNU Affero General Public License">AGPL</abbr></a>.
179   </div>
180
181  </body>
182 </html>
183 HTM;
184
185 header('HTTP/1.0 200 OK');
186 echo $out;
187 ?>