/** * @throws ScaffoldActionException * @return CmfDbModel */ protected function loadModel() { $config = CmfConfig::getInstance(); $baseDbModelClass = $config->base_db_model_class(); $className = str_replace($config->scaffold_config_class_suffix(), call_user_func([$baseDbModelClass, 'getModelClassSuffix']), get_class($this)); return call_user_func([$baseDbModelClass, 'getModelByClassName'], $className); }
/** * Handle an incoming request. * * @param Request $request * @param \Closure $next * @return mixed */ public function handle(Request $request, Closure $next) { //get the admin check closure that should be supplied in the config /** @var CmfConfig $configs */ $configs = CmfConfig::getInstance(); //if this is a simple false value, send the user to the login redirect $response = \Auth::guard()->check() && $configs->isAuthorised($request); if (!$response) { $loginUrl = route($configs->login_route()); $redirectUri = $request->url(); if ($request->ajax()) { \Session::set(CmfConfig::getInstance()->session_redirect_key(), $redirectUri); return response()->json(['redirect_with_reload' => $loginUrl], HttpCode::UNAUTHORISED); } else { return redirect()->guest($loginUrl)->with(CmfConfig::getInstance()->session_redirect_key(), $redirectUri); } } else { if (is_a($response, 'Illuminate\\Http\\JsonResponse') || is_a($response, 'Illuminate\\Http\\Response')) { return $response; } else { if (is_a($response, 'Illuminate\\Http\\RedirectResponse')) { $redirectUri = $request->url(); /** @var RedirectResponse $response */ return $response->with(CmfConfig::getInstance()->session_redirect_key(), $redirectUri); } } } return $next($request); }
/** * @return callable|null */ public function getValueConverter() { if (empty(parent::getValueConverter())) { switch ($this->getType()) { case self::TYPE_BOOL: $this->setValueConverter(function ($value) { return CmfConfig::transBase('.item_details.field.bool.' . ($value ? 'yes' : 'no')); }); break; case self::TYPE_IMAGE: $this->setValueConverter(function ($value, DbColumnConfig $columnConfig, array $record) { if (!empty($value) && is_array($value) && !empty($value['url']) && is_array($value['url'])) { if (count($value['url']) > 0) { unset($value['url']['source']); } $images = []; $translationPath = CmfConfig::getInstance()->custom_dictionary_name() . '.' . $columnConfig->getDbTableConfig()->getName() . '.item_details.field.' . $columnConfig->getName() . '_version.'; foreach ($value['url'] as $key => $url) { $images[] = ['label' => trans($translationPath . $key), 'url' => $url]; } return $images; } else { return []; } }); break; } } return parent::getValueConverter(); }
public function __construct(CmfDbModel $model, ScaffoldSectionConfig $scaffoldSectionConfig) { parent::__construct($model, $scaffoldSectionConfig); $this->limit = CmfConfig::getInstance()->rows_per_page(); if ($model->getOrderField()) { $this->setOrderBy($model->getOrderField(), $model->getOrderDirection()); } }
/** * Register any application services. * * @return void */ public function register() { $this->app->singleton(CmfConfig::class, function () { return $this->cmfConfig; }); $this->app->singleton(\PeskyCMF\Http\Request::class, function () { return new \PeskyCMF\Http\Request(request()); }); $this->app->singleton('base_db_model_class', function () { return CmfConfig::getInstance()->base_db_model_class(); }); }
/** * Handle an incoming request. * * @param Request $request * @param \Closure $next * @return mixed */ public function handle(Request $request, Closure $next) { $tableName = $request->route()->parameter('table_name'); if (!empty($tableName)) { try { /** @var CmfDbModel $model */ $model = call_user_func([CmfConfig::getInstance()->base_db_model_class(), 'getModelByTableName'], $tableName); CmfScaffoldApiController::setModel($model); } catch (DbUtilsException $exc) { dpr($exc->getMessage()); } } // if the model doesn't exist at all, redirect to 404 if (empty($model)) { abort(404, 'Page not found'); } return $next($request); }
protected function preapareAndGetDataForViews() { $tableName = $this->argument('table_name'); $modelClass = call_user_func([$this->modelParentClass, 'getFullModelClassByTableName'], $tableName); $folder = $this->getFolderAndValidate($tableName, $modelClass); if (empty($folder)) { return false; } $tableSchema = $this->getDbSchema(); $columns = $this->getColumns($tableName, $tableSchema); if (empty($columns)) { return false; } $dataForViews = ['folder' => $folder, 'table' => $tableName, 'schema' => $tableSchema, 'columns' => $columns, 'modelParentClass' => $this->modelParentClass, 'objectParentClass' => $this->objectParentClass, 'tableConfigParentClass' => $this->tableConfigParentClass, 'scaffoldConfigParentClass' => $this->scaffoldConfigParentClass, 'modelClassName' => call_user_func([$this->modelParentClass, 'getModelNameByTableName'], $tableName), 'objectClassName' => call_user_func([$this->modelParentClass, 'getObjectNameByTableName'], $tableName), 'tableConfigClassName' => call_user_func([$this->modelParentClass, 'getTableConfigNameByTableName'], $tableName), 'scaffoldConfigClassName' => CmfConfig::getInstance()->getScaffoldConfigNameByTableName($tableName), 'traitsForTableConfig' => $this->getTraitsForTableConfig()]; $dataForViews['modelAlias'] = $dataForViews['objectClassName']; $dataForViews['namespace'] = call_user_func([$this->modelParentClass, 'getRootNamespace']) . '\\' . $dataForViews['objectClassName']; $dataForViews['files']['model'] = $folder . DIRECTORY_SEPARATOR . $dataForViews['modelClassName'] . '.php'; $dataForViews['files']['object'] = $folder . DIRECTORY_SEPARATOR . $dataForViews['objectClassName'] . '.php'; $dataForViews['files']['table_config'] = $folder . DIRECTORY_SEPARATOR . $dataForViews['tableConfigClassName'] . '.php'; $dataForViews['files']['scaffold_config'] = $folder . DIRECTORY_SEPARATOR . $dataForViews['scaffoldConfigClassName'] . '.php'; Folder::load($folder, true, 0775); return $dataForViews; }
<form role="form" method="post" action="{{ route('cmf_profile', [], false) }}" id="admin-profile-form"> <input type="hidden" name="_method" value="PUT"> <!-- disable chrome email & password autofill --> <input type="email" class="hidden"> <input type="text" class="hidden"> <input type="password" class="hidden"> <!-- end of autofill disabler --> <div class="box-body"> @if ($admin->_hasField('email')) <div class="form-group"> <label for="email-input">{{ \PeskyCMF\Config\CmfConfig::transCustom('.page.profile.input.email') }}*</label> <input class="form-control" value="{{ $admin->email }}" name="email" id="email-input" type="email" required="required"> </div> @endif <?php $loginColumn = \PeskyCMF\Config\CmfConfig::getInstance()->user_login_column(); ?> @if ($loginColumn !== 'email') <div class="form-group"> <label for="{{ $loginColumn }}-input">{{ \PeskyCMF\Config\CmfConfig::transCustom('.page.profile.input.' . $loginColumn) }}*</label> <input class="form-control" value="{{ $admin->$loginColumn }}" name="{{ $loginColumn }}" id="{{ $loginColumn }}-input" type="text" required="required"> </div> @endif <div class="form-group"> <label for="new-password-input">{{ \PeskyCMF\Config\CmfConfig::transCustom('.page.profile.input.new_password') }}</label> <input class="form-control" value="" name="new_password" id="new-password-input" type="password" autocomplete="off"> </div> @if ($admin->_hasField('name')) <div class="form-group"> <label for="name-input">{{ \PeskyCMF\Config\CmfConfig::transCustom('.page.profile.input.name') }}</label> <input class="form-control" value="{{ $admin->name }}" name="name" id="name-input" type="text">
public static function getScaffoldConfigClassSuffix() { /** @var CmfDbModel $calledClass */ $calledClass = get_called_class(); return CmfConfig::getInstance()->scaffold_config_class_suffix(); }
$btn = \Swayok\Html\Tag::a()->setContent('<i class="glyphicon glyphicon-trash"></i>')->setClass('row-action text-red item-delete')->setTitle(\PeskyCMF\Config\CmfConfig::transBase('.datagrid.actions.delete_item'))->setDataAttr('toggle', 'tooltip')->setDataAttr('container', '#section-content .content')->setDataAttr('block-datagrid', '1')->setDataAttr('action', 'request')->setDataAttr('method', 'delete')->setDataAttr('url', route('cmf_api_delete_item', [$tableNameForRoutes, ":{$pkName}:"], false))->setDataAttr('confirm', \PeskyCMF\Config\CmfConfig::transBase('.action.delete.please_confirm'))->setHref('javascript: void(0)')->build(); $actionsTpl .= '{{? !!it.___delete_allowed }}' . $btn . '{{?}}'; } $customRowActions = $dataGridConfig->getRowActions(); if (!empty($customRowActions)) { foreach ($customRowActions as $rowAction) { $actionsTpl .= $rowAction; } } $actionsTpl = '<div class="row-actions text-nowrap">' . preg_replace('%:([a-zA-Z0-9_]+):%is', '{{= it.$1 }}', $actionsTpl) . '</div>'; ?> <script type="application/javascript"> (function() { <?php $dataTablesConfig = array_replace(\PeskyCMF\Config\CmfConfig::getInstance()->data_tables_config(), $dataGridConfig->getAdditionalDataTablesConfig(), ['processing' => true, 'serverSide' => true, 'ajax' => route('cmf_api_get_items', ['model' => $tableNameForRoutes], false), 'pageLength' => $dataGridConfig->getLimit(), 'toolbarItems' => array_values($toolbar), 'order' => []]); if (!$dataGridConfig->getOrderBy() instanceof \PeskyORM\DbExpr) { $dataTablesConfig['order'] = [[$dataGridConfig->getField($dataGridConfig->getOrderBy())->getPosition(), $dataGridConfig->getOrderDirection()]]; } ?> var dataTablesConfig = <?php echo json_encode($dataTablesConfig + ['resource_name' => $tableNameForRoutes], JSON_UNESCAPED_UNICODE); ?> ; var rowActionsTpl = Utils.makeTemplateFromText('<?php echo addslashes($actionsTpl); ?> ', 'Data grid row actions template'); dataTablesConfig.columnDefs = []; var fixedColumns = 0; <?php
<script src="/packages/cmf/js/cmf.helpers.js" type="text/javascript"></script> <script src="/packages/cmf/js/cmf.utils.js" type="text/javascript"></script> <script src="/packages/cmf/js/cmf.controllers.js" type="text/javascript"></script> <script src="/packages/cmf/js/scaffold/scaffold.controllers.js?_=20151008" type="text/javascript"></script> <script src="/packages/cmf/js/scaffold/scaffold.manager.js" type="text/javascript"></script> <script src="/packages/cmf/js/cmf.app.js" type="text/javascript"></script> @foreach(\PeskyCMF\Config\CmfConfig::getInstance()->layout_js_includes() as $jsPath) <script src="{{ $jsPath }}" rel="stylesheet" type="text/javascript"></script> @endforeach @yield('js') @yield('js2') <?php $message = Session::pull(\PeskyCMF\Config\CmfConfig::getInstance()->session_message_key(), false); ?> @if (!empty($message) && (is_string($message) || is_array($message) && !empty($message['message']))) <script type="application/javascript"> <?php $type = is_string($message) || empty($message['type']) || !in_array($message['type'], ['success', 'info', 'warning', 'error']) ? 'info' : $message['type']; ?> $(document).ready(function () { if (typeof toastr !== 'undefined') { toastr.{{ $type }}('{{ is_string($message) ? $message : $message['message'] }}'); } }); </script> @endif </body> </html>
public function logout() { Auth::guard()->logout(); \Session::flush(); \Session::regenerate(true); return Redirect::route(CmfConfig::getInstance()->login_route()); }
function __cmf_scaffold_api_controller_class() { return \PeskyCMF\Config\CmfConfig::getInstance()->cmf_scaffold_api_controller_class(); }
protected function getUserLoginField() { return CmfConfig::getInstance()->user_login_column(); }
/** * Base path to localization of scaffold views for this resource * @param $defaultLocalizationKey * @return string */ public function getLocalizationBasePath($defaultLocalizationKey) { $key = $this->viewsLocalizationKey ?: $defaultLocalizationKey; return CmfConfig::getInstance()->custom_dictionary_name() . '.' . $key; }
<?php $dictionary = \PeskyCMF\Config\CmfConfig::getInstance()->custom_dictionary_name(); $loginInputName = \PeskyCMF\Config\CmfConfig::getInstance()->user_login_column(); ?> <div class="login-box"> <div class="login-logo"> {!! \PeskyCMF\Config\CmfConfig::getInstance()->login_logo() !!} <b>{!! trans("{$dictionary}.login_form.header") !!}</b> </div> <div class="login-box-body" id="login-form-container"> <form action="{{ route(\PeskyCMF\Config\CmfConfig::getInstance()->login_route(), [], false) }}" method="post" id="login-form"> <div class="form-group has-feedback"> <input type="{{ $loginInputName === 'email' ? 'email' : 'text' }}" name="{{ $loginInputName }}" required class="form-control" placeholder="{{ trans("{$dictionary}.login_form.{$loginInputName}_label") }}"> <span class="glyphicon glyphicon-{{ $loginInputName === 'email' ? 'envelope' : 'user' }} form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input type="password" name="password" required class="form-control" placeholder="{{ trans("{$dictionary}.login_form.password_label") }}"> <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> <div class="row login-submit"> <div class="col-xs-8 forgot-password"> @if (\PeskyCMF\Config\CmfConfig::getInstance()->is_password_restore_allowed()) <a href="{{ route('cmf_forgot_password') }}">{{ trans("{$dictionary}.login_form.forgot_password_label") }}</a> @endif </div> <div class="col-xs-4"> <button type="submit" class="btn btn-primary btn-block btn-flat"> {{ trans("{$dictionary}.login_form.button_label") }}
/** * Get scaffold config class name only by table name avoiding model class usage * Used by MakeDbClasses console command * @param $tableName * @return string */ public static function getScaffoldConfigNameByTableName($tableName) { $objectName = call_user_func([static::base_db_model_class(), 'getObjectNameByTableName'], $tableName); return $objectName . CmfConfig::getInstance()->scaffold_config_class_suffix(); }
/** * @param $path - must strat with '.' * @param array $parameters * @param string $domain * @param null|string $locale * @return string */ public static function transBase($path, $parameters = [], $domain = 'messages', $locale = null) { return trans(CmfConfig::getInstance()->cmf_base_dictionary_name() . $path, $parameters, $domain, $locale); }
/** * @param array $translations - format: ['lang1_code' => 'translation1', 'lang2_code' => 'translation2', ...] * @param null|string $default - default value to return when there is no translation for app()->getLocale() * language and for CmfConfig::getInstance()->default_locale() * @return string|null */ function pickLocalization(array $translations, $default = null) { $langCodes = [app()->getLocale(), \PeskyCMF\Config\CmfConfig::getInstance()->default_locale()]; foreach ($langCodes as $langCode) { if (array_key_exists($langCode, $translations) && is_string($translations[$langCode]) && trim($translations[$langCode]) !== '') { return $translations[$langCode]; } } return $default; }
<?php /** * @var \PeskyCMF\Db\CmfDbModel $model * @var \PeskyCMF\Scaffold\DataGrid\DataGridConfig $dataGridConfig * @var \PeskyCMF\Scaffold\DataGrid\DataGridFilterConfig $dataGridFilterConfig * @var \PeskyCMF\Scaffold\ItemDetails\ItemDetailsConfig $itemDetailsConfig * @var \PeskyCMF\Scaffold\Form\FormConfig $formConfig */ $data = ['model' => $model, 'translationPrefix' => \PeskyCMF\Config\CmfConfig::getInstance()->custom_dictionary_name() . ".{$model->getTableName()}", 'idSuffix' => preg_replace('%[^a-z0-9]%is', '-', strtolower($model->getTableName()))]; ?> <?php echo view($dataGridConfig->getView(), $data + $dataGridConfig->getAdditionalDataForView(), ['dataGridConfig' => $dataGridConfig, 'dataGridFilterConfig' => $dataGridFilterConfig])->render(); ?> <?php echo view($formConfig->getView(), $data + $formConfig->getAdditionalDataForView(), ['formConfig' => $formConfig])->render(); ?> <?php echo view($itemDetailsConfig->getView(), $data + $itemDetailsConfig->getAdditionalDataForView(), ['itemDetailsConfig' => $itemDetailsConfig])->render(); ?>
public function getTemplates() { return view(CmfConfig::getInstance()->scaffold_templates_view(), array_merge($this->getScaffoldConfig()->getConfigs(), ['tableNameForRoutes' => $this->getTableNameForRoutes()]))->render(); }
public function logout() { Auth::guard()->logout(); \Session::clear(); return Redirect::route(CmfConfig::getInstance()->login_route()); }
<?php $dictionary = \PeskyCMF\Config\CmfConfig::getInstance()->custom_dictionary_name(); ?> <div class="login-box"> <div class="login-logo"> {!! \PeskyCMF\Config\CmfConfig::getInstance()->login_logo() !!} <b>{!! trans("{$dictionary}.forgot_password.header") !!}</b> </div> <div class="login-box-body" id="forgot-password-form-container"> <form action="{{ route('cmf_forgot_password', [], false) }}" method="post" id="forgot-password-form"> <div class="form-group has-feedback"> <input type="email" name="email" required class="form-control" placeholder="{{ trans("{$dictionary}.forgot_password.email_label") }}"> <span class="glyphicon glyphicon-envelope form-control-feedback"></span> </div> <div class="login-submit text-right"> <button type="submit" class="btn btn-primary btn-flat"> {{ trans("{$dictionary}.forgot_password.button_label") }} </button> </div> </form> </div> </div>
public function getTemplates() { return view(CmfConfig::getInstance()->scaffold_templates_view(), $this->getScaffoldConfig()->getConfigs())->render(); }
<div id="user-panel"> <div class="info"> </div> <div class="actions"> <a href="{{ route('cmf_profile', [], false) }}"> <i class="fa fa-fw fa-user"></i>{{ \PeskyCMF\Config\CmfConfig::transCustom('.user.profile_label') }} </a> <a href="{{ route(\PeskyCMF\Config\CmfConfig::getInstance()->logout_route(), [], false) }}"> <i class="fa fa-fw fa-sign-out"></i>{{ \PeskyCMF\Config\CmfConfig::transCustom('.user.logout_label') }} </a> </div> </div> <script type="text/html" id="user-panel-tpl"> <div class="user-name">@{{? it.name.length }}@{{= it.name }}@{{??}}@{{= it.role }}@{{?}}</div> <div class="user-{{ \PeskyCMF\Config\CmfConfig::getInstance()->user_login_column() }}"> <?php echo '{{= it.' . \PeskyCMF\Config\CmfConfig::getInstance()->user_login_column() . ' }}'; ?> </div> </script>
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> <![endif]--> </head> <body class="skin-blue" data-locale="{{ app()->getLocale() }}"> <div class="wrapper has-preloader loading" id="page-wrapper"> </div> <script type="application/javascript"> <?php $urlPrefix = \PeskyCMF\Config\CmfConfig::getInstance()->url_prefix(); ?> var CmfSettings = { isDebug: {{ env('APP_DEBUG') ? 'true' : 'false' }}, rootUrl: '/{{ $urlPrefix }}', uiUrl: '{{ str_ireplace("/{$urlPrefix}/", '', route('cmf_main_ui', [], false)) }}', userDataUrl: '{{ str_ireplace("/{$urlPrefix}/", '', route('cmf_profile_data', [], false)) }}' }; </script> <script src="/packages/cmf/js/lib/jquery/jquery-2.1.3.min.js" type="text/javascript"></script> <script src="/packages/bootstrap/js/bootstrap.min.js" type="text/javascript"></script> <script src="/packages/bootstrap/switches/js/bootstrap-switch.min.js" type="text/javascript"></script> <script src="/packages/adminlte/plugins/slimScroll/jquery.slimscroll.min.js" type="text/javascript"></script> <script src='/packages/adminlte/plugins/fastclick/fastclick.min.js'></script>