summaryrefslogtreecommitdiff
path: root/includes/js/dojox/grid/tests/support/data.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/grid/tests/support/data.php')
-rw-r--r--includes/js/dojox/grid/tests/support/data.php379
1 files changed, 379 insertions, 0 deletions
diff --git a/includes/js/dojox/grid/tests/support/data.php b/includes/js/dojox/grid/tests/support/data.php
new file mode 100644
index 0000000..1beb6f0
--- /dev/null
+++ b/includes/js/dojox/grid/tests/support/data.php
@@ -0,0 +1,379 @@
+<?php
+ // db settings
+ $dbserver = 'localhost';
+ $dbuser = 'root';
+ $dbpassword = 'root';
+
+ error_reporting(E_ALL);
+
+ /*
+ Simple protocol:
+ - Inputs via POST variables.
+ - Output is a string that can be evaluated into a JSON
+ First element of the array contains return status.
+
+ This simplified tutorial code should not be deployed without a security review.
+ */
+
+ @include "json.php";
+
+ // set up response encoding
+ header("Content-Type: text/html; charset=utf-8");
+
+ // util
+ function getPostString($inName) {
+ // make sure input strings are 'clean'
+ return mysql_real_escape_string(@$_POST[$inName]);
+ }
+
+ // used for json encoding
+ $json = new Services_JSON();
+
+ function echoJson($inData) {
+ global $json;
+ // delay in ms
+ $delay = getPostString('delay');
+ if (!empty($delay))
+ usleep($delay * 1000);
+ echo '/* ' . $json->encode($inData) . ' */';
+ }
+
+ function error($inMessage) {
+ $inMessage = str_replace('"', '\\"', $inMessage);
+ error_log($inMessage);
+ //echo '/* ({error: true, message: "' . $inMessage . '"}) */';
+ echoJson(array('error' => true, 'message' => $inMessage));
+ exit;
+ }
+
+
+ function getArray($inResult, $inArray="true") {
+ $o = Array();
+ while ($row = ($inArray ? mysql_fetch_row($inResult) : mysql_fetch_object($inResult)))
+ $o[] = $row;
+ return $o;
+ }
+
+ // connect to DB
+ mysql_connect($dbserver, $dbuser, $dbpassword);
+
+ // select DB
+ $database = getPostString("database");
+ $database = ($database ? $database : $db);
+ if (!mysql_select_db($database))
+ error('failed to select db: ' . mysql_error());
+
+ // select table
+ $table = getPostString("table");
+ $table = ($table ? $table : $dbtable);
+
+ // cache
+ $colCache = NULL;
+ $pkCache = NULL;
+
+ // set UTF8 output (MySql > 4.0)
+ mysql_query("SET NAMES UTF8");
+
+ // server, database, table meta data
+ function getDatabases() {
+ $result = mysql_query("SHOW DATABASES");
+ $output = Array();
+ while ($row = mysql_fetch_row($result)) {
+ $r = strtolower($row[0]);
+ if ($r != 'mysql' && $r != 'information_schema')
+ $output[] = $row[0];
+ }
+ return $output;
+ }
+
+ function getTables() {
+ global $database;
+ $result = mysql_query("SHOW TABLES FROM $database");
+ $output = Array();
+ while ($row = mysql_fetch_row($result))
+ $output[] = $row[0];
+ return $output;
+ }
+
+ function getColumns() {
+ global $table, $colCache;
+ if (!$colCache) {
+ $result = mysql_query("SHOW COLUMNS FROM `$table`");
+ return getArray($result, false);
+ $colCache = getArray($result, false);
+ }
+ return $colCache;
+ }
+
+ // returns object: $this->name, $this->index
+ function getPk() {
+ global $pkCache;
+ if (!$pkCache) {
+ $k = '';
+ $columns = getColumns();
+ for ($i=0; $i < count($columns); $i++) {
+ $c = $columns[$i];
+ if ($c->Key == 'PRI') {
+ $k = $c->Field;
+ break;
+ }
+ }
+ $pkCache->index = $i;
+ $pkCache->name = $k;
+ }
+ return $pkCache;
+ }
+
+ function getTableInfo() {
+ global $table, $database;
+ $c = getColumns();
+ $r = rowcount();
+ return array("count" => $r, "columns" => $c, "database" => $database, "table" => $table);
+ }
+
+ function getOldPostPkValue() {
+ $pk = getPk();
+ return getPostString('_o' . $pk->index);
+ }
+
+ function getNewPostPkValue() {
+ $pk = getPk();
+ return getPostString('_' . $pk->index);
+ }
+
+ function getPostColumns() {
+ $columns = getColumns();
+ for ($i=0, $a=array(), $p; (($p=getPostString("_".$i)) != ''); $i++) {
+ $r = new stdClass();
+ $r->name = $columns[$i]->Field;
+ $r->value = $p;
+ $a[] = $r;
+ }
+ return $a;
+ }
+
+ function getOrderBy() {
+ $ob = getPostString("orderby");
+ if (is_numeric($ob)) {
+ $columns = getColumns();
+ $ob = $columns[intval($ob)-1]->Field;
+ }
+ return $ob;
+ }
+
+ function getWhere() {
+ $w = getPostString("where");
+ return ($w ? " WHERE $w" : "");
+ }
+
+ // basic operations
+ function rowcount() {
+ global $table;
+ $query = "SELECT COUNT(*) FROM `$table`" . getWhere();
+ $result = mysql_query($query);
+ if (!$result)
+ error("failed to perform query: $query. " . mysql_error());
+ if ($row = mysql_fetch_row($result))
+ return $row[0];
+ else
+ return 0;
+ }
+
+ function select($inQuery = '') {
+ global $table;
+ // built limit clause
+ $lim = (int)getPostString("limit");
+ $off = (int)getPostString("offset");
+ $limit = ($lim || $off ? " LIMIT $off, $lim" : "");
+ // build order by clause
+ $desc = (boolean)getPostString("desc");
+ $ob = getOrderBy();
+ $orderby = ($ob ? " ORDER BY `" . $ob . "`" . ($desc ? " DESC" : "") : "");
+ // build query
+ $query = ($inQuery ? $inQuery : "SELECT * FROM `$table`" . getWhere() . $orderby . $limit);
+ // execute query
+ if (!$result = mysql_query($query))
+ error("failed to perform query: $query. " . mysql_error());
+ // fetch each result row
+ return getArray($result);
+ }
+
+ function reflectRow() {
+ global $table;
+ $pk = getPk();
+ $key = getNewPostPkValue();
+ $where = "`$pk->name`=\"$key\"";
+ return select("SELECT * FROM `$table` WHERE $where LIMIT 1");
+ }
+
+ function update() {
+ // build set clause
+ for ($i=0, $set = array(), $cols = getPostColumns(), $v; ($v=$cols[$i]); $i++)
+ $set[] = "`$v->name` = '$v->value'";
+ $set = implode(', ', $set);
+ // our table
+ global $table;
+ // build query
+ $pk = getPk();
+ $pkValue = getOldPostPkValue();
+ $query = "UPDATE `$table` SET $set WHERE `$pk->name` = '$pkValue' LIMIT 1";
+ // execute query
+ if (!mysql_query($query))
+ error("failed to perform query: [$query]. " .
+ "MySql says: [" . mysql_error() ."]");
+ else {
+ return reflectRow();
+ }
+ }
+
+ function insert() {
+ global $table;
+ // build values clause
+ for ($i=0, $values = array(), $cols = getPostColumns(), $v; ($v=$cols[$i]); $i++)
+ $values[] = $v->value;
+ $values = '"' . implode('", "', $values) . '"';
+ // build query
+ $query = "INSERT INTO `$table` VALUES($values)";
+ // execute query
+ if (!mysql_query($query))
+ error("failed to perform query: [$query]. " .
+ "MySql says: [" . mysql_error() ."]");
+ else {
+ return reflectRow();
+ }
+ }
+
+ function delete() {
+ global $table;
+ // build query
+ $n = getPostString("count");
+ $pk = getPk();
+ for ($i = 0, $deleted=array(); $i < $n; $i++) {
+ $key = getPostString("_$i");
+ array_push($deleted, $key);
+ $query = "DELETE FROM `$table` WHERE `$pk->name`=\"$key\" LIMIT 1";
+ // execute query
+ if (!mysql_query($query) || mysql_affected_rows() != 1)
+ error("failed to perform query: [$query]. " .
+ "Affected rows: " . mysql_affected_rows() .". " .
+ "MySql says: [" . mysql_error() ."]");
+ }
+ return $deleted;
+ }
+
+ // find (full text search)
+ function findData($inFindCol, $inFind, $inOrderBy, $inFullText) {
+ global $table;
+ $where = ($inFullText ? "WHERE MATCH(`$inFindCol`) AGAINST ('$inFind')" : "WHERE $inFindCol LIKE '$inFind'");
+ $query = "SELECT * FROM $table $where $inOrderBy";
+ $result = mysql_query($query);
+ // return rows
+ return getArray($result);
+ }
+
+ // binary search through sorted data, supports start point ($inFindFrom) and direction ($inFindForward)
+ function findRow($inData, $inFindFrom=-1, $inFindForward) {
+ $b = -1;
+ $l = count($inData);
+ if (!$inData)
+ return $b;
+ if (!$inFindFrom==-1 || $l < 2)
+ $b = 0;
+ else {
+ // binary search
+ $t = $l-1;
+ $b = 0;
+ while ($b <= $t) {
+ $p = floor(($b+$t)/2);
+ $d = $inData[$p][0];
+ if ($d < $inFindFrom)
+ $b = $p + 1;
+ else if ($d > $inFindFrom)
+ $t = $p - 1;
+ else {
+ $b = $p;
+ break;
+ }
+ }
+ if ($inFindFrom == $inData[$b][0]) {
+ // add or subtract 1
+ $b = ($inFindForward ? ($b+1 > $l-1 ? 0 : $b+1) : ($b-1 < 0 ? $l-1 : $b-1) );
+ }
+ else if (!$inFindForward)
+ // subtract 1
+ $b = ($b-1 < 0 ? $l-1 : $b-1);
+ }
+ return $inData[$b][0];
+ }
+
+ function buildFindWhere($inFindData, $inKey, $inCol) {
+ $o = Array();
+ foreach($inFindData as $row)
+ $o[] = $inCol . "='" . $row[$inKey] . "'";
+ return (count($o) ? ' WHERE ' . implode(' OR ', $o) : '');
+ }
+
+ function find($inFindCol, $inFind='', $inOb='', $inFindFrom=0, $inFindForward=true, $inFullText=true) {
+ global $table;
+ // build order by clause
+ $desc = (boolean)getPostString("desc");
+ if (!$inOb)
+ $inOb = getOrderBy();
+ if ($inOb)
+ $inOb = "`" . $inOb . "`" ;
+ $orderby = ($inOb ? " ORDER BY $inOb " . ($desc ? " DESC" : "") : "");
+ // update inputs from post
+ if (!$inFind)
+ $inFind = getPostString('findText');
+ if (!$inFindCol)
+ $inFindCol = getPostString('findCol');
+ if (empty($inFindFrom))
+ $inFindFrom = getPostString('findFrom');
+ $ff = getPostString('findForward');
+ if ($ff)
+ $inFindForward = (strtolower($ff) == 'true' ? true : false);
+ $ft = getPostString('findFullText');
+ if ($ft)
+ $inFullText = (strtolower($ft) == 'true' ? true : false);
+
+ // get find data
+ $f = findData($inFindCol, $inFind, $orderby, $inFullText);
+ $pk = getPk();
+
+ // execute query
+ $where = buildFindWhere($f, $pk->index, 'f');
+ $query = "SELECT Row, f FROM (SELECT @row := @row + 1 AS Row, $pk->name as f FROM `$table` $orderby) AS tempTable $where";
+ mysql_query('SET @row = -1;');
+ if (!$result = mysql_query($query))
+ error("failed to perform query: $query. " . mysql_error());
+
+ // return row number
+ return findRow(getArray($result), $inFindFrom, $inFindForward);
+ }
+
+ // our command list
+ $cmds = array(
+ "count" => "rowcount",
+ "select" => "select",
+ "update" => "update",
+ "insert" => "insert",
+ "delete" => "delete",
+ "find" => "find",
+ "databases" => "getDatabases",
+ "tables" => "getTables",
+ "columns" => "getColumns",
+ "info" => "getTableInfo"
+ );
+
+ // process input params
+ $cmd = @$_POST["command"];
+
+ //$cmd="select";
+
+ // dispatch command
+ $func = @$cmds[$cmd];
+ if (function_exists($func))
+ echoJson(call_user_func($func));
+ else
+ error("bad command");
+?>