<?php use Meredith\MainController\MainControllerInterface; use Meredith\Supervisor\MeredithSupervisor; use Meredith\Tool\MeredithTool; /** * @var MainControllerInterface $mc */ $ms = MeredithSupervisor::inst(); ?> <script type="text/javascript"> (function ($) { $(document).ready(function () { var rowId = 0; // Generate content for a column var table = $('.datatable-meredith').DataTable({ ajax: { url: "<?php echo $ms->getUrl("list"); ?> ", type: "POST" }, // the columns option is necessary to enable (server side) DT_RowId to be recognized (https://datatables.net/reference/option/columns.data) columns: [ <?php $c = 0;
require_once __DIR__ . "/../../../../init.php"; use Meredith\Exception\MeredithException; use Meredith\Supervisor\MeredithSupervisor; use QuickPdo\QuickPdo; use Tim\TimServer\TimServer; use Tim\TimServer\TimServerInterface; TimServer::create()->start(function (TimServerInterface $server) { if (isset($_POST['formId']) && isset($_POST['ids']) && is_array($_POST['ids'])) { $ids = $_POST['ids']; $view = (string) $_POST['formId']; if (true === MeredithSupervisor::inst()->isGranted($view, 'delete')) { array_walk($ids, function (&$v) { $v = (int) $v; }); if ($ids) { if (false !== ($nbDelete = QuickPdo::delete($view, "id in (" . implode(", ", $ids) . ")"))) { $server->success("ok"); } else { $server->error(MeredithSupervisor::inst()->translate("An error occurred with the database, please retry later")); } } else { $server->success("ok"); } } else { throw new MeredithException("Permission not granted to access rows with {$view}"); } } else { $server->error(MeredithSupervisor::inst()->translate("Invalid data")); } })->output();
<link rel="stylesheet" href="/css/my_style.css"> </head> <body> <nav> <a href="/users-form">Add user</a><br> <a href="/users-list">User list</a><br> </nav> <section> <?php //------------------------------------------------------------------------------/ // PSEUDO ROUTING MECHANISM //------------------------------------------------------------------------------/ $uri = $_SERVER['REQUEST_URI']; $page = 'default'; $uri2FormId = ['/users-form' => 'users', '/users-list' => 'users']; if (array_key_exists($uri, $uri2FormId)) { $formId = $uri2FormId[$uri]; $page = substr($uri, 1); // remove the leading slash MeredithSupervisor::inst()->setFormId($formId); } require_once APP_DIR . "/pages/" . $page . ".php"; ?> </section> </body> </html>
$stmt .= $sWhere; $stmt .= $sOrder; $stmt .= " limit {$start}, {$length}"; if (false !== ($res = QuickPdo::fetchAll($stmt, $markers))) { $ret['data'] = []; foreach ($res as $k => $row) { $row = ['DT_RowId' => $row['id']] + $row; $ret['data'][$k] = $row; } } // recordFiltered $stmtCountFiltered = "select count(*) as count from {$fromClause}"; $stmtCountFiltered .= $sWhere; if (false !== ($info = QuickPdo::fetch($stmtCountFiltered, $markers))) { $ret['recordsFiltered'] = (int) $info['count']; } } } } catch (\Exception $e) { $ret['error'] = MeredithSupervisor::inst()->translate("Oops! An error occurred, please retry later"); MeredithSupervisor::inst()->log("Oops! An error occurred, please retry later: {$stmt} -- " . $e->getMessage()); } } } else { throw new MeredithException("Permission not granted to access rows with {$formId}"); } } else { throw new \Exception("An error occurred"); // but we don't care } echo json_encode($ret);
//------------------------------------------------------------------------------/ define('APP_DIR', __DIR__); //------------------------------------------------------------------------------/ // DB SETTINGS //------------------------------------------------------------------------------/ define("MYSQL_DBNAME", "adaman"); define("PDOCONF_DSN", "mysql:dbname=" . MYSQL_DBNAME . ";host=127.0.0.1"); define("PDOCONF_USER", "root"); define("PDOCONF_PASS", "root"); define('COOKIE_DOMAIN', ""); // Initialize pdo connection now, since we will need it for almost every request. //------------------------------------------------------------------------------/ QuickPdo::setConnection(PDOCONF_DSN, PDOCONF_USER, PDOCONF_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'", PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION)); //------------------------------------------------------------------------------/ // MEREDITH plugin //------------------------------------------------------------------------------/ MeredithSupervisor::inst()->setGetMainControllerCb(function ($formId) { $mc = MainControllerProvider::create()->setDir(APP_DIR . "/pages/meredith/main-controllers")->getMainController($formId); // getMainController either works as expected, or throws an Exception in your face ... return $mc; })->setIsGranted(function ($formId, $action) { // your application permission system here... return true; })->setTranslateCb(function ($msg) { if (false !== ($tr = EnglishDictionary::inst()->search($msg))) { return $tr; } return $msg; })->setLogCb(function ($msg) { // your application logging system here... });
<?php //------------------------------------------------------------------------------/ // CONFIGURATION OF MEREDITH MAIN CONTROLLER //------------------------------------------------------------------------------/ use Meredith\Supervisor\MeredithSupervisor; $formId = "users"; $mc = MeredithSupervisor::inst()->getMainController($formId); require_once __DIR__ . "/inc/baselist.php";
if (true === MeredithSupervisor::inst()->isGranted($formId, 'insert')) { if (false !== ($id = QuickPdo::insert($table, $nac2Values))) { $msg = $mc->getFormDataProcessor()->getSuccessMessage($formId, 'insert'); if (false === $msg) { $msg = MeredithSupervisor::inst()->translate("The record has been successfully recorded"); } $server->success(['msg' => $msg]); } else { $server->error(MeredithSupervisor::inst()->translate("An error occurred with the database, please retry later")); } } else { throw new MeredithException("Permission not granted to insert with {$formId}"); } } } catch (\PDOException $e) { if ('23000' === $e->getCode()) { // integrity constraint violation $msg = $mc->getFormDataProcessor()->getDuplicateEntryMessage($formId, $mode); if (false === $msg) { $msg = "A similar item already exists in the database"; } $server->error($msg); } else { throw $e; } } } } else { $server->error(MeredithSupervisor::inst()->translate("Invalid data: undefined formId")); } })->output();
<?php use Meredith\ContentTransformer\ActiveInactiveContentTransformer; use Meredith\ContentTransformer\UpdateDeleteMenuContentTransformer; use Meredith\FormCommunicationHelper\FrenchBootstrapFormCommunicationHelper; use Meredith\FormDataProcessor\FormDataProcessor; use Meredith\FormHandler\FormHandler; use Meredith\FormRenderer\AuthorFormRenderer; use Meredith\FormRenderer\ControlsRenderer\BootstrapControlsRenderer; use Meredith\FormRenderer\ControlsRenderer\Control\InputControl; use Meredith\FormRenderer\ControlsRenderer\Control\MonoStatusControl; use Meredith\ListButtonCode\ColvisListButtonCode; use Meredith\ListButtonCode\DeleteSelectedRowsListButtonCode; use Meredith\ListHandler\BaseListHandler; use Meredith\ListPreConfigScript\AuthorListPreConfigScript; use Meredith\MainController\AuthorMainController; use Meredith\OnModalOpenAfter\OnModalOpenAfter; use Meredith\Supervisor\MeredithSupervisor; use Meredith\ValidationCodeHandler\JqueryValidationCodeHandler; use Meredith\ValidatorJsUserCode\ValidatorJsUserCode; $mainController = AuthorMainController::create()->setFormId(MeredithSupervisor::inst()->getFormId())->setListHandler(BaseListHandler::create()->setPreConfigScript(AuthorListPreConfigScript::create()->addHeaderButton(ColvisListButtonCode::create())->addHeaderButton(DeleteSelectedRowsListButtonCode::create()))->addColumn('id')->addColumn('email')->addColumn('pass')->addColumn('rib')->addColumn('active')->addColumn('actions', false)->setContentTransformer('actions', UpdateDeleteMenuContentTransformer::create())->setContentTransformer('active', ActiveInactiveContentTransformer::create())->setOnModalOpenAfter(OnModalOpenAfter::create()->setDir(APP_DIR . "/pages/meredith/on-modal-open-after")))->setFormHandler(FormHandler::create()->setFormCommunicationHelper(FrenchBootstrapFormCommunicationHelper::create())->setFormRenderer(AuthorFormRenderer::create()->setDir(APP_DIR . "/pages/meredith/form-controls")->setControlsRenderer(BootstrapControlsRenderer::create()->addControl(InputControl::create()->setName("email")->setLabel("Email")->setType("email")->setPlaceHolder("Enter a valid email address"))->addControl(InputControl::create()->setName("pass")->setLabel("Mot de passe")->setType("password")->setPlaceHolder("Enter at least 5 characters"))->addControl(InputControl::create()->setName("repeat_password")->setLabel("Confirm password")->setType("password")->setPlaceHolder("Enter the password again"))->addControl(InputControl::create()->setName("rib")->setLabel("Rib")->setPlaceHolder("Enter your rib")->setHelp("99999 - 99999 - *********** - 99"))->addControl(MonoStatusControl::create()->setName("active")->setLabel("Active"))))->setValidationCodeHandler(JqueryValidationCodeHandler::create()->setValidatorJsUserCode(ValidatorJsUserCode::create()->setDir(APP_DIR . "/pages/meredith/validator-user-code"))))->setFormDataProcessor(FormDataProcessor::create()->addField('id', true, true)->addField('email', false, false)->addField('pass', false, false)->addField('rib', false, false)->addField('active', false, false, 0));