Support arbitrary callback queries
authorJoey Schulze <joey@infodrom.org>
Thu, 4 Mar 2010 20:40:18 +0000 (21:40 +0100)
committerJoey Schulze <joey@infodrom.org>
Thu, 4 Mar 2010 20:40:18 +0000 (21:40 +0100)
ajax/ajax.php
lib/functions.js

index 74d75e1..9a491c8 100644 (file)
@@ -227,6 +227,25 @@ function set_variable($name,$mask)
   return array('status' => true);
 }
 
+function get_infos($mask)
+{
+  if (!array_key_exists('info',$mask))
+    return array('error' => 'Unknown callback ' . htmlspecialchars($_POST['name']));
+
+  if (!array_key_exists($_POST['name'],$mask['info']))
+    return array('error' => 'Unknown callback ' . htmlspecialchars($_POST['name']));
+
+  if (!array_key_exists('sql',$mask['info'][$_POST['name']]))
+    return array('error' => 'Unknown callback ' . htmlspecialchars($_POST['name']));
+
+  $sql = $mask['info'][$_POST['name']]['sql'];
+
+  while (preg_match('/\{([^\}]*)\}/', $sql, $matches))
+    $sql = str_replace('{'.$matches[1].'}', $_POST[$matches[1]], $sql);
+
+  return array('info' => query_db($sql));
+}
+
 function format_ajax($data)
 {
   header('Content-type: application/json; charset=UTF-8');
@@ -257,6 +276,8 @@ if ($_POST['func'] == 'fetch') {
   $data = delete_or_copy($mask);
 } elseif ($_POST['func'] == 'setvar') {
   $data = set_variable($_POST['source'],$mask);
+} elseif ($_POST['func'] == 'info') {
+  $data = get_infos($mask);
 }
 
 format_ajax($data);
index 3fe56b6..f1b6d4d 100644 (file)
@@ -91,6 +91,19 @@ function setvar(obj, name, callback, status)
        status(obj,value,obj.options[obj.selectedIndex].innerHTML);
 }
 
+function get_info(name, values, callback)
+{
+    var source = document.getElementById('source');
+
+    if (!source) return false;
+
+    var parms = 'source=' + source.innerHTML + '&name=' + name;
+    for (key in values)
+       parms += '&' + key + '=' + values[key];
+
+    ajax_request('info', parms, callback);
+}
+
 /*
  * Form functions
  */