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