<?php 
namespace Jackbooted\Forms; 
 
use \Jackbooted\DB\DB; 
use \Jackbooted\DB\DBTable; 
/** 
 * @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved. 
 * 
 * Written by Brett Dutton of Jackbooted Software 
 * brett at brettdutton dot com 
 * 
 * This software is written and distributed under the GNU General Public 
 * License which means that its source code is freely-distributed and 
 * available to the general public. 
 */ 
 
/** 
 * 
 */ 
class Grid extends CRUD { 
 
    public static function factory ( $gridQuery, $extraArgs=[] ) { 
        return new Grid ( $gridQuery, $extraArgs ); 
    } 
 
    private $countSql = ''; 
    private $gridQuery = ''; 
 
    public function  __construct( $query, $extraArgs=[] ) { 
        $this->gridQuery = $query; 
        $this->countSql = ( isset( $extraArgs['countSql'] ) && $extraArgs['countSql'] != false ) ? $extraArgs['countSql'] : 'SELECT COUNT(*) FROM (' . $query . ') AS TMP' . time(); 
 
        $props = array_merge ( $extraArgs,  [ 'canDelete' => false, 
                                              'canUpdate' => false, 
                                              'canInsert' => false ] ); 
        if ( isset ( $extraArgs['tableName'] ) ) { 
            $tableName = $extraArgs['tableName']; 
            unset ( $extraArgs['tableName'] ); 
        } 
        else if ( preg_match('/^.*from\s+([^\s]+).*/i', $query, $matches ) ) { 
            $tableName = $matches[1]; 
        } 
        else { 
            echo 'Unable to determine the Table name from query.'; 
            exit; 
        } 
        parent::__construct ( $tableName, $props ); 
 
    } 
 
    protected function createSQLResult () { 
        $qry = $this->paginator->getLimits( $this->dbType, $this->gridQuery . 
                                                           $this->columnator->getSort() ); 
        return $this->query ( $qry ); 
    } 
 
    protected function getRowCount () { 
        return DB::oneValue ( $this->db, $this->countSql ); 
    } 
 
    protected function getTableMetaData() { 
        $parentMeta = parent::getTableMetaData (); 
 
        $tab = new DBTable ( $this->db, $this->gridQuery . ' LIMIT 1', null, DB::FETCH_ASSOC ); 
        if ( ! $tab->ok () ) { 
            return false; 
        } 
 
        foreach ( array_keys ( $tab->getRow ( 0 ) ) as $col ) { 
            if ( ! isset ( $this->columnTitles[$col] ) ) { 
                $this->columnTitles[$col] = $this->convertColumnToTitle ( $col ); 
                $this->cellAttributes[$col] =  []; 
            } 
        } 
 
        $displayColumns = array_keys ( $tab->getRow ( 0 ) ); 
        $columnNames    = array_keys ( $this->columnTitles ); 
 
        foreach ( $columnNames as $columnName ) { 
            if ( ! in_array ( $columnName, $displayColumns ) ) { 
                unset ( $this->columnTitles[$columnName] ); 
                unset ( $this->cellAttributes[$columnName] ); 
                unset ( $this->displayType[$columnName] ); 
            } 
        } 
        return true; 
    } 
} 
 
 |