|
@@ -177,6 +177,7 @@ class SSP {
|
|
|
{
|
|
|
$globalSearch = array();
|
|
|
$columnSearch = array();
|
|
|
+ $joins = array();
|
|
|
$dtColumns = self::pluck( $columns, 'dt' );
|
|
|
|
|
|
if ( isset($request['search']) && $request['search']['value'] != '' ) {
|
|
@@ -184,13 +185,19 @@ class SSP {
|
|
|
|
|
|
for ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) {
|
|
|
$requestColumn = $request['columns'][$i];
|
|
|
- $columnIdx = array_search( $requestColumn['data'], $dtColumns );
|
|
|
+ $columnIdx = array_search( $i, $dtColumns );
|
|
|
$column = $columns[ $columnIdx ];
|
|
|
|
|
|
if ( $requestColumn['searchable'] == 'true' ) {
|
|
|
if(!empty($column['db'])){
|
|
|
- $binding = self::bind( $bindings, '%'.$str.'%', PDO::PARAM_STR );
|
|
|
- $globalSearch[] = "`".$tablesAS."`.`".$column['db']."` LIKE ".$binding;
|
|
|
+ $binding = self::bind( $bindings, '%'.$str.'%', PDO::PARAM_STR );
|
|
|
+
|
|
|
+ if(isset($column['search']['join'])) {
|
|
|
+ $joins[] = $column['search']['join'];
|
|
|
+ $globalSearch[] = $column['search']['where_column'].' LIKE '.$binding;
|
|
|
+ } else {
|
|
|
+ $globalSearch[] = "`".$tablesAS."`.`".$column['db']."` LIKE ".$binding;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -227,12 +234,17 @@ class SSP {
|
|
|
implode(' AND ', $columnSearch) :
|
|
|
$where .' AND '. implode(' AND ', $columnSearch);
|
|
|
}
|
|
|
+
|
|
|
+ $join = '';
|
|
|
+ if( count($joins) ) {
|
|
|
+ $join = implode(' ', $joins);
|
|
|
+ }
|
|
|
|
|
|
if ( $where !== '' ) {
|
|
|
$where = 'WHERE '.$where;
|
|
|
}
|
|
|
|
|
|
- return $where;
|
|
|
+ return [$join, $where];
|
|
|
}
|
|
|
|
|
|
|
|
@@ -270,13 +282,14 @@ class SSP {
|
|
|
// Build the SQL query string from the request
|
|
|
list($select, $order) = self::order( $tablesAS, $request, $columns );
|
|
|
$limit = self::limit( $request, $columns );
|
|
|
- $where = self::filter( $tablesAS, $request, $columns, $bindings );
|
|
|
+ list($join, $where) = self::filter( $tablesAS, $request, $columns, $bindings );
|
|
|
|
|
|
// Main query to actually get the data
|
|
|
$data = self::sql_exec( $db, $bindings,
|
|
|
"SELECT `$tablesAS`.`".implode("`, `$tablesAS`.`", self::pluck($columns, 'db'))."`
|
|
|
$select
|
|
|
FROM `$table` AS `$tablesAS`
|
|
|
+ $join
|
|
|
$where
|
|
|
$order
|
|
|
$limit"
|
|
@@ -284,15 +297,16 @@ class SSP {
|
|
|
|
|
|
// Data set length after filtering
|
|
|
$resFilterLength = self::sql_exec( $db, $bindings,
|
|
|
- "SELECT COUNT(`{$primaryKey}`)
|
|
|
+ "SELECT COUNT(`{$tablesAS}`.`{$primaryKey}`)
|
|
|
FROM `$table` AS `$tablesAS`
|
|
|
+ $join
|
|
|
$where"
|
|
|
);
|
|
|
$recordsFiltered = $resFilterLength[0][0];
|
|
|
|
|
|
// Total data set length
|
|
|
$resTotalLength = self::sql_exec( $db,
|
|
|
- "SELECT COUNT(`{$primaryKey}`)
|
|
|
+ "SELECT COUNT(`{$tablesAS}`.`{$primaryKey}`)
|
|
|
FROM `$table` AS `$tablesAS`"
|
|
|
);
|
|
|
$recordsTotal = $resTotalLength[0][0];
|
|
@@ -362,7 +376,7 @@ class SSP {
|
|
|
// Build the SQL query string from the request
|
|
|
list($select, $order) = self::order( $tablesAS, $request, $columns );
|
|
|
$limit = self::limit( $request, $columns );
|
|
|
- $where = self::filter( $tablesAS, $request, $columns, $bindings );
|
|
|
+ list($join_filter, $where) = self::filter( $tablesAS, $request, $columns, $bindings );
|
|
|
|
|
|
// whereResult can be a simple string, or an assoc. array with a
|
|
|
// condition and bindings
|
|
@@ -388,7 +402,9 @@ class SSP {
|
|
|
$select
|
|
|
FROM `$table` AS `$tablesAS`
|
|
|
$join
|
|
|
+ $join_filter
|
|
|
$where
|
|
|
+ GROUP BY `{$tablesAS}`.`{$primaryKey}`
|
|
|
$order
|
|
|
$limit"
|
|
|
);
|
|
@@ -398,18 +414,22 @@ class SSP {
|
|
|
"SELECT COUNT(`{$tablesAS}`.`{$primaryKey}`)
|
|
|
FROM `$table` AS `$tablesAS`
|
|
|
$join
|
|
|
- $where"
|
|
|
+ $join_filter
|
|
|
+ $where
|
|
|
+ GROUP BY `{$tablesAS}`.`{$primaryKey}`"
|
|
|
);
|
|
|
- $recordsFiltered = $resFilterLength[0][0];
|
|
|
+ $recordsFiltered = (isset($resFilterLength[0])) ? $resFilterLength[0][0] : 0;
|
|
|
|
|
|
// Total data set length
|
|
|
$resTotalLength = self::sql_exec( $db, $bindings,
|
|
|
"SELECT COUNT(`{$tablesAS}`.`{$primaryKey}`)
|
|
|
FROM `$table` AS `$tablesAS`
|
|
|
$join
|
|
|
- $where"
|
|
|
+ $join_filter
|
|
|
+ $where
|
|
|
+ GROUP BY `{$tablesAS}`.`{$primaryKey}`"
|
|
|
);
|
|
|
- $recordsTotal = $resTotalLength[0][0];
|
|
|
+ $recordsTotal = (isset($resTotalLength[0])) ? $resTotalLength[0][0] : 0;
|
|
|
|
|
|
/*
|
|
|
* Output
|