示例#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);
 }