commit 8dd082a65643add93c0944302fb3ea542ee1e057
parent 409dcf4ed718185169e55c7b697cf2d18b895298
Author: dankert <openrat@jandankert.de>
Date: Wed, 9 Mar 2022 00:52:23 +0100
New: Only save a property if it is send by the client. This is useful using a API, so not sent properties will not be deleted.
Diffstat:
2 files changed, 84 insertions(+), 14 deletions(-)
diff --git a/modules/cms/action/RequestParams.class.php b/modules/cms/action/RequestParams.class.php
@@ -214,6 +214,46 @@ class RequestParams
/**
+ * @param $varName
+ * @param $callback
+ */
+ public function handleText( $varName,$callback ) {
+
+ if ( $this->hasKey($varName ) )
+ call_user_func( $callback, $this->getText($varName) );
+ }
+
+ /**
+ * @param $varName
+ * @param $callback
+ */
+ public function handleNumber( $varName,$callback ) {
+
+ if ( $this->hasKey($varName ) )
+ call_user_func( $callback, $this->getNumber($varName) );
+ }
+
+ /**
+ * @param $varName
+ * @param $callback
+ */
+ public function handleBool( $varName,$callback ) {
+
+ if ( $this->hasKey($varName ) )
+ call_user_func( $callback, in_array( $this->getText($varName),['1','true','on']) );
+ }
+
+ /**
+ * @param $varName
+ * @param $callback
+ */
+ public function handleBoolDefaultFalse( $varName,$callback ) {
+
+ call_user_func( $callback, in_array( $this->getText($varName),['1','true','on']) );
+ }
+
+
+ /**
* Gets the value of the request parameter.
*
* @param $nameOfRequestParameter
diff --git a/modules/cms/action/user/UserPropAction.class.php b/modules/cms/action/user/UserPropAction.class.php
@@ -42,26 +42,56 @@ class UserPropAction extends UserAction implements Method {
}
+
+ /**
+ * Save the user properties.
+ */
public function post() {
- if ( ! $this->request->getText('name') )
- throw new \util\exception\ValidationException( 'name');
+ $this->request->handleText('name', function($name) {
+ $this->user->name = $name;
+ } );
+
+ $this->request->handleText('fullname', function($fullname) {
+ $this->user->fullname = $fullname;
+ });
+
+ $this->request->handleBoolDefaultFalse('is_admin', function($isAdmin) {
+ $this->user->isAdmin = $isAdmin;
+ });
+
+ $this->request->handleText( 'tel',function($tel) {
+ $this->user->tel = $tel;
+ });
+
+ $this->request->handleText( 'desc',function($desc) {
+ $this->user->desc = $desc;
+ });
+
+ $this->request->handleText( 'language',function($language) {
+ $this->user->language = $language;
+ });
+
+ $this->request->handleText( 'timezone',function($timezone) {
+ $this->user->timezone = $timezone;
+ });
+
+ $this->request->handleText( 'hotp',function($hotp) {
+ $this->user->hotp = $hotp;
+ });
- // Benutzer speichern
- $this->user->name = $this->request->getText('name' );
- $this->user->fullname = $this->request->getText('fullname');
- $this->user->isAdmin = $this->request->has('is_admin');
- $this->user->tel = $this->request->getText('tel' );
- $this->user->desc = $this->request->getText('desc' );
- $this->user->language = $this->request->getText('language');
- $this->user->timezone = $this->request->getText('timezone');
- $this->user->hotp = $this->request->has('hotp' );
- $this->user->totp = $this->request->has('totp' );
+ $this->request->handleText( 'totp',function($value) {
+ $this->user->totp = $value;
+ });
if ( Configuration::get(['security','user','show_admin_mail']) )
- $this->user->mail = $this->request->getText('mail' );
+ $this->request->handleText( 'mail',function($value) {
+ $this->user->mail = $value;
+ });
- $this->user->style = $this->request->getText('style' );
+ $this->request->handleText( 'style',function($value) {
+ $this->user->style = $value;
+ });
$this->user->persist();
$this->addNoticeFor($this->user,Messages::SAVED);