03fca91f9eca41a9a6867ed853f7d356104d8147
[memberdb.git] / index.php
1 <?php
2
3 use MemberDB\Config\Config;
4
5 error_reporting(E_ALL);
6 ini_set('display_errors', 1);
7
8 header('Content-type: text/html; charset=utf-8');
9 date_default_timezone_set('UTC');
10 bcscale(2);
11
12 set_exception_handler(function (Throwable $e) {
13     echo('Caught exception: ' . $e->getMessage());
14     exit();
15 });
16
17 require_once(__DIR__ . '/include/autoload.php');
18
19 if (!file_exists(__DIR__ . '/config.php')) {
20     die('Not configured');
21 }
22
23 $config = Config::getInstance();
24 $config->set(require(__DIR__ . '/config.php'));
25 require_once(__DIR__ . '/include/includes.php');
26
27
28 db_connect();
29
30 $action = 'list_members';
31 if (isset($_GET['action'])) {
32     $action = $_GET['action'];
33 }
34
35 ob_start();
36
37 switch ($action) {
38     case 'list_members'   :
39         action_list_members();
40         break;
41     case 'view_member'    :
42         action_view_member();
43         break;
44     case 'export_email'   :
45         action_export_email();
46         break;
47     case 'create_member'  :
48         action_create_member();
49         break;
50     case 'change_member'  :
51         action_change_member();
52         break;
53     case 'export_ibanhin' :
54         action_export_ibanhin();
55         break;
56     case 'create_event'   :
57         action_create_event();
58         break;
59     case 'change_event'   :
60         action_change_event();
61         break;
62     case 'delete_event'   :
63         action_delete_event();
64         break;
65     case 'create_earnings':
66         action_create_earnings();
67         break;
68     case 'create_earning' :
69         action_create_earning();
70         break;
71     case 'change_earning' :
72         action_change_earning();
73         break;
74     case 'delete_earning' :
75         action_delete_earning();
76         break;
77     case 'create_expense' :
78         action_create_expense();
79         break;
80     case 'change_expense' :
81         action_change_expense();
82         break;
83     case 'delete_expense' :
84         action_delete_expense();
85         break;
86     case 'cryptography'   :
87         action_cryptography();
88         break;
89     case 'fees'           :
90         action_fees();
91         break;
92     case 'directdebit'    :
93         action_directdebit();
94         break;
95     case 'finances'       :
96         action_finances();
97         break;
98     case 'export'         :
99         action_export_payments();
100         break;
101     case 'export_members' :
102         action_export_members();
103         break;
104     default:
105         action_404();
106 }
107
108 $content = ob_get_contents();
109 ob_end_clean();
110
111 ?>
112 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
113         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
114
115 <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
116 <head>
117     <title>Mitgliedsverwaltung - Chaos Computer Club Frankfurt am Main</title>
118     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
119     <style type="text/css">
120         form {
121             line-height: 2em;
122         }
123
124         fieldset {
125             line-height: 2em;
126             border: 1px solid #ccc;
127             margin-bottom: 1em;
128             float: left;
129             border-width: 1px 0 0 0;
130             width: 27em;
131         }
132
133         /*fieldset { border: 1px solid #ccc; margin-bottom: 1em; float:left; border-width: 1px 0 0 0; } */
134         legend {
135             font-size: 1.4em;
136         }
137
138         label {
139             clear: left;
140             display: block;
141             width: 10em;
142             float: left;
143         }
144
145         input, select {
146             display: block;
147             width: 20em;
148             float: left;
149         }
150
151         form small {
152             clear: left;
153             display: block;
154             text-align: right;
155             margin-right: 1.8em;
156             line-height: 1em;
157             margin-bottom: 1.5em;
158         }
159
160         fieldset small {
161             clear: left;
162             display: block;
163             text-align: right;
164             margin-right: 1.8em;
165             line-height: 1em;
166             margin-bottom: 1.5em;
167         }
168
169         .checkbox label {
170             clear: none;
171             margin-left: 0.5em;
172         }
173
174         .checkbox input {
175             clear: left;
176             width: auto;
177         }
178
179         #header {
180             margin: 0;
181             padding: 1px 0;
182             background-color: #464646;
183         }
184
185         #content {
186             font-size: 1.4em;
187         }
188
189         .content {
190             margin: 0 auto;
191             width: 960px;
192         }
193
194         .submit {
195             clear: left;
196         }
197
198         h1 {
199             color: #fff;
200         }
201
202         body {
203             margin: 0;
204             padding: 0;
205             font-family: Arial, Verdana, Tahoma;
206             font-size: 62.5%;
207             color: #333;
208         }
209
210         html {
211             margin: 0;
212             padding: 0;
213         }
214
215         table {
216             border-collapse: collapse;
217             margin-bottom: 1em;
218             border: 1px solid #ccc;
219         }
220
221         th, td {
222             padding: 0.3em 2em 0.3em 0.3em;
223         }
224
225         tr:hover {
226             background-color: #eee;
227         }
228
229         tr.earning {
230             background-color: #efe;
231         }
232
233         tr.expense {
234             background-color: #fee;
235         }
236
237         tr.earning:hover {
238             background-color: #dfd;
239         }
240
241         tr.expense:hover {
242             background-color: #fdd;
243         }
244
245         tr.total {
246             background-color: #eee;
247             font-weight: bold;
248         }
249
250         tr.current {
251             background-color: #eee;
252             font-weight: bold;
253         }
254
255         tr.inactive {
256             color: #999;
257         }
258
259         #earning_form {
260             background-color: #efe;
261         }
262
263         #expense_form {
264             background-color: #fee;
265         }
266
267         th {
268             text-align: left;
269             background-color: #eee;
270             font-weight: normal;
271             border-bottom: 1px solid #ccc;
272         }
273
274         h1, h2, h3, legend {
275             font-family: Georgia, Sans-Serif, Verdana;
276             font-weight: normal;
277             color: #333;
278         }
279
280         #header h1 {
281             font-size: 4em;
282             color: #fff;
283         }
284
285         h2 {
286             font-size: 2.2em;
287         }
288
289         h3 {
290             font-size: 1.8em;
291         }
292
293         #pagemenu {
294             background-color: #e0e0e0;
295             border-top: 1px solid #e4f2fd;
296             font-size: 1.4em;
297         }
298
299         #pagemenu ul {
300             list-style: none;
301             padding: 0px 10px;
302             display: block;
303             margin-top: 6px;
304         }
305
306         #pagemenu li {
307             line-height: 28px;
308             font-weight: bold;
309             display: inline;
310             float: left;
311             margin-left: 5px;
312         }
313
314         #pagemenu li a {
315             display: block;
316             color: #888;
317             background-color: #eee;
318             padding: 0px 20px;
319             text-decoration: none;
320         }
321
322         #pagemenu li a:hover {
323             color: #000;
324             background: #fff;
325         }
326
327         #footer {
328             background-color: #eee;
329             border-top: 1px solid #ddd;
330             height: 50px;
331             margin-top: 3em;
332         }
333
334         .clearfix:after {
335             content: " ";
336             display: block;
337             clear: both;
338             visibility: hidden;
339             line-height: 0;
340             height: 0;
341         }
342
343         .clearfix {
344             display: inline-block;
345         }
346
347         html[xmlns] .clearfix {
348             display: block;
349         }
350
351         * html .clearfix {
352             height: 1%;
353         }
354
355         .log_messages {
356             color: #cc0000;
357         }
358
359         p.error {
360             border: 1px solid #900;
361             padding: 1em;
362             color: #cc0000;
363             background-color: #fff9f9;
364         }
365
366         #content a {
367             text-decoration: none;
368             padding: 0 1px;
369             color: #21759B;
370             border-bottom: 1px solid #ccc;
371         }
372
373         #content a:hover {
374             color: #D54E21;
375             background: #F5D1C5;
376             border-bottom: 1px solid #D54E21;
377         }
378
379         .modal_window {
380             position: absolute;
381             display: none;
382             background-color: #fff;
383             padding: 1em;
384         }
385
386         #mask {
387             position: absolute;
388             top: 0px;
389             left: 0px;
390             height: 100%;
391             width: 100%;
392             display: none;
393             background-color: black;
394         }
395
396         .pagination {
397             text-align: center;
398             margin: 10px 0;
399             font-weight: bold;
400         }
401
402         .pagination .prev {
403             float: left;
404         }
405
406         .pagination .next {
407             float: right;
408         }
409
410     </style>
411     <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
412     <script type="text/javascript" src="js/crypto-js/crypto/crypto-min.js"></script>
413     <script type="text/javascript" src="js/crypto-js/sha1/sha1-min.js"></script>
414     <script type="text/javascript" src="js/crypto-js/hmac/hmac-min.js"></script>
415     <script type="text/javascript" src="js/crypto-js/pbkdf2/pbkdf2-min.js"></script>
416     <script type="text/javascript" src="js/crypto-js/ofb/ofb-min.js"></script>
417     <script type="text/javascript" src="js/crypto-js/aes/aes_modified.js"></script>
418     <script type="text/javascript" src="js/date.js"></script>
419     <script type="text/javascript" src="js/utils.js"></script>
420     <script type="text/javascript" src="js/dtaus.js"></script>
421     <script type="text/javascript" src="js/sepa-CORE.js"></script>
422 </head>
423 <body>
424 <div id="header">
425     <div class="content"><h1>Mitgliedsverwaltung</h1></div>
426 </div>
427 <div id="pagemenu">
428     <ul class="content clearfix">
429         <li><a href="<?= link_to() ?>">Mitglieder</a></li>
430         <li><a href="<?= link_to('finances') ?>">Finanzen</a></li>
431         <li><a href="<?= link_to('fees') ?>">Mitgliedsbeitr&auml;ge</a></li>
432         <li><a href="<?= link_to('directdebit') ?>">Bankeinzug</a></li>
433         <li><a href="<?= link_to('cryptography') ?>">Kryptographie</a></li>
434     </ul>
435 </div>
436 <div id="content" class="content"><?= $content ?></div>
437 <div id="footer"></div>
438 </body>
439 </html>