PHP Classes

File: src/plugin/components/bulk-actions/init.php

Recommend this page to a friend!
  Classes of Ar Gabid   Universal PHP Data Grid   src/plugin/components/bulk-actions/init.php   Download  
File: src/plugin/components/bulk-actions/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/bulk-actions/init.php
Date: 4 years ago
Size: 3,729 bytes
 

Contents

Class file image Download
<?php

use gdgrid\gd\GridTable;

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

$this->setConfig('bulk-actions', [
   
'set_query' => true,
   
'action_columns' => [
       
'view' => ['column' => 'bulk_action_view', 'name' => null, 'action_field' => null, 'template' => '{view}'],
       
'update' => ['column' => 'bulk_action_update', 'name' => null, 'action_field' => null, 'template' => '{update}'],
       
'delete' => ['column' => 'bulk_action_delete', 'name' => null, 'action_field' => null, 'template' => '{delete}'],
    ],
   
'action_field' => 'id',
   
'template' => '{view} {update} {delete}',
   
'view' => [
       
'template' => '<a href="%s%s" %s>%s</a>',
       
'url' => null,
       
'attr' => null,
       
'text' => '<i class="glyphicon glyphicon-eye-open"></i>'
   
],
   
'update' => [
       
'template' => '<a href="%s%s" %s>%s</a>',
       
'url' => null,
       
'attr' => null,
       
'text' => '<i class="glyphicon glyphicon-pencil"></i>'
   
],
   
'delete' => [
       
'template' => '<a href="%s%s" %s>%s</a>',
       
'url' => null,
       
'attr' => 'onclick="if (false == confirm(\'Are you sure you want to delete this element?\')) return false"',
       
'text' => '<i class="glyphicon glyphicon-trash"></i>'
   
],
]);

$this->fetchComponent('bulk-actions', function(GridTable $plugin)
{
   
$params = $this->getConfig('bulk-actions');

   
$url = rtrim(parse_url(getenv('REQUEST_URI'))['path'], '/');

   
$field = $params['action_field'];

   
$setQuery = false == empty($params['set_query']);

   
$template = $params['template'];

   
$actions = [
       
'view' => sprintf($params['view']['template'],
           
$params['view']['url'] ?? $url . '/view',
           
$setQuery ? '?id={item_id}' : '/{item_id}',
           
$params['view']['attr'],
           
$params['view']['text']
        ),
       
'update' => sprintf($params['update']['template'],
           
$params['update']['url'] ?? $url . '/update',
           
$setQuery ? '?id={item_id}' : '/{item_id}',
           
$params['update']['attr'],
           
$params['update']['text']
        ),
       
'delete' => sprintf($params['delete']['template'],
           
$params['delete']['url'] ?? $url . '/delete',
           
$setQuery ? '?id={item_id}' : '/{item_id}',
           
$params['delete']['attr'],
           
$params['delete']['text']
        ),
    ];

   
$columns = [];

   
$sortOrder = $plugin->fetchSortOrder();

    foreach (
$params['action_columns'] as $action => $col)
    {
       
$column = $col['column'] ?? 'bulk_action_' . $action;

        if (empty(
$params[$action]) || $plugin->checkRow($column))

            continue;

        if (
false == in_array($column, $sortOrder))

           
$columns[] = $column;

       
$tpl = $col['template'] ?? $template;

       
$field = $col['action_field'] ?? $field;

       
$plugin->loadColumn($column, $col['name'] ?? '');

       
$tpl = str_replace('{view}', $actions['view'], $tpl);
       
$tpl = str_replace('{update}', $actions['update'], $tpl);
       
$tpl = str_replace('{delete}', $actions['delete'], $tpl);

       
$plugin->setCell($column, function($data) use ($tpl, $field)
        {
            return
str_replace('{item_id}', $data->{$field} ?? ($data[$field] ?? null), $tpl);
        });

        if (
false == isset(
               
$params['view']['text'],
               
$plugin->getColumnAttributes($column)['class'],
               
$plugin->getColumnAttributes($column)['style'])
        )

           
$plugin->setColumnAttributes($column, ['style' => ['width' => '20px']]);
    }

   
$plugin->setSortOrder(array_merge($columns, $sortOrder));

});