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