7c5d5f35e196a73e909a7f63d1b8a646a40a7dca
[misc/kostenrechnung] / lib / general.php
1 <?php
2
3 function passwd($login,$pass)
4 {
5   return md5(md5($pass).$login);
6 }
7
8 function format_ajax($data)
9 {
10   header('Content-type: application/json; charset=UTF-8');
11   echo json_encode($data);
12   exit;
13 }
14
15 function check_permissions($name)
16 {
17   $sql = sprintf("SELECT count(*) AS count FROM sys_mask "
18                  . "JOIN sys_menu ON sys_mask.menu = sys_menu.id "
19                  . "JOIN sys_group_mask ON sys_mask.id = sys_group_mask.mask "
20                  . "WHERE sys_group_mask.gid = %d AND fname = '%s'",
21                  $_SESSION['sys']['group'], pg_escape_string($name));
22   error_log($sql);
23
24   $sth = pg_query($sql);
25
26   if ($sth === false) return false;
27
28   $row = pg_fetch_assoc($sth);
29   if ($row === false) return false;
30
31   if ($row['count'] == 0)
32     return false;
33
34   return true;
35 }
36
37 function check_session()
38 {
39   if (!empty($_SESSION['sys']['login']) && !empty($_GET['logout'])) {
40     session_destroy();
41     header('Location: ./?login=true');
42     exit();
43   }
44
45   if (substr($_SERVER["SCRIPT_FILENAME"],-10) == '/index.php' &&
46       !empty($_POST['login']) && !empty($_POST['passwd'])) {
47     require_once('lib/login.php');
48     if (check_passwd()) {
49       header('Location: ./');
50       exit();
51     }
52   }
53
54   if (empty($_SESSION['sys']['login']) && empty($_GET['login'])) {
55     header('Location: ./?login=true');
56     exit();
57   }
58
59   /* regular mask */
60   if (!empty($_GET['mask'])) {
61     if (check_permissions($_GET['mask']))
62       return true;
63     else {
64       header('Location: ./');
65       exit();
66     }
67   }
68
69   /* table data */
70   if (substr($_SERVER["SCRIPT_FILENAME"],-17) == '/ricoXMLquery.php' &&
71       !empty($_GET['id']) && substr($_GET['id'],0,5) == 'grid_') {
72     if (check_permissions(substr($_GET['id'],5)))
73       return true;
74     else
75       format_ajax(array('error' => 'No permission to access data'));
76   }
77
78   /* table connections */
79   if (substr($_SERVER["SCRIPT_FILENAME"],-25) == '/ricoUpdateConnection.php' &&
80       !empty($_POST['table'])) {
81     if (check_permissions($_POST['table']))
82       return true;
83     else
84       format_ajax(array('error' => 'No permission to access data'));
85   }
86
87   /* ajax calls */
88   if (substr($_SERVER["SCRIPT_FILENAME"],-9) == '/ajax.php' &&
89       !empty($_POST['source'])) {
90     if (check_permissions(substr($_POST['source'],5)))
91       return true;
92     else
93       format_ajax(array('error' => 'No permission to access data'));
94   }
95
96 }
97
98 function sanitise_filename($file)
99 {
100   return str_replace('./','x',$file);
101 }
102
103 function load_mask($name)
104 {
105   global $mask;
106   global $jscode;
107
108   $name = sanitise_filename($name);
109   $file = $_SESSION['sys']['basedir'] . 'masks/' . $name . '.php';
110
111   if (!file_exists($file))
112     return false;
113
114   include_once($file);
115
116   return true;
117 }
118
119 function connect_db()
120 {
121   $dsn = sprintf('host=%s dbname=%s user=%s password=%s',DBHOST,DBNAME,DBUSER,DBPASS);
122   pg_connect($dsn);
123 }
124
125 function query_db($sql)
126 {
127   $sth = pg_query($sql);
128
129   if ($sth === false) return false;
130
131   $result = array();
132   while ($row = pg_fetch_assoc($sth))
133     $result[] = $row;
134
135   return $result;
136 }
137
138 function load_js($jsfiles, $jscode)
139 {
140   $ret = '';
141   foreach ($jsfiles as $file)
142     $ret .= sprintf('<script type="text/javascript" src="%s"></script>'."\n", $file);
143
144   if (!empty($jscode))
145     $ret .= sprintf('<script type="text/javascript">'."\n%s\n</script>\n", implode("\n",$jscode));
146
147   return $ret;
148 }
149
150 function process()
151 {
152   if (!empty($_GET['login'])) {
153     require_once('lib/login.php');
154     return mask_login();
155   }
156
157   if (!empty($_GET['mask'])) {
158     require_once('lib/mask.php');
159     return mask($_GET['mask']);
160   }
161
162   $masks = array('sys_user','sys_group','sys_mask',
163                  'anbaugeraete','arbeitsarten','personal','materialien','gebiet','geraete',
164                  'kostenstellen','materialverbrauch','einsatz');
165   $ret = '';
166   foreach ($masks as $m)
167     $ret .= sprintf('<a href="index.php?mask=%s">%s</a><br>', $m, $m);
168   
169   return $ret;
170 }
171
172 function debug_log($text)
173 {
174   global $debug_info;
175
176   $debug_info .= '<br>' . $text;
177 }
178
179 function debug_info()
180 {
181   global $jsfiles;
182   global $debug_info;
183
184   if (DEBUG !== true) return '';
185
186   $jsfiles[] = 'lib/debug_joey.js';
187
188   $html = '<div style="background: #DDD; margin: 5px; padding-left: 4px; border: 1px solid #AAA;clear:both;">';
189   $html .= "\n<pre>\n\$_SESSION = " . var_export($_SESSION,true) . "\n";
190   $html .= "\n\$_COOKIE = " . var_export($_COOKIE,true) . "\n</pre>\n";
191   $html .= $debug_info;
192   $html .= '</div>';
193   return $html;
194 }
195
196 function grid_sql($name, $mask)
197 {
198   $fields = array();
199   foreach ($mask['list'] as $field => $data) {
200     if (array_key_exists('sql', $data))
201       $fields[] = $data['sql'] . ' AS ' . $field;
202     else
203       $fields[] = $field;
204   }
205
206   $_SESSION['grid_' . $name] = sprintf("SELECT %s FROM %s",
207                                        implode(',', $fields), $mask['table']);
208   if (array_key_exists('join', $mask)) $_SESSION['grid_' . $name] .= ' JOIN ' . join(' JOIN ', $mask['join']);
209   if (array_key_exists('where', $mask)) $_SESSION['grid_' . $name] .= ' WHERE ' . $mask['where'];
210 }
211
212 ?>