/**
  * @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);
 }
示例#2
0
 /**
  * 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();
 }
示例#4
0
 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();
     });
 }
示例#6
0
 /**
  * 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);
 }
示例#7
0
 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;
 }
示例#8
0
            <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">
示例#9
0
 public static function getScaffoldConfigClassSuffix()
 {
     /** @var CmfDbModel $calledClass */
     $calledClass = get_called_class();
     return CmfConfig::getInstance()->scaffold_config_class_suffix();
 }
示例#10
0
    $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 
示例#11
0
    <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>
示例#12
0
 public function logout()
 {
     Auth::guard()->logout();
     \Session::flush();
     \Session::regenerate(true);
     return Redirect::route(CmfConfig::getInstance()->login_route());
 }
示例#13
0
function __cmf_scaffold_api_controller_class()
{
    return \PeskyCMF\Config\CmfConfig::getInstance()->cmf_scaffold_api_controller_class();
}
示例#14
0
 protected function getUserLoginField()
 {
     return CmfConfig::getInstance()->user_login_column();
 }
示例#15
0
 /**
  * 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;
 }
示例#16
0
<?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") }}
示例#17
0
 /**
  * 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();
 }
示例#18
0
 /**
  * @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);
 }
示例#19
0
 /**
  * @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;
 }
示例#20
0
<?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();
 }
示例#22
0
 public function logout()
 {
     Auth::guard()->logout();
     \Session::clear();
     return Redirect::route(CmfConfig::getInstance()->login_route());
 }
示例#23
0
<?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>
示例#26
0
    <!-- 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>