Support option values as strings as well
[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,$data)
21 {
22   $where = '';
23   for ($i=0; $i<count($data); $i++)
24     if (array_key_exists('filter_'.$i, $_POST)) {
25       $filter = explode('%', $_POST['filter_'.$i]);
26       if (strlen($where)) $where .= ' AND ';
27       if ($filter[0] === 'LIKE') $filter[1] = '%'.$filter[1].'%';
28       elseif ($filter[0] === 'EQ') $filter[0] = '=';
29       $where .= sprintf("%s %s '%s'", $data[$i]['name'], $filter[0], $filter[1]);
30     }
31
32   if ($_POST['value'] == 0)
33     $sql = sprintf("DELETE FROM %s WHERE %s = %d AND %s IN (SELECT %s FROM %s%s)",
34                    $details['table'],
35                    $details['basecol'], $details['baseval'],
36                    $details['refcol'], $details['refid'], 
37                    $details['reftable'],
38                    strlen($where) ? ' ' . $where : '');
39   else
40     $sql = sprintf("INSERT INTO %s (%s,%s,sys_user,sys_edit) SELECT %s,%s,'%s',now() FROM %s%s",
41                    $details['table'],
42                    $details['basecol'], $details['refcol'],
43                    $details['baseval'], $details['refid'],
44                    pg_escape_string($_SESSION['sys']['login']),
45                    $details['reftable'],
46                    strlen($where) ? ' ' . $where : '');
47
48   return $sql;
49 }
50
51 if (empty($_POST['table']))
52   exit;
53
54 connect_db();
55 if (load_mask(substr($_POST['table'],5)) === false) exit;
56
57 $fields = array_keys($mask['list']);
58 $field = $fields[$_POST['column']];
59
60 if (empty($field)) exit;
61
62 if (!is_array($mask['list'][$field]['update'])) return;
63
64 if (isset($_POST['reference']))
65   $sql = build_simple_query($mask['list'][$field]['update']);
66 else 
67   $sql = build_query($mask['list'][$field]['update'],$mask['list']);
68
69 $sth = pg_query($sql);
70
71 if ($sth === false)
72   error_log($sql . ': ' . pg_last_error());
73
74 ?>