PHP Classes

File: vendor/jackbooted/forms/Grid.php

Recommend this page to a friend!
  Classes of Brett Dutton   JackBooted PHP Framework   vendor/jackbooted/forms/Grid.php   Download  
File: vendor/jackbooted/forms/Grid.php
Role: Class source
Content type: text/plain
Description: Class source
Class: JackBooted PHP Framework
Web application framework using simplified MVC
Author: By
Last change:
Date: 8 years ago
Size: 2,995 bytes
 

Contents

Class file image Download
<?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;
    }
}