PHP Classes

File: vendor/jackbooted/forms/Columnator.php

Recommend this page to a friend!
  Classes of Brett Dutton   JackBooted PHP Framework   vendor/jackbooted/forms/Columnator.php   Download  
File: vendor/jackbooted/forms/Columnator.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: 6,483 bytes
 

Contents

Class file image Download
<?php
namespace Jackbooted\Forms;

use \
Jackbooted\Html\Tag;
use \
Jackbooted\Util\Invocation;
/**
 * @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 Columnator extends Navigator {
    const
SORT_COL = 'C';
    const
SORT_ORDER = 'O';
    const
COL_VAR = '_CL';
    const
COL_LINK_CLASS = 'COL_LINK_CLASS';
    const
COL_BUTTON_CLASS = 'COL_BUTTON_CLASS';

    private static
$columnation = [ self::SORT_COL => '',
                                    
self::SORT_ORDER => '' ];

   
/**
     * @static
     * @param $suffix
     * @return string
     */
   
public static function navVar ( $suffix ) {
        return
self::COL_VAR . $suffix;
    }

    private
$sortColumn;
    private
$sortOrder;

   
/**
     * Create a Columnator Object.
     * @param array $props This is the properties that the Columnator will use to display.
     * <pre>
     * $props = array ( 'attribs' => 'array ( 'style' => 'display:none ), // Optional,
     * // Attributes that will be stamped on the div that is generated
     * // if not supplied will be empty array.
     * // Need to supply if the primary key is not simple column name
     * 'suffix' => 'V', // Optional, suffix for the action variable for Columnator
     * // useful when there is a numbner on the screen
     * // if not supplied one will be generated based on the number of
     * // Columnator that are generated
     * 'request_vars' => 'CEMID', // Optional, regexpression or individual name of any request
     * // vars that are to be copied to the response vars (chained vars)
     * 'init_column' => 'fldDate', // Optional, Initial Coloumn to be sorted
     * 'init_order' => 'DESC', // Optional, initial direction
     * );
     * </pre>
     */
   
public function __construct ( $props=[] ) {
       
parent::__construct();

       
$this->attribs = ( isset ( $props['attribs'] ) ) ? $props['attribs'] : [];
       
$suffix = ( isset ( $props['suffix'] ) ) ? $props['suffix'] : Invocation::next();
       
$this->navVar = self::navVar ( $suffix );
       
$initPattern = ( isset ( $props['request_vars'] ) ) ? $props['request_vars'] : '';
       
$this->respVars = new Response ( $initPattern );

       
$initialVars = self::$columnation;
       
$initialVars[self::SORT_COL] = ( isset ( $props['init_column'] ) ) ? $props['init_column'] : '';
       
$initialVars[self::SORT_ORDER] = ( isset ( $props['init_order'] ) ) ? $props['init_order'] : '';

       
// ensyre that they have been set
       
$requestColumnVars = Request::get ( $this->navVar, [] );
        foreach (
$initialVars as $key => $val ) {
           
$this->set ( $key, ( ( isset ( $requestColumnVars[$key] ) ) ? $requestColumnVars[$key] : $val ) );
        }

       
// Get the current settings
       
$this->sortColumn = $this->formVars[self::SORT_COL];
       
$this->sortOrder = $this->formVars[self::SORT_ORDER];
        if ( ! isset(
$this->sortOrder ) || $this->sortOrder == false || ! in_array( $this->sortOrder, [ 'ASC', 'DESC' ] ) ) {
           
$this->sortOrder = 'ASC';
        }

       
$this->styles[self::COL_LINK_CLASS] = 'jb-collink';
       
$this->styles[self::COL_BUTTON_CLASS] = 'jb-colbutton';
    }

   
/**
     * @param $columnName
     * @param $columnDisplay
     * @return string
     */
   
public function toHtml ( $columnName, $columnDisplay=null ) {
        if (
$columnDisplay == null ) $columnDisplay = $columnName;
       
$savedFormVars = $this->formVars;

       
$this->set( self::SORT_COL, $columnName );

        if (
$this->sortColumn == $columnName ) {
           
$this->set( self::SORT_ORDER, ( $this->sortOrder == 'ASC' ) ? 'DESC' : 'ASC' );
           
$sortDirectionName = ( $this->sortOrder == 'ASC' ) ? 'Decending' : 'Ascending';
           
$title = 'Click here to sort ' . $sortDirectionName . ' By ' . $columnDisplay;

           
$button = ( $this->sortOrder == 'ASC' ) ? '^' : 'v';

           
$url = $this->toUrl ();
           
$html = Tag::hTag( 'a', array_merge( $this->attribs,
                                                  [
'href' => $url,
                                                   
'class' => $this->styles[self::COL_LINK_CLASS],
                                                   
'title' => $title ] ) ).
                     
$columnDisplay .
                   
Tag::_hTag( 'a' ) .
                   
Tag::linkButton ( $url, $button, array_merge ( $this->attribs,
                                                                    [
'class' => $this->styles[self::COL_BUTTON_CLASS],
                                                                     
'title' => $title ] ) );
        }
        else {
           
$this->set( self::SORT_ORDER, $this->sortOrder );
           
$sortDirectionName = ( $this->sortOrder == 'ASC' ) ? 'Decending' : 'Ascending';
           
$title = 'Sort ' . $sortDirectionName . ' By ' . $columnDisplay;

           
$url = $this->toUrl ();
           
$html = Tag::hTag( 'a', array_merge( $this->attribs,
                                                  [
'href' => $url,
                                                   
'class' => $this->styles[self::COL_LINK_CLASS],
                                                   
'title' => $title ] ) ).
                     
$columnDisplay .
                   
Tag::_hTag( 'a' );
        }

       
$this->formVars = $savedFormVars;
        return
$html;
    }

   
/**
     * @return string
     */
   
public function getSort() {
        if ( ! isset(
$this->formVars[self::SORT_COL] ) || $this->formVars[self::SORT_COL] == false ) {
            return
'';
        }

        return
' ORDER BY ' . $this->formVars[self::SORT_COL] . ' ' . $this->formVars[self::SORT_ORDER];
    }
}