PHP Classes

File: src/plugin/components/filter/init.php

Recommend this page to a friend!
  Classes of Ar Gabid   Universal PHP Data Grid   src/plugin/components/filter/init.php   Download  
File: src/plugin/components/filter/init.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Universal PHP Data Grid
Display and process data to edit database records
Author: By
Last change: Update of src/plugin/components/filter/init.php
Date: 4 years ago
Size: 4,822 bytes
 

Contents

Class file image Download
<?php

use gdgrid\gd\GridForm;
use
gdgrid\gd\Grid;

/* @var \gdgrid\gd\plugin\GridPlugin $this */

$this->setConfig('filter', [
   
'provider' => $this->gridObject()->getProvider(),
   
'formatter' => $this->gridObject()->formatter(),
   
'buttons' => [
       
'submit' => ['url' => null, 'id' => null, 'attr' => null, 'onclick' => null, 'text' => 'Apply Filter'],
       
'reset' => ['url' => null, 'id' => null, 'attr' => null, 'onclick' => null, 'text' => 'Reset Filter'],
       
'template' => null, // '{submit} {reset}'
       
'insert_before' => '<{tag}',
       
'insert_after' => null,
    ],
   
'insert_before' => null,
   
'insert_after' => '{columns}',
]);

$this->fetchComponent('filter', function(GridForm $plugin, Grid $grid)
{
   
/* @var \gdgrid\gd\plugin\GridPlugin $this */

   
if (empty($plugin->getInput()))

       
$plugin->loadInputs();

   
$id = $plugin->getTagAttributes()['id'] ?? 'grid-table-filter-' . substr(md5(microtime(true)), 0, 10);

    if (empty(
$plugin->getSortOrder()))

       
$plugin->setSortOrder($grid->fetchSortOrder());

   
$templateSet = null !== $plugin->getTemplate();

    if (
$grid->getTag() === 'table' && ! $templateSet)
    {
       
$plugin->setTag('tr')->setTagAttributes([])->setTemplate('<td {attr}>{input}</td>');

        if (
false == isset($plugin->getRowAttributes()['class']))

           
$plugin->setRowAttributes(['class' => []]);
    }

   
$plugin->setTagAttributes(['id' => $id]);

    foreach (
$plugin->fetchSortOrder() as $item)
    {
        if (
false == $grid->checkRow($item))
        {
           
$plugin->unsetInput($item);

            continue;
        }

        if (
false == $plugin->checkInput($item) && $grid->checkRow($item))
        {
           
$plugin->setRow($item, '');

            continue;
        }

        if (
null === $plugin->getRowTemplate($item))
        {
           
$type = $plugin->getInputType($item);

            if (
$plugin->isOptionalInput($item))
            {
                if (
$type !== 'select')

                   
$plugin->setSelect($item);

                if (
$plugin->getPrompt($item) === null)

                   
$plugin->setPrompt($item, ['' => '']);
            }
            elseif (
$type === 'date' && isset($plugin->getInput($item)['time']))

               
$plugin->setInputType($item, $plugin::DEFAULT_INPUT_TYPE)->setInputAttribute($item, ['data-type' => 'datetime']);

            elseif (
$type !== 'number')

               
$plugin->setInput($item, null, $plugin::DEFAULT_INPUT_TYPE);
        }
    }

    if (
$this->checkConfig('filter', 'buttons') && $buttons = $this->getConfig('filter', 'buttons'))
    {
       
$btn = [
           
'submit' => [
               
'id' => $buttons['submit']['id'] ?? 'grid-table-filter-submit-' . substr(md5(microtime(true)), 0, 10),
               
'text' => $buttons['submit']['text'] ?? 'Apply Filter',
               
'attr' => $buttons['submit']['attr'] ?? 'class="btn btn-info btn-sm"',
               
'onclick' => $buttons['submit']['onclick']
                    ??
sprintf('gdFilterSubmit(\'%s\', \'%s\')', $id, $buttons['submit']['url'] ?? getenv('REQUEST_URI')),
            ],
           
'reset' => [
               
'id' => $buttons['submit']['id'] ?? 'grid-table-filter-reset-' . substr(md5(microtime(true)), 0, 10),
               
'text' => $buttons['reset']['text'] ?? 'Reset Filter',
               
'attr' => $buttons['reset']['attr'] ?? 'class="btn btn-default btn-sm"',
               
'onclick' => $buttons['reset']['onclick']
                    ??
sprintf('window.location.href = %s', $buttons['reset']['url'] ?? 'window.location.pathname'),
            ]
        ];

       
$template = $buttons['template'] ?? '<div class="grid-table-filter-submit-buttons">{submit} {reset}</div>';

       
$template = strtr($template, [

           
'{submit}' => sprintf('<button %s id="%s" onclick="%s">%s</button>',

               
$btn['submit']['attr'], $btn['submit']['id'], $btn['submit']['onclick'], $btn['submit']['text']),

           
'{reset}' => sprintf('<button %s id="%s" onclick="%s">%s</button>',

               
$btn['reset']['attr'], $btn['reset']['id'], $btn['reset']['onclick'], $btn['reset']['text'])
        ]);

        if (
false == isset($plugin->getTagAttributes()['onkeydown']) && ! $templateSet)

           
$plugin->setTagAttributes([
               
'onkeydown' => sprintf('if (event.keyCode === 13) $(\'#%s\').trigger(\'click\')', $btn['submit']['id'])
            ]);

       
$grid->bindLayout('{filter_btn}', [$template, $buttons['insert_before'], $buttons['insert_after']]);
    }

   
$grid->bindLayout('{filter}', [
       
$plugin->render(),
       
$this->getConfig('filter', 'insert_before'),
       
$this->getConfig('filter', 'insert_after')
    ]);

});