Compare commits

...

1 Commits

Author SHA1 Message Date
cc9695b292 Added part of backend but problems with Joomla code compatibility found.
Somehow the password must be handled specially (also because of the hashing) which causes problems at the moment.
2019-04-12 15:56:00 +02:00
21 changed files with 643 additions and 10 deletions

View File

@ -1,5 +1,18 @@
<?php <?php
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Factory;
// No direct access. // No direct access.
defined('_JEXEC') or die; defined('_JEXEC') or die;
$controller = BaseController::getInstance("Clubs");
$input = Factory::getApplication()->input;
$task = $input->getCmd("task", "display");
$view = $input->getCmd('view', 'users');
$input->set('view', $view);
$controller->execute($task);
$controller->redirect();

View File

@ -8,4 +8,13 @@ defined('_JEXEC') or die;
class ClubsController extends BaseController class ClubsController extends BaseController
{ {
protected $default_view = 'users';
public function display($cachable = false, $urlparams = array())
{
$this->input->get('view', $this->default_view);
parent::display($cachable, $urlparams);
}
} }

View File

@ -0,0 +1,11 @@
<?php
use Joomla\CMS\MVC\Controller\FormController;
// No direct access.
defined('_JEXEC') or die;
class ClubsControllerUser extends FormController
{
}

View File

@ -0,0 +1,18 @@
<?php
use Joomla\CMS\MVC\Controller\AdminController;
// No direct access.
defined('_JEXEC') or die;
class ClubsControllerUsers extends AdminController
{
public function getModel($name = 'User', $prefix = 'ClubsModel', $config = array('ignore_request' => true))
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<form
addrulepath='/administrator/components/com_clubs/models/rules'
>
<fieldset>
<field
name="id"
type="hidden"
/>
<field
name="user"
type="text"
label="Benutzername"
size="40"
class="inputbox validate-clubusername"
required='true'
validate='clubusername'
message='Benutzername bereits vergeben'
default=""
/>
<field
name="name"
type="text"
label="Bürgerlicher Name"
size="40"
class="inputbox"
required='true'
default=""
/>
<field
name="address"
type="textarea"
label="Adresse"
size="40"
class="inputbox"
required='true'
default=""
/>
<field
name="city"
type="text"
label="Stadt"
size="40"
class="inputbox"
required='true'
default=""
/>
<field
name="mail"
type="text"
label="E-Mail-Adresse"
size="40"
class="inputbox"
required='true'
validate='email'
default=""
/>
<field
name="phone"
type="text"
label="Telefon-Nr."
size="40"
class="inputbox"
default=""
/>
<field
name="mobile"
type="text"
label="Handy-Nr."
size="40"
class="inputbox"
default=""
/>
</fieldset>
</form>

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<form
addrulepath='/administrator/components/com_clubs/models/rules'
>
<fieldset>
<field
name="id"
type="hidden"
/>
<field
name="user"
type="text"
label="Benutzername"
size="40"
class="inputbox validate-clubusername"
required='true'
validate='clubusername'
message='Benutzername bereits vergeben'
default=""
/>
<field
name="password"
type="password"
label="Passwort"
size="40"
class="inputbox"
required='true'
default=""
/>
<field
name="password-confirm"
type="password"
label="Passwort wiederholen"
size="40"
class="inputbox"
required='true'
validate='equals' field='password-main'
message='Passwoerter stimmen nicht ueberein'
default=""
/>
<field
name="name"
type="text"
label="Bürgerlicher Name"
size="40"
class="inputbox"
required='true'
default=""
/>
<field
name="address"
type="textarea"
label="Adresse"
size="40"
class="inputbox"
required='true'
default=""
/>
<field
name="city"
type="text"
label="Stadt"
size="40"
class="inputbox"
required='true'
default=""
/>
<field
name="mail"
type="text"
label="E-Mail-Adresse"
size="40"
class="inputbox"
required='true'
validate='email'
default=""
/>
<field
name="phone"
type="text"
label="Telefon-Nr."
size="40"
class="inputbox"
default=""
/>
<field
name="mobile"
type="text"
label="Handy-Nr."
size="40"
class="inputbox"
default=""
/>
</fieldset>
</form>

View File

@ -0,0 +1,41 @@
<?php
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormRule;
use Joomla\Registry\Registry;
// No direct access.
defined('_JEXEC') or die;
class JFormRuleClubUserName extends FormRule
{
public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null)
{
// Get the database object and a new query object.
$db = Factory::getDbo();
$query = $db->getQuery(true);
// Build the query.
$query->select('COUNT(*)')
->from('#__club_users')
->where('user = ' . $db->quote($value));
// Get the extra field check attribute.
$userId = $input->get('id');
$query->where($db->quoteName('id') . ' <> ' . (int) $userId);
// Set and query the database.
$db->setQuery($query);
$duplicate = (bool) $db->loadResult();
if ($duplicate)
{
return false;
}
return true;
}
}

91
src/admin/models/user.php Normal file
View File

@ -0,0 +1,91 @@
<?php
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\CMS\Table\Table;
// No direct access.
defined('_JEXEC') or die;
class ClubsModelUser extends AdminModel
{
public function getTable($type = 'User', $prefix = 'ClubsTable', $config = array())
{
return Table::getInstance($type, $prefix, $config);
}
public function getFormNewUser($data = [], $loadData = true)
{
$form = $this->loadForm(
'com_clubs.newuser',
'newuser',
array(
'control' => 'jform',
'load_data' => $loadData
)
);
if (empty($form))
{
return false;
}
return $form;
}
public function getFormChangeUser($data = [], $loadData = true)
{
$form = $this->loadForm(
'com_clubs.changeuser',
'changeuser',
array(
'control' => 'jform',
'load_data' => $loadData
)
);
if (empty($form))
{
return false;
}
return $form;
}
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = Factory::getApplication()->getUserState(
'com_clubs.edit.user.data',
array()
);
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
protected function prepareTable($table)
{
/* define which columns can have NULL values */
$defnull = array('phone', 'mobile');
foreach ($defnull as $val)
/* define the rules when the value is set NULL */
if (!strlen($table->$val))
$table->$val = NULL;
if(isset($table->password))
{
}
}
function getForm($data = [], $loadData = true)
{}
}

View File

@ -0,0 +1,22 @@
<?php
use Joomla\CMS\MVC\Model\ListModel;
// No direct access.
defined('_JEXEC') or die;
class ClubsModelUsers extends ListModel
{
public function getListQuery()
{
$db = $this->getDbo();
$q = $db->getQuery(true);
$q->select('*')
->from('#__club_users');
return $q;
}
}

21
src/admin/tables/user.php Normal file
View File

@ -0,0 +1,21 @@
<?php
use Joomla\CMS\Table\Table;
// No direct access.
defined('_JEXEC') or die;
class ClubsTableUser extends Table
{
function __construct(&$db)
{
parent::__construct('#__club_users', 'id', $db);
}
public function store($updateNulls = false)
{
return parent::store(true);
}
}

View File

@ -0,0 +1,26 @@
<?php
// No direct access.
defined('_JEXEC') or die;
?>
<form action="<?php echo JRoute::_('index.php?option=com_clubs&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm">
<div class="form-horizontal">
<fieldset class="adminform">
<legend><?php echo JText::_('COM_HELLOWORLD_HELLOWORLD_DETAILS'); ?></legend>
<div class="row-fluid">
<div class="span6">
<?php foreach ($this->form->getFieldset() as $field): ?>
<div class="control-group">
<div class="control-label"><?php echo $field->label; ?></div>
<div class="controls"><?php echo $field->input; ?></div>
</div>
<?php endforeach; ?>
</div>
</div>
</fieldset>
</div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</form>

View File

@ -0,0 +1,61 @@
<?php
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\HtmlView;
use Joomla\CMS\Toolbar\ToolbarHelper;
// No direct access.
defined('_JEXEC') or die;
class ClubsViewUser extends HtmlView
{
public function display($tpl = null)
{
// Get the Data
$this->item = $this->get('Item');
$isNew = ($this->item->id == 0);
if($isNew)
$this->form = $this->get('FormNewUser');
else
$this->form = $this->get('FormChangeUser');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Set the toolbar
$this->addToolBar($isNew);
// Display the template
parent::display($tpl);
}
protected function addToolBar($isNew)
{
$input = Factory::getApplication()->input;
// Hide Joomla Administrator Main menu
$input->set('hidemainmenu', true);
if ($isNew)
{
$title = 'Benutzer hinzuf&uuml;gen';
}
else
{
$title = 'Benutzer bearbeiten';
}
ToolbarHelper::title($title, 'user');
ToolbarHelper::save('user.save');
ToolbarHelper::cancel('user.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE');
}
}

View File

@ -0,0 +1,73 @@
<?php
use Joomla\CMS\Router\Route;
// No direct access.
defined('_JEXEC') or die;
?>
<form action='index.php?option=com_clubs&view=users' method="post" id='adminForm' name='adminForm'>
<table class="table table-striped table-hover">
<thead>
<tr>
<th width="1%">Nr.</th>
<th width="2%">
<?php echo JHtmlGrid::checkall(); ?>
</th>
<th width="30%">
Name
</th>
<th width="30%">
Ort
</th>
<th width="10%">
Username
</th>
<th width="2%">
Id
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="5">
<?php echo $this->pagination->getListFooter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php if (!empty($this->users)) : ?>
<?php foreach ($this->users as $i => $row) : ?>
<?php $link = Route::_('index.php?option=com_clubs&task=user.edit&id=' . $row->id); ?>
<tr>
<td>
<?php echo $this->pagination->getRowOffset($i); ?>
</td>
<td>
<?php echo JHtmlGrid::id($i, $row->id); ?>
</td>
<td>
<a href='<?php echo $link; ?>'><?php echo htmlentities($row->name); ?></a>
</td>
<td>
<?php echo htmlentities($row->city); ?>
</td>
<td>
<?php echo htmlentities($row->user); ?>
</td>
<td align="center">
<?php echo $row->id; ?>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
<input type="hidden" name="task" value=""/>
<input type="hidden" name="boxchecked" value="0"/>
</form>

View File

@ -0,0 +1,28 @@
<?php
use Joomla\CMS\MVC\View\HtmlView;
use Joomla\CMS\Toolbar\ToolbarHelper;
// No direct access.
defined('_JEXEC') or die;
class ClubsViewUsers extends HtmlView
{
public function display(string $tpl = null)
{
$this->users = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->addToolBar();
parent::display($tpl);
}
private function addToolBar()
{
ToolbarHelper::title('Registrierte Benutzer', 'user');
ToolbarHelper::addNew('user.add');
ToolbarHelper::editList('user.edit');
ToolbarHelper::deleteList('', 'users.delete');
}
}

View File

@ -44,9 +44,9 @@
<administration> <administration>
<menu>Vereinsmanagement</menu> <menu>Vereinsmanagement</menu>
<submenu> <!--submenu>
<!-- <menu link='link' view='v'>Test</menu> --> <menu link='link' view='v'>Test</menu>
</submenu> </submenu>-->
<files from='admin'> <files from='admin'>
<filename>clubs.php</filename> <filename>clubs.php</filename>
<filename>controller.php</filename> <filename>controller.php</filename>

View File

@ -1,6 +1,7 @@
<?php <?php
use Joomla\CMS\MVC\Controller\BaseController; use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Factory;
// No direct access. // No direct access.
defined('_JEXEC') or die; defined('_JEXEC') or die;
@ -10,11 +11,29 @@ class ClubsController extends BaseController
public function display($cachable = false, $params = array()) public function display($cachable = false, $params = array())
{ {
$viewName = $this->input->get('view', $this->default_view);
if($this->checkAuth($viewName))
parent::display($cachable, $params); parent::display($cachable, $params);
else
{
Factory::getApplication()->enqueueMessage("Keine Rechte vorhanden. Bitte einloggen.");
$this->setRedirect('?option=com_clubs&view=login');
}
} }
public function foo() private function checkAuth($viewName)
{ {
echo "dsfh"; if($viewName === null)
return true;
switch($viewName)
{
case 'login':
return true;
default:
return true; // FIXME
} }
}
} }

View File

@ -14,10 +14,14 @@
margin: 10px 0px; margin: 10px 0px;
} }
input.clubs, .clubs_content_row > input.clubs[type="text"],
textarea.clubs .clubs_content_row > textarea.clubs,
.clubs_content_row > select.clubs
{ {
width: 100%; width: 100%;
box-sizing: border-box;
height: auto;
padding: 10px 10px;
} }
table.clubs > tbody > tr > th table.clubs > tbody > tr > th

View File

@ -0,0 +1,13 @@
<?php
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
// No direct access.
defined('_JEXEC') or die;
class ClubsModelSearchPerson extends BaseDatabaseModel
{
}

View File

@ -17,7 +17,13 @@ defined('_JEXEC') or die;
<div class='clubs_row'> <div class='clubs_row'>
<div class='clubs_title_row'>Funktion im Verein</div> <div class='clubs_title_row'>Funktion im Verein</div>
<div class='clubs_content_row'><?php echo $this->userFunction;?></div> <div class='clubs_content_row'>
<select name="userFunction" class='clubs'>
<?php foreach($this->functions as $f): ?>
<option value='<?php echo $f['functionid']; ?>' <?php if(isset($f['selected']) && $f['selected']) echo 'selected="selected"'; ?>><?php echo htmlentities($f['name']); ?></option>
<?php endforeach; ?>
</select>
</div>
</div> </div>
<div class='clubs_row'> <div class='clubs_row'>

View File

@ -27,6 +27,11 @@ class ClubsViewClubAssoc extends HtmlView
$this->mailDedicated = true; $this->mailDedicated = true;
$this->functions = array();
$this->functions[] = array('functionid'=>3, 'name'=>'Vorsitzender', 'selected'=>false);
$this->functions[] = array('functionid'=>4, 'name'=>'2. Vorsitzender', 'selected'=>true);
$this->functions[] = array('functionid'=>5, 'name'=>'Sportwart');
$this->clubname = "Testclub"; $this->clubname = "Testclub";
$this->address = "Strasse 1\n66123 Ort"; $this->address = "Strasse 1\n66123 Ort";
$this->contactperson = "Max Mustermann"; $this->contactperson = "Max Mustermann";
@ -59,7 +64,7 @@ class ClubsViewClubAssoc extends HtmlView
HTMLHelper::_('jquery.framework'); HTMLHelper::_('jquery.framework');
Factory::getDocument()->addStyleSheet(Uri::base(true) . "components/com_clubs/css/clubs.css"); Factory::getDocument()->addStyleSheet(Uri::base(true) . "components/com_clubs/css/clubs.css");
Factory::getDocument()->addScript(Uri::base(true) . "components/com_clubs/js/assoc.js"); Factory::getDocument()->addScript(Uri::base(true) . "components/com_clubs/views/clubassoc/assoc.js");
parent::display($tpl); parent::display($tpl);
} }