General jQuery based approach in frontend is working.
This commit is contained in:
parent
a2eb141d5c
commit
a30e5d76a1
59
src/site/controllers/parts.json.php
Normal file
59
src/site/controllers/parts.json.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
use Joomla\CMS\MVC\Controller\BaseController;
|
||||
use Joomla\CMS\Response\JsonResponse;
|
||||
use Joomla\CMS\Factory;
|
||||
|
||||
// No direct access.
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
abstract class UserException extends Exception {}
|
||||
class InvalidUserDataException extends UserException {}
|
||||
|
||||
class ClubsControllerParts extends BaseController
|
||||
{
|
||||
|
||||
public function edit()
|
||||
{
|
||||
$auth = new ClubsHelperAuth();
|
||||
$user = $auth->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');
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
@ -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");
|
||||
|
30
src/site/js/edit.js
Normal file
30
src/site/js/edit.js
Normal file
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
@ -12,37 +12,60 @@ defined('_JEXEC') or die;
|
||||
|
||||
<div class='clubs_row'>
|
||||
<div class='clubs_title_row'>Name</div>
|
||||
<div class='clubs_content_row'><?php echo htmlentities($this->me->getName()); ?></div>
|
||||
<div class='clubs_content_row'>
|
||||
<a class='clubs-edit' href='index.php?option=com_clubs&view=mypage&layout=parts&mode=edit&type=name'>
|
||||
<?php echo htmlentities($this->me->getName()); ?>
|
||||
<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='clubs_row'>
|
||||
<div class='clubs_title_row'>Benutzer-Alias</div>
|
||||
<div class='clubs_content_row'><?php echo htmlentities($this->me->getUsername()); ?></div>
|
||||
<div class='clubs_content_row'>
|
||||
<?php echo htmlentities($this->me->getUsername()); ?>
|
||||
<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='clubs_row'>
|
||||
<div class='clubs_title_row'>Adresse</div>
|
||||
<div class='clubs_content_row'><?php echo nl2br(htmlentities($this->me->getAddress())); ?></div>
|
||||
<div class='clubs_content_row address-field'>
|
||||
<?php echo nl2br(htmlentities($this->me->getAddress())); ?>
|
||||
<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='clubs_row'>
|
||||
<div class='clubs_title_row'>Stadt</div>
|
||||
<div class='clubs_content_row'><?php echo htmlentities($this->me->getCity()); ?></div>
|
||||
<div class='clubs_content_row'>
|
||||
<?php echo htmlentities($this->me->getCity()); ?>
|
||||
<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='clubs_row'>
|
||||
<div class='clubs_title_row'>E-Mail-Adresse</div>
|
||||
<div class='clubs_content_row'><?php echo htmlentities($this->me->getMail()); ?></div>
|
||||
<div class='clubs_content_row'>
|
||||
<?php echo htmlentities($this->me->getMail()); ?>
|
||||
<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='clubs_row'>
|
||||
<div class='clubs_title_row'>Telefon-Nr.</div>
|
||||
<div class='clubs_content_row'><?php echo $this->me->getPhone() !== null ? htmlentities($this->me->getPhone()) : '<i>nicht angegeben</i>'; ?></div>
|
||||
<div class='clubs_content_row'>
|
||||
<?php echo $this->me->getPhone() !== null ? htmlentities($this->me->getPhone()) : '<i>nicht angegeben</i>'; ?>
|
||||
<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='clubs_row'>
|
||||
<div class='clubs_title_row'>Handy-Nr.</div>
|
||||
<div class='clubs_content_row'><?php echo $this->me->getMobile() !== null ? htmlentities($this->me->getMobile()) : '<i>nicht angegeben</i>'; ?></div>
|
||||
<div class='clubs_content_row'>
|
||||
<?php echo $this->me->getMobile() !== null ? htmlentities($this->me->getMobile()) : '<i>nicht angegeben</i>'; ?>
|
||||
<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
50
src/site/views/mypage/tmpl/parts.php
Normal file
50
src/site/views/mypage/tmpl/parts.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
|
||||
// No direct access.
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
$input = Factory::getApplication()->input;
|
||||
$type = $input->get->getCmd('type');
|
||||
$mode = $input->get->getCmd('mode', 'view');
|
||||
|
||||
$auth = new ClubsHelperAuth();
|
||||
$user = $auth->getCurrentUser();
|
||||
|
||||
if($mode === 'edit')
|
||||
{
|
||||
echo "<form method='POST' action='index.php?option=com_clubs&task=parts.edit&format=json'>";
|
||||
|
||||
switch($type)
|
||||
{
|
||||
case 'name':
|
||||
$partname = 'user.name';
|
||||
$value = $user->getName();
|
||||
$value = htmlentities($value);
|
||||
$content = "<input name='name' value='$value'>";
|
||||
break;
|
||||
}
|
||||
echo "<input type='hidden' name='partname' value='$partname'>";
|
||||
echo $content;
|
||||
echo ' <a class="clubs-save" href="#"><span class="icon-ok"></span></a> ';
|
||||
echo '<a class="clubs-abort" href="index.php?option=com_clubs&view=mypage&layout=parts&type='.$type.'"><span class="icon-cancel-2"></span></a>';
|
||||
echo '</form>';
|
||||
}
|
||||
elseif ($mode === 'view')
|
||||
{
|
||||
switch ($type)
|
||||
{
|
||||
case 'name':
|
||||
$content = htmlentities($user->getName());
|
||||
$partname = 'name';
|
||||
break;
|
||||
}
|
||||
|
||||
echo "<a class='clubs-edit' href='index.php?option=com_clubs&view=mypage&layout=parts&mode=edit&type=$partname'>";
|
||||
echo $content;
|
||||
echo "<span class='icon-apply clubs-hidden edit-icon' style='font-size: 200%; margin-left: 0.75em;'></span></a>";
|
||||
}
|
||||
|
||||
jexit();
|
||||
|
@ -1,6 +1,9 @@
|
||||
<?php
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\MVC\View\HtmlView;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
// No direct access.
|
||||
defined('_JEXEC') or die;
|
||||
@ -10,13 +13,14 @@ class ClubsViewMyPage extends HtmlView
|
||||
|
||||
public function display($tpl = null)
|
||||
{
|
||||
$userFactory = new CommonClubsModelFactoryUser();
|
||||
$users = $userFactory->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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user