Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@gridphp
Last active June 14, 2020 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gridphp/60aa1b04dfa4758c14fff92d8f7e068f to your computer and use it in GitHub Desktop.
Save gridphp/60aa1b04dfa4758c14fff92d8f7e068f to your computer and use it in GitHub Desktop.
PHP Grid Database Editor v2.6.2, https://www.gridphp.com
<?php
/**
* PHP Grid Component
*
* @author Abu Ghufran <gridphp@gmail.com> - http://www.phpgrid.org
* @version 2.6.2
* @license: see license.txt included in package
*/
include_once("../../config.php");
// set up DB
$db_conf = array();
$db_conf["type"] = "mysqli"; // mysql,oci8(for oracle),mssql,postgres,sybase
$db_conf["server"] = PHPGRID_DBHOST;
$db_conf["user"] = PHPGRID_DBUSER;
$db_conf["password"] = PHPGRID_DBPASS;
$db_conf["database"] = PHPGRID_DBNAME;
// put tables not to be shown in table editor
$restricted_tables = array();
$allowed_tables = array();
$hide_first = true;
// include and create object
include_once("../../lib/inc/adodb/adodb.inc.php");
include_once("../../lib/inc/jqgrid_dist.php");
session_start();
// load table array
$con = ADONewConnection($db_conf["type"]);
$con->Connect($db_conf["server"], $db_conf["user"], $db_conf["password"], $db_conf["database"]);
$result = $con->Execute("SHOW TABLES");
$table_arr = $result->GetRows();
$tab_fields = array();
if (!empty($_POST["tables"]))
{
$sql = "SELECT * FROM {$_POST["tables"]} LIMIT 1 OFFSET 0";
$result = $con->Execute($sql);
$cnt = $result->FieldCount();
$str = '';
for ($x=0; $x<$cnt; $x++)
{
$fld = $result->FetchField($x);
$str .= "<option>{$fld->name}</option>";
$tab_fields[] = $fld->name;
}
if (!empty($_POST["ajax"]))
die($str);
}
// preserve selection for ajax call
if (!empty($_POST["tables"]))
{
$_SESSION["tab"] = $_POST["tables"];
$_SESSION["fields"] = $_POST["fields"];
$tab = $_SESSION["tab"];
$fields = $_SESSION["fields"];
}
// update on ajax call
if (!empty($_GET["grid_id"]))
{
$tab = $_SESSION["tab"];
$fields = $_SESSION["fields"];
}
$g = new jqgrid($db_conf);
if (!empty($tab))
{
// set few params
$grid["caption"] = "Grid for '$tab'";
$grid["autowidth"] = true;
$grid["multiselect"] = true;
$grid["resizable"] = true;
$g->set_options($grid);
// set database table for CRUD operations
$g->table = $tab;
$index = 0;
if (!empty($fields))
{
$flds = $fields;
$cols = array();
for($i=0; $i<count($flds); $i++)
{
$f = $flds[$i];
$col = array();
$col["title"] = ucwords(str_replace("_"," ",$f));
$col["name"] = $f;
$col["editable"] = true;
// hide firsst
if ($i == 0 && $hide_first == true)
$col["hidden"] = true;
$cols[] = $col;
$index++;
}
$g->set_columns($cols);
}
$g->set_actions(array(
"add"=>false, // allow/disallow add
"edit"=>true, // allow/disallow edit
"delete"=>true, // allow/disallow delete
"bulkedit"=>true, // allow/disallow delete
"showhidecolumns"=>true, // allow/disallow delete
"rowactions"=>true, // show/hide row wise edit/del/save option
"autofilter" => true, // show/hide autofilter for search
"import" => true,
"search" => "advance"
)
);
// render grid
$out = $g->render("list1_$tab");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" media="screen" href="../../lib/js/themes/redmond/jquery-ui.custom.css"></link>
<link rel="stylesheet" type="text/css" media="screen" href="../../lib/js/jqgrid/css/ui.jqgrid.css"></link>
<script src="../../lib/js/jquery.min.js" type="text/javascript"></script>
<script src="../../lib/js/jqgrid/js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="../../lib/js/jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script>
<script src="../../lib/js/themes/jquery-ui.custom.min.js" type="text/javascript"></script>
<!-- Multiple Select -->
<script src="//cdn.jsdelivr.net/jstorage/0.1/jstorage.min.js" type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/json2/0.1/json2.min.js" type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/gh/gridphp/jqGridState@10b365046ebd687914855e807eb5f769277317d5/jqGrid.state.js" type="text/javascript"></script>
<!-- library for checkbox in column chooser -->
<link href="//cdn.jsdelivr.net/gh/wenzhixin/multiple-select@1.2.1/multiple-select.css" rel="stylesheet" />
<script src="//cdn.jsdelivr.net/gh/wenzhixin/multiple-select@1.2.1/multiple-select.js"></script>
<title>.: PHP Grid :. <?php echo ucwords($tab) ?></title>
</head>
<body>
<style>form {font-family: "Open Sans", tahoma;}</style>
<form method="post">
<fieldset>
<legend>Database Tables</legend>
Select:
<select name="tables" onchange="get_fields();" style="width:200px;">
<?php
$arr = $table_arr;
foreach($arr as $rs)
{
if (!empty($restricted_tables) && in_array($rs[0],$restricted_tables))
continue;
if (!empty($allowed_tables) && !in_array($rs[0],$allowed_tables))
continue;
$sel = (($rs[0] == $_POST["tables"])?"selected":"");
?>
<option <?php echo $sel?>><?php echo $rs[0]?></option>
<?php
}
?>
</select>
<select multiple="multiple" id="fields" name="fields[]" style="width:200px;">
<?php
foreach($tab_fields as $f)
{
if (in_array($f,$_POST["fields"]))
$sel = 'selected="selected"';
else
$sel = '';
?>
<option <?php echo $sel?>><?php echo $f?></option>
<?php
}
?>
</select>
<script>
var last_tab = jQuery("select[name=tables]").val();
function get_fields()
{
var request = {};
request.tables = jQuery("select[name=tables]").val();
request.ajax = 1;
if (last_tab == request.tables)
return;
else
last_tab = request.tables;
call = jQuery.ajax({
url: "?r="+Math.random(),
dataType: 'html',
data: request,
type: 'POST',
error: function(res, status) {
alert(res.status+' : '+res.statusText+'. Status: '+status);
},
success: function( data ) {
jQuery('select[id=fields]').html(data);
jQuery("select[id=fields]").multipleSelect({
filter: true,
placeholder: 'Select Fields'
});
jQuery("select[id=fields]").multipleSelect("checkAll");
}
});
}
$("select[name=tables]").multipleSelect({
filter: true,
single: true,
placeholder: 'Select Table'
});
$("select[id=fields]").multipleSelect({
filter: true,
placeholder: 'Select Fields'
});
</script>
<input type="submit" value="Load Table">
</fieldset>
</form>
<?php if (!empty($out)) { ?>
<!-- library for persistance storage -->
<script>
var opts = {
"stateOptions": {
storageKey: "gridState-<?php echo $tab?>",
columns: true, // remember column chooser settings
filters: true, // search filters
selection: true, // row selection
expansion: false, // subgrid expansion
pager: false, // page number
order: true // field ordering
}
};
</script>
<br>
<fieldset>
<?php echo $out?>
<br>
<button onclick="$('#list1_<?php echo $tab?>').gridState().remove('gridState-<?php echo $tab?>'); forms[0].submit(); ">Forget Settings</button>
</fieldset>
<?php } ?>
<script>
// show tooltip on column header
$(document).ready(function(){
$("th.ui-th-column").each(function(){
$(this).attr("title", $(this).text() );
});
});
</script>
<script>
jQuery(document).ready(function(){
jQuery('#list1_<?php echo $tab?>').jqGrid('navButtonAdd', '#list1_<?php echo $tab?>_pager',
{
'caption' : 'Export Selected',
'buttonicon' : 'ui-icon-extlink',
'onClickButton': function()
{
// for selected rows
// var rows = jQuery('#list1').jqGrid('getGridParam','selarrrow');
// for all selected rows (across page)
var gState = jQuery('#list1_<?php echo $tab?>').gridState();
var gRows = gState.selRows;
var rows = [];
for(k in gRows)
{
if (gRows[k] == true)
rows[rows.length] = k;
}
if (rows.length)
{
var data = rows.join();
var colModel = jQuery("#list1_<?php echo $tab?>").jqGrid("getGridParam", "colModel");
var field = colModel[1].name;
// client_id is first column and it's data will be passed as selected row ids.
var filter = '{"rules":[{"field":"'+field+'","op":"in","data":"'+data+'"}]}';
window.open("<?php echo $g->options["url"]?>" + "&export=1&jqgrid_page=1&export_type=pdf&_search=true&filters="+filter);
}
else
alert('Select rows to export');
},
'position': 'last'
});
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment