Example #1
0
 /**
  * @param Request $request
  * @param DbObject|Authenticatable $admin
  * @return array|\Illuminate\Http\JsonResponse
  */
 protected function validateAndGetAdminProfileUpdates(Request $request, DbObject $admin)
 {
     $validationRules = ['old_password' => 'required', 'new_password' => 'min:6'];
     $fieldsToUpdate = [];
     if ($admin->_hasField('language')) {
         $validationRules['language'] = 'required|in:' . implode(CmfConfig::getInstance()->locales());
         $fieldsToUpdate[] = 'language';
     }
     if ($admin->_hasField('name')) {
         $validationRules['name'] = 'max:200';
         $fieldsToUpdate[] = 'name';
     }
     if ($admin->_hasField('timezone')) {
         $validationRules['timezone'] = 'required|exists2:pg_timezone_names,name';
         $fieldsToUpdate[] = 'timezone';
     }
     $usersTable = CmfConfig::getInstance()->users_table_name();
     $userLoginCol = CmfConfig::getInstance()->user_login_column();
     if ($admin->_hasField('email')) {
         if ($userLoginCol === 'email') {
             $validationRules['email'] = "required|email|unique:{$usersTable},email,{$admin->getAuthIdentifier()},id";
         } else {
             $validationRules['email'] = 'email';
         }
         $fieldsToUpdate[] = 'email';
     }
     if ($userLoginCol !== 'email') {
         $validationRules[$userLoginCol] = "required|regex:%^[a-zA-Z0-9_@.-]+\$%is|min:4|unique:{$usersTable},{$userLoginCol},{$admin->getAuthIdentifier()},id";
         $fieldsToUpdate[] = $userLoginCol;
     }
     foreach (CmfConfig::getInstance()->additional_user_profile_fields() as $fieldName => $rules) {
         if (is_int($fieldName)) {
             $fieldName = $rules;
         } else {
             $validationRules[$fieldName] = $rules;
         }
         $fieldsToUpdate[] = $fieldName;
     }
     $validator = \Validator::make($request->data(), $validationRules, Set::flatten(CmfConfig::transCustom('.page.profile.errors')));
     $errors = [];
     if ($validator->fails()) {
         $errors = $validator->getMessageBag()->toArray();
     } else {
         if (!\Hash::check($request->data('old_password'), $admin->getAuthPassword())) {
             $errors['old_password'] = CmfConfig::transCustom('.page.profile.errors.old_password.match');
         }
     }
     if (!empty($errors)) {
         return cmfJsonResponseForValidationErrors($errors);
     }
     return $request->only($fieldsToUpdate);
 }
 /**
  * @param Request $request
  * @param CmfDbModel $model
  * @param string $inputNamePrefix - input name prefix
  *      For example if you use '_ids' instead of 'ids' - use prefix '_'
  * @return array|Response
  * @throws \PeskyCMF\Scaffold\ScaffoldException
  * @throws \PeskyCMF\PeskyCmfException
  * @throws \PeskyORM\Exception\DbQueryException
  * @throws \PeskyORM\Exception\DbException
  * @throws \PeskyORM\Exception\DbTableConfigException
  * @throws \PeskyORM\Exception\DbUtilsException
  * @throws \PeskyORM\Exception\DbModelException
  */
 private function getConditionsForBulkActions(Request $request, CmfDbModel $model, $inputNamePrefix = '')
 {
     $specialConditions = $this->getScaffoldConfig()->getFormConfig()->getSpecialConditions();
     $conditions = $specialConditions;
     $idsField = $inputNamePrefix . 'ids';
     $conditionsField = $inputNamePrefix . 'conditions';
     if ($request->has($idsField)) {
         $this->validate($request->data(), [$idsField => 'required|array', $idsField . '.*' => 'integer|min:1']);
         $conditions[$model->getPkColumnName()] = $request->data($idsField);
     } else {
         if ($request->has($conditionsField)) {
             $this->validate($request->data(), [$conditionsField => 'string|regex:%^[\\{\\[].*[\\}\\]]$%s']);
             $encodedConditions = $request->data($conditionsField) !== '' ? json_decode($request->data($conditionsField), true) : [];
             if ($encodedConditions === false || !is_array($encodedConditions) || empty($encodedConditions['r'])) {
                 return cmfJsonResponseForValidationErrors([$conditionsField => 'JSON expected']);
             }
             if (!empty($encodedConditions)) {
                 $dataGridConfig = $this->getScaffoldConfig()->getDataGridConfig();
                 $filterConditions = $this->getScaffoldConfig()->getDataGridFilterConfig()->buildConditionsFromSearchRules($encodedConditions);
                 if ($dataGridConfig->hasContains()) {
                     $subQueryConditions = array_merge(['CONTAIN' => $dataGridConfig->getContains()], $filterConditions, $specialConditions);
                     $subQuery = $model->builder()->fromOptions($model->resolveContains($subQueryConditions))->fields(['id'])->buildQuery(DbExpr::create("`{$model->getAlias()}`.`id`"), false, false);
                     $conditions = [DbExpr::create("`{$model->getPkColumnName()}` IN ({$subQuery})")];
                 } else {
                     $conditions = array_merge($filterConditions, $specialConditions);
                 }
             }
         } else {
             return cmfJsonResponseForValidationErrors([$idsField => 'List of items IDs of filtering conditions expected', $conditionsField => 'List of items IDs of filtering conditions expected']);
         }
     }
     return $conditions;
 }