com_clubs/src/site/controllers/parts.json.php

86 lines
2.0 KiB
PHP
Raw Normal View History

<?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 {}
2019-06-18 17:09:52 +02:00
class ClubsHelperControllerUser
{
public function parse($fcnName, $user, $post)
{
switch($fcnName)
{
case 'name':
return $this->editName($user, $post);
default:
throw new Exception();
}
}
public function editName($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();
return 'index.php?option=com_clubs&view=mypage&layout=parts&type=name';
}
}
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)
{
2019-06-18 17:09:52 +02:00
$partname = $post->getCmd('partname');
if(! preg_match('/.*\..*/', $partname))
throw new Exception();
list($objname, $fcnName) = explode('.', $partname, 2);
switch($objname)
{
2019-06-18 17:09:52 +02:00
case 'user':
$obj = new ClubsHelperControllerUser();
return $obj->parse($fcnName, $user, $post);
default:
throw new Exception();
}
}
}