From a30e5d76a1c22377e6500ee3900f5a8da0308e0c Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Tue, 18 Jun 2019 16:44:44 +0200 Subject: [PATCH] General jQuery based approach in frontend is working. --- src/site/controllers/parts.json.php | 59 ++++++++++++++++++++++++++ src/site/css/clubs.css | 15 +++++++ src/site/helpers/auth.php | 11 +++++ src/site/js/edit.js | 30 +++++++++++++ src/site/views/mypage/tmpl/default.php | 37 +++++++++++++--- src/site/views/mypage/tmpl/parts.php | 50 ++++++++++++++++++++++ src/site/views/mypage/view.html.php | 10 +++-- 7 files changed, 202 insertions(+), 10 deletions(-) create mode 100644 src/site/controllers/parts.json.php create mode 100644 src/site/js/edit.js create mode 100644 src/site/views/mypage/tmpl/parts.php diff --git a/src/site/controllers/parts.json.php b/src/site/controllers/parts.json.php new file mode 100644 index 0000000..2290583 --- /dev/null +++ b/src/site/controllers/parts.json.php @@ -0,0 +1,59 @@ +getCurrentUser(); + $app = Factory::getApplication(); + $post = $app->input->post; + + try + { + $ret = $this->callMethod($user, $post); + echo new JsonResponse($ret); + } + catch(UserException $e) + { + echo new JsonResponse($e); + } + + } + + /** + * @param CommonClubsModelUser $user + * @param JInput $post + */ + private function callMethod($user, $post) + { + switch($post->getCmd('partname')) + { + case 'user.name': + return $this->editUserName($user, $post); + } + } + + private function editUserName($user, $post) + { + $name = $post->getString('name'); + if(strlen($name) < 5) + throw new InvalidUserDataException("Der Name muss mindestens 5 Zeichen lang sein."); + + $user->setName($name); + $user->save(); + $this->setRedirect('index.php?option=com_clubs&view=mypage&layout=parts&type=name'); + } + +} diff --git a/src/site/css/clubs.css b/src/site/css/clubs.css index e80fded..fe79d0a 100644 --- a/src/site/css/clubs.css +++ b/src/site/css/clubs.css @@ -29,3 +29,18 @@ table.clubs > tbody > tr > th { display: none !important; } + +.address-field +{ + line-height: 120%; +} + +.clubs_content_row .clubs-hidden +{ + display: none; +} + +.clubs_content_row:hover > a > .edit-icon +{ + display: inline-block; +} \ No newline at end of file diff --git a/src/site/helpers/auth.php b/src/site/helpers/auth.php index 481c47a..a392e84 100644 --- a/src/site/helpers/auth.php +++ b/src/site/helpers/auth.php @@ -15,6 +15,17 @@ class ClubsHelperAuth return true; } + /** + * @return CommonClubsModelUser + */ + public function getCurrentUser() + { + // FIXME This must be implemented + $userFactory = new CommonClubsModelFactoryUser(); + $users = $userFactory->loadElements(); + return $users[0]; + } + public function checkUser($user, $pwd) { $userModel = BaseDatabaseModel::getInstance("user", "ClubsModel"); diff --git a/src/site/js/edit.js b/src/site/js/edit.js new file mode 100644 index 0000000..b75eb4c --- /dev/null +++ b/src/site/js/edit.js @@ -0,0 +1,30 @@ + +jQuery(function($){ + + $(document).on('click', 'a.clubs-edit', function(ev){ + ev.preventDefault(); + var myA = $(this); + $.get(ev.currentTarget.href, function(d){ + myA.replaceWith(d); + }); + }); + + $(document).on('click', 'a.clubs-abort', function(ev){ + ev.preventDefault(); + var form = $(this).parent(); + $.get(this.href, function(d){ + form.replaceWith(d); + }); + }); + + $(document).on('click', 'a.clubs-save', function(ev){ + ev.preventDefault(); + var form = $(this).parent(); + $.post(form.attr('action'), form.serializeArray(), function(d){ + form.replaceWith(d); + }); + }); + + + +}); diff --git a/src/site/views/mypage/tmpl/default.php b/src/site/views/mypage/tmpl/default.php index 430a2de..171e795 100644 --- a/src/site/views/mypage/tmpl/default.php +++ b/src/site/views/mypage/tmpl/default.php @@ -12,37 +12,60 @@ defined('_JEXEC') or die;
Name
-
me->getName()); ?>
+
Benutzer-Alias
-
me->getUsername()); ?>
+
+ me->getUsername()); ?> + +
Adresse
-
me->getAddress())); ?>
+
+ me->getAddress())); ?> + +
Stadt
-
me->getCity()); ?>
+
+ me->getCity()); ?> + +
E-Mail-Adresse
-
me->getMail()); ?>
+
+ me->getMail()); ?> + +
Telefon-Nr.
-
me->getPhone() !== null ? htmlentities($this->me->getPhone()) : 'nicht angegeben'; ?>
+
+ me->getPhone() !== null ? htmlentities($this->me->getPhone()) : 'nicht angegeben'; ?> + +
Handy-Nr.
-
me->getMobile() !== null ? htmlentities($this->me->getMobile()) : 'nicht angegeben'; ?>
+
+ me->getMobile() !== null ? htmlentities($this->me->getMobile()) : 'nicht angegeben'; ?> + +
diff --git a/src/site/views/mypage/tmpl/parts.php b/src/site/views/mypage/tmpl/parts.php new file mode 100644 index 0000000..59cd349 --- /dev/null +++ b/src/site/views/mypage/tmpl/parts.php @@ -0,0 +1,50 @@ +input; +$type = $input->get->getCmd('type'); +$mode = $input->get->getCmd('mode', 'view'); + +$auth = new ClubsHelperAuth(); +$user = $auth->getCurrentUser(); + +if($mode === 'edit') +{ + echo "
"; + + switch($type) + { + case 'name': + $partname = 'user.name'; + $value = $user->getName(); + $value = htmlentities($value); + $content = ""; + break; + } + echo ""; + echo $content; + echo '  '; + echo ''; + echo '
'; +} +elseif ($mode === 'view') +{ + switch ($type) + { + case 'name': + $content = htmlentities($user->getName()); + $partname = 'name'; + break; + } + + echo ""; + echo $content; + echo ""; +} + +jexit(); + diff --git a/src/site/views/mypage/view.html.php b/src/site/views/mypage/view.html.php index 0dba28c..183d984 100644 --- a/src/site/views/mypage/view.html.php +++ b/src/site/views/mypage/view.html.php @@ -1,6 +1,9 @@ loadElements(); - $this->me = $users[0]; + $auth = new ClubsHelperAuth(); + $this->me = $auth->getCurrentUser(); $this->clubsPresident = $this->me->getPresidentClubs(); $this->positions = $this->me->getPositions(); + HTMLHelper::_('jquery.framework'); + Factory::getDocument()->addScript(Uri::base(true) . "components/com_clubs/js/edit.js"); parent::display($tpl); } }