<?php
define('SRC_DIR', __DIR__ . '/../src/');
require_once __DIR__ . '/../vendor/autoload.php';
@mkdir(__DIR__ . '/log');
@mkdir(__DIR__ . '/temp');
\Tracy\Debugger::enable(\Tracy\Debugger::DEVELOPMENT, __DIR__ . '/log');
\Tracy\Debugger::$strictMode = true;
$loader = new Nette\Loaders\RobotLoader;
$loader->addDirectory(__DIR__ . '/../src');
$loader->setCacheStorage(new Nette\Caching\Storages\FileStorage(__DIR__ . '/temp'));
$loader->register();
?>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="../node_modules/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css">
<link rel="stylesheet" href="../node_modules/mesour-datagrid/dist/css/mesour.datagrid.min.css">
<style>
.input-group-btn:last-child > .btn[data-simple-filter] {
padding: 9px;
}
</style>
<hr>
<div class="row col-lg-12" style="padding-left: 50px;">
<h2>Basic functionality</h2>
<hr>
<?php
$time_start = microtime(true);
$sourceFile = 'nette_source';
$primaryKey = 'userId';
$application = new \Mesour\UI\Application('mesourapp');
$application->getConfiguration()
->setTempDir(__DIR__ . '/temp');
$application->setRequest($_REQUEST);
$application->getUser()->setRoles('registered');
$auth = $application->getAuthorizator();
$auth->addRole('guest');
$auth->addRole('registered', 'guest');
$auth->addResource('menu');
$auth->allow('guest', 'menu', ['first', 'second']);
$auth->allow('registered', 'menu');
$auth->deny('registered', 'menu', 'second');
$grid = new \Mesour\UI\DataGrid('basicDataGrid', $application);
$wrapper = $grid->getWrapperPrototype();
$wrapper->class('my-class');
// TRUE = append
$wrapper->class('my-next-class', true);
/** @var \Mesour\DataGrid\Sources\IGridSource $source */
$source = require_once __DIR__ . '/sources/' . $sourceFile . '.php';
$dataStructure = $source->getDataStructure();
$dataStructure->renameColumn('user_addresses', 'addresses');
$dataStructure->renameColumn('groups', 'group');
$dataStructure->renameColumn('wallets', 'wallet');
/** @var \Mesour\Sources\Structures\Columns\ManyToManyColumnStructure $companiesColumn */
$companiesColumn = $dataStructure->getColumn('companies');
$companiesColumn->setPattern('{name}');
/** @var \Mesour\Sources\Structures\Columns\OneToManyColumnStructure $addressesColumn */
$addressesColumn = $dataStructure->getColumn('addresses');
$addressesColumn->setPattern('{street}, {zip} {city}, {country}');
/** @var \Mesour\Sources\Structures\Columns\ManyToOneColumnStructure $groupColumn */
$groupColumn = $dataStructure->getColumn('group');
$groupColumn->setPattern('{name} ({type})');
/** @var \Mesour\Sources\Structures\Columns\OneToOneColumnStructure $walletColumn */
$walletColumn = $dataStructure->getColumn('wallet');
$walletColumn->setPattern('{amount}');
$grid->setSource($source);
$pager = $grid->enablePager(8);
//$filter = $grid->enableFilter();
$filter = $grid->enableSimpleFilter();
$selection = $grid->enableRowSelection();
$selection = $selection->getLinks();
$selection->addHeader('Active');
$selection->addLink('Active')// add selection link
->onCall[] = function () {
dump('ActivateSelected', func_get_args());
};
$selection->addLink('Unactive')
->setAjax(false)// disable AJAX
->onCall[] = function () {
dump('InactivateSelected', func_get_args());
};
$selection->addDivider();
$selection->addLink('Delete')
->setConfirm('Really delete all selected users?')// set confirm text
->onCall[] = function () {
dump('DeleteSelected', func_get_args());
};
// EDITABLE
$editable = $grid->enableEditable();
$editableStructure = $editable->getDataStructure();
$editableStructure->addOneToOne('wallet', 'Wallet')
->enableCreateNewRow();
$editableStructure->addManyToOne('group', 'Groups')
->enableEditCurrentRow()
->enableCreateNewRow()
->setNullable();
$editableStructure->addOneToMany('addresses', 'Addresses')
->enableCreateNewRow()
->enableRemoveRow();
$editableStructure->addManyToMany('companies', 'Companies')
->enableAttachRow()
->enableCreateNewRow()
->enableRemoveRow();
$companyStructure = $editableStructure->getOrCreateElement('companies', 'id');
$companyStructure->addText('name', 'Name');
$companyStructure->addNumber('reg_num', 'Reg. number');
$companyStructure->addBool('verified', 'Verified');
$walletStructure = $editableStructure->getOrCreateElement('wallets', 'id');
$walletStructure->addNumber('amount', 'Amount')
->setDecimals(2)
->setThousandSeparator('.')
->setDecimalPoint(',');
$walletStructure->addEnum('currency', 'Currency')
->addValue('CZK', 'CZK')
->addValue('EUR', 'EUR');
$groupsStructure = $editableStructure->getOrCreateElement('groups', 'id');
$groupsStructure->addText('name', 'Name');
$groupsStructure->addEnum('type', 'Type')
->setNullable()
->addValue('first', 'First')
->addValue('second', 'Second');
$groupsStructure->addDate('date', 'Date');
$groupsStructure->addNumber('members', 'Members');
// / EDITABLE
$grid->enableSortable('sort');
$status = $grid->addStatus('action', 'S')
->setPermission('menu', 'second');
$status->addButton('active')
->setStatus(1, 'Active', 'All active')
->setIcon('check-circle-o')
->setType('success')
->setAttribute('href', '#');
$status->addButton('inactive')
->setStatus(0, 'Inactive', 'All inactive')
->setIcon('times-circle-o')
->setType('danger')
->setAttribute('href', '#');
$grid->addText('name', 'Name');
$grid->addText('email', 'E-mail');
$grid->addText('role', 'Role');
$grid->addDate('last_login', 'Last login')
->setFormat('Y-m-d');
$grid->addText('has_pro', 'Has pro')
->setAttribute('title', 'Has pro')
->setCallback(
function (\Mesour\DataGrid\Column\Text $column, $data) {
if($data['has_pro']) {
return '<b style="color:green">Yes</b>';
}
return '<b style="color:red">No</b>';
}
);
$grid->addText('group', 'Group')
//->setFiltering(false)
->setAttribute('title', 'Select group');
$grid->addText('wallet', 'Wallet')
//->setFiltering(false)
->setAttribute('title', 'Wallet');
$grid->addText('addresses', 'Addresses')
//->setFiltering(false)
;
$grid->addText('companies', 'Companies')
//->setFiltering(false)
;
$grid->addNumber('amount', 'Amount')
->setUnit('CZK');
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "<hr><b>Execution time (before render): " . number_format($time, 3, ',', ' ') . " seconds</b><hr>";
echo $grid->render();
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "<hr><b>Execution time (after render): " . number_format($time, 3, ',', ' ') . " seconds</b><hr>";
?>
</div>
<hr>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<!-- Latest compiled and minified JavaScript -->
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
crossorigin="anonymous"></script>
<script src="../node_modules/eonasdan-bootstrap-datetimepicker/node_modules/moment/min/moment.min.js"></script>
<script src="../node_modules/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js"></script>
<script src="../node_modules/mesour-datagrid/dist/js/mesour.datagrid.js"></script>
|