| 
<!-- 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="../vendor/mesour/components/public/DateTimePicker/bootstrap-datetimepicker.min.css">
 
 <link rel="stylesheet" href="../node_modules/mesour-filter/dist/css/mesour.filter.min.css">
 
 <?php
 
 define('SRC_DIR', __DIR__ . '/../src/');
 
 require_once __DIR__ . '/../vendor/autoload.php';
 
 @mkdir(__DIR__ . '/log');
 @mkdir(__DIR__ . '/tmp');
 
 \Tracy\Debugger::enable(\Tracy\Debugger::DEVELOPMENT, __DIR__ . '/log');
 \Tracy\Debugger::$strictMode = true;
 
 require_once SRC_DIR . 'Mesour/Filter/IFilter.php';
 require_once SRC_DIR . 'Mesour/Filter/IFilterItem.php';
 require_once SRC_DIR . 'Mesour/UI/Filter.php';
 require_once SRC_DIR . 'Mesour/Filter/FilterItem.php';
 require_once SRC_DIR . 'Mesour/Filter/Text.php';
 require_once SRC_DIR . 'Mesour/Filter/Date.php';
 require_once SRC_DIR . 'Mesour/Filter/Number.php';
 require_once SRC_DIR . 'Mesour/Filter/Sources/IFilterSource.php';
 require_once SRC_DIR . 'Mesour/Filter/Sources/ArrayFilterSource.php';
 require_once SRC_DIR . 'Mesour/Filter/Sources/DoctrineFilterSource.php';
 require_once SRC_DIR . 'Mesour/Filter/Sources/NetteDbFilterSource.php';
 require_once SRC_DIR . 'Mesour/Filter/Sources/SQLHelper.php';
 require_once SRC_DIR . 'Mesour/Filter/Sources/DateFunction.php';
 
 ?>
 
 <hr>
 
 <div class="container">
 <h2>Basic functionality</h2>
 
 <hr>
 
 <?php
 
 // CONNECTION & NDBT
 
 $connection = new \Nette\Database\Connection(
 'mysql:host=127.0.0.1;dbname=sources_test',
 'root',
 'root'
 );
 
 $cacheMemoryStorage = new \Nette\Caching\Storages\MemoryStorage();
 
 $structure = new \Nette\Database\Structure($connection, $cacheMemoryStorage);
 $conventions = new \Nette\Database\Conventions\DiscoveredConventions($structure);
 $context = new \Nette\Database\Context($connection, $structure, $conventions, $cacheMemoryStorage);
 
 // APPLICATION
 
 $application = new Mesour\UI\Application;
 
 $application->setRequest($_REQUEST);
 
 $config = $application->getConfiguration();
 
 $config->setTempDir(__DIR__ . '/tmp');
 
 $application->run();
 
 // SELECTION
 
 $selection = $context->table('users');
 $selection->select('users.*')
 ->select('group.name group_name')
 ->select('group.type group_type')
 ->select('group.date group_date');
 
 // SOURCE
 
 $source = new \Mesour\Filter\Sources\NetteDbFilterSource('users', 'id', $selection, $context, [
 'group_name' => 'group.name',
 'group_type' => 'group.type',
 'group_date' => 'group.date',
 ]);
 
 // FILTER
 
 $filter = new \Mesour\UI\Filter('test', $application);
 
 $filter->setSource($source);
 
 $filter->addTextFilter('action', 'Status', [
 0 => 'Inactive',
 1 => 'Active',
 ])->setMainFilter(false);
 
 $filter->setCustomReference('action', [
 0 => 'Inactive',
 1 => 'Active',
 ]);
 
 $filter->addTextFilter('name', 'Name');
 
 $filter->addNumberFilter('amount', 'Amount');
 
 $filter->addDateFilter('last_login', 'Last login');
 
 $filter->addTextFilter('group_name', 'Group name');
 
 $filter->addTextFilter('has_pro', 'Bool value')
 ->setMainFilter(false);
 
 $filter->addDateFilter('timestamp', 'Timestamp');
 
 $filter->onRender[] = function (Mesour\UI\Filter $_filter) use ($source) {
 foreach ($_filter->getValues() as $name => $value) {
 if (isset($value['checkers'])) {
 $source->applyCheckers($name, $value['checkers'], $value['type']);
 }
 if (isset($value['custom'])) {
 $source->applyCustom($name, $value['custom'], $value['type']);
 }
 }
 };
 
 echo $filter->render();
 
 ?>
 </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="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
 integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
 crossorigin="anonymous"></script>
 
 <script src="../vendor/mesour/components/public/DateTimePicker/moment.min.js"></script>
 <script src="../vendor/mesour/components/public/DateTimePicker/bootstrap-datetimepicker.min.js"></script>
 
 <script src="../node_modules/mesour-filter/dist/js/mesour.filter.js"></script>
 |