Support calculation of details values via a function instead of an table column
[misc/kostenrechnung] / ajax / ricoUpdateConnection.php
1 <?php
2
3 require_once('../init.php');
4
5 function build_simple_query($details)
6 {
7   if ($_POST['value'] == 0)
8     $sql = sprintf("DELETE FROM %s WHERE %s = %d AND %s = %d", $details['table'],
9                    $details['basecol'], $details['baseval'],
10                    $details['refcol'], $_POST['reference']);
11   else
12     $sql = sprintf("INSERT INTO %s (%s,%s,sys_user,sys_edit) VALUES (%d,%d,'%s',now())", $details['table'],
13                    $details['basecol'], $details['refcol'],
14                    $details['baseval'], $_POST['reference'],
15                    pg_escape_string($_SESSION['sys']['login']));
16
17   return $sql;
18 }
19
20 function build_query($details,$mask)
21 {
22   $where = '';
23   $keys = array_keys($mask['list']);
24   for ($i=0; $i<count($keys); $i++)
25     if (array_key_exists('filter_'.$i, $_POST)) {
26       $filter = explode('|', $_POST['filter_'.$i]);
27       if (strlen($where)) $where .= ' AND ';
28       if ($filter[0] === 'LIKE') $filter[1] = '%'.$filter[1].'%';
29       elseif ($filter[0] === 'EQ') $filter[0] = '=';
30       $where .= sprintf("%s %s '%s'",
31                         empty($mask['list'][$keys[$i]]['sql'])?$keys[$i]:$mask['list'][$keys[$i]]['sql'],
32                         $filter[0], $filter[1]);
33     }
34
35   if ($_POST['value'] == 0)
36     $sql = sprintf("DELETE FROM %s WHERE %s = %d AND %s IN (SELECT %s FROM %s%s%s)",
37                    $details['table'],
38                    $details['basecol'], $details['baseval'],
39                    $details['refcol'], $details['refid'], 
40                    $details['reftable'],
41                    array_key_exists('join', $mask) ? ' JOIN ' . join(' JOIN ', $mask['join']) : '',
42                    strlen($where) ? ' WHERE ' . $where : '');
43   else
44     $sql = sprintf("INSERT INTO %s (%s,%s,sys_user,sys_edit) SELECT %s,%s,'%s',now() FROM %s%s%s",
45                    $details['table'],
46                    $details['basecol'], $details['refcol'],
47                    $details['baseval'], $details['refid'],
48                    pg_escape_string($_SESSION['sys']['login']),
49                    $details['reftable'],
50                    array_key_exists('join', $mask) ? ' JOIN ' . join(' JOIN ', $mask['join']) : '',
51                    strlen($where) ? ' WHERE ' . $where : '');
52
53   return $sql;
54 }
55
56 if (empty($_POST['table']))
57   exit;
58
59 connect_db();
60 if (load_mask(substr($_POST['table'],5)) === false) exit;
61
62 $fields = array_keys($mask['list']);
63 $field = $fields[$_POST['column']];
64
65 if (empty($field)) exit;
66
67 if (!is_array($mask['list'][$field]['update'])) return;
68
69 if (isset($_POST['reference']))
70   $sql = build_simple_query($mask['list'][$field]['update']);
71 else 
72   $sql = build_query($mask['list'][$field]['update'],$mask);
73
74 $sth = pg_query($sql);
75
76 if ($sth === false)
77   error_log($sql . ': ' . pg_last_error());
78
79 ?>