| 
<?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 */
 |