<?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)); }); |