<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/
// ------------------------------------------------------------------------
/**
* CodeIgniter Datatable Helpers
*
* @package CodeIgniter
* @subpackage Helpers
* @category Helpers
* @author Shabeer Ali M
* @link https://github.com/shabeer-ali-m/datatable_server
*/
// ------------------------------------------------------------------------
if ( ! function_exists('dt_get_json'))
{
/**
* Datatable server is php code that you can create json easily for ajax datatable.
* git : https://github.com/shabeer-ali-m/datatable_server
*
*
*
* $config=array(
*
* Coloums you need to select form database. [Array()]
* 'aColumns' => array( 'id','name','email','mobile'),
*
* Index coloum of the table. [String]
* 'sIndexColumn' => 'id',
*
* Table name [String]
* You can also gave join statment
* ex : 'sTable' =>"order left join invoice on invoiceid=orderid" ,
* 'sTable' =>"address-book" ,
*
* If you have any conditional statement you can add this. [String][optional]
* 'sCondition'=>'name like "%a"',
*
* Output needed in each coloum. [Array(Array('type'=>value))]
* Usage
* text => Normal Text values
* var => Variable Name.The variable name will replaced with the variable value.
* The variable that you are selecting should be added in aColoums.
* html => You can directly gave html. If you want to use variable in between you can use {{variable_name}}.
* eval => You can call a function that you have written.You can use the arguments as your variable that you selected in aColoums.
* 'aColumns_out' => array(
* array('var'=>'id'),
* array('var'=>'name',
* array('html'=>'<a href="mailto:{{email}}">{{email}}</a>'),
* array('eval'=>'your_function($mobile)'),
* ),
* );
*
* @access public
* @param array()
* @return json JSON data for datatable
*/
function dt_get_json($config)
{
/* creating instance */
$CI =& get_instance();
/* loading database */
$CI->load->database();
/* Array of database columns which should be read and sent back to DataTables. Use a space where
* you want to insert a non-database field (for example a counter or static image)
*/
$aColumns = $config['aColumns'];
/* Indexed column (used for fast and accurate table cardinality) */
$sIndexColumn = $config['sIndexColumn'];
/* DB table to use */
$sTable = $config['sTable'];
/* Query condition */
$sCondition=isset($config['sCondition'])?$config['sCondition']:'';
/*
* Paging
*/
$sLimit = "";
if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )
{
$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
intval( $_GET['iDisplayLength'] );
}
/*
* Ordering
*/
$sOrder = "";
if ( isset( $_GET['iSortCol_0'] ) )
{
$sOrder = "ORDER BY ";
for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ )
{
if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
{
$sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
}
}
$sOrder = substr_replace( $sOrder, "", -2 );
if ( $sOrder == "ORDER BY" )
{
$sOrder = "";
}
}
/*
* Filtering
* NOTE this does not match the built-in DataTables filtering which does it
* word by word on any field. It's possible to do here, but concerned about efficiency
* on very large tables, and MySQL's regex functionality is very limited
*/
$sWhere = "";
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
{
$sWhere = "WHERE (";
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
}
$sWhere = substr_replace( $sWhere, "", -3 );
$sWhere .= ')';
}
/* Individual column filtering */
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
{
if ( $sWhere == "" )
{
$sWhere = "WHERE ";
}
else
{
$sWhere .= " AND ";
}
$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
}
}
if($sWhere==""&&$sCondition!="")
$sWhere.='where ('.$sCondition.') ';
else if($sCondition!="")
$sWhere.='and ('.$sCondition.') ';
/*
* SQL queries
* Get data to display
*/
$sQuery = "
SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
FROM $sTable
$sWhere
$sOrder
$sLimit
";
/* fetching result from database */
$rResult = $CI->db->query($sQuery);
$sQuery = "
SELECT COUNT(`".$sIndexColumn."`) as 'count'
FROM $sTable $sWhere
";
$rResultTotal = $CI->db->query($sQuery);
$rResultTotal = $rResultTotal->row_array();
$iTotal = $rResultTotal["count"];
$iFilteredTotal=$iTotal;
/*
* Output
*/
$output = array(
"sEcho" => intval($_GET['sEcho']),
"iTotalRecords" => $iTotal,
"iTotalDisplayRecords" => $iFilteredTotal,
"aaData" => array()
);
foreach ($rResult->result_array() as $aRow )
{
$row = array();
extract($aRow);
foreach($config['aColumns_out'] as $aColumnsrow)
{
$col="";
foreach($aColumnsrow as $key=>$value)
{
if($key=='text')
$col.=$value;
else if($key=='var')
$col.=$aRow[$value];
else if($key=='html')
{
if(preg_match_all('/\{{(.*?)\}}/',$value,$match)){
foreach($match[1] as $v=>$k)
$match[1][$v]=$aRow[$k];
$col.=str_replace($match[0],$match[1],$value);
}
else
$col.$value;
}
else if($key=='eval')
eval("\$col = ".$value.";");
else
$col.='Invalid type!';
}
$row[] = $col;
}
$output['aaData'][] = $row;
}
return json_encode( $output );
}
}
// ------------------------------------------------------------------------
/* End of file datatable_helper.php */
/* Location: ./application/helpers/datatable_helper.php */
|