From cc9695b29230b405b8f8d1c24dbc68913a0b8eae Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Fri, 12 Apr 2019 15:56:00 +0200 Subject: [PATCH] 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. --- src/admin/clubs.php | 13 +++ src/admin/controller.php | 9 +++ src/admin/controllers/user.php | 11 +++ src/admin/controllers/users.php | 18 +++++ src/admin/models/forms/changeuser.xml | 76 ++++++++++++++++++ src/admin/models/forms/newuser.xml | 96 +++++++++++++++++++++++ src/admin/models/rules/clubusername.php | 41 ++++++++++ src/admin/models/user.php | 91 +++++++++++++++++++++ src/admin/models/users.php | 22 ++++++ src/admin/tables/user.php | 21 +++++ src/admin/views/user/tmpl/edit.php | 26 ++++++ src/admin/views/user/view.html.php | 61 ++++++++++++++ src/admin/views/users/tmpl/default.php | 73 +++++++++++++++++ src/admin/views/users/view.html.php | 28 +++++++ src/clubs.xml | 6 +- src/site/controller.php | 25 +++++- src/site/css/clubs.css | 8 +- src/site/models/searchperson.php | 13 +++ src/site/{js => views/clubassoc}/assoc.js | 0 src/site/views/clubassoc/tmpl/default.php | 8 +- src/site/views/clubassoc/view.html.php | 7 +- 21 files changed, 643 insertions(+), 10 deletions(-) create mode 100644 src/admin/controllers/user.php create mode 100644 src/admin/controllers/users.php create mode 100644 src/admin/models/forms/changeuser.xml create mode 100644 src/admin/models/forms/newuser.xml create mode 100644 src/admin/models/rules/clubusername.php create mode 100644 src/admin/models/user.php create mode 100644 src/admin/models/users.php create mode 100644 src/admin/tables/user.php create mode 100644 src/admin/views/user/tmpl/edit.php create mode 100644 src/admin/views/user/view.html.php create mode 100644 src/admin/views/users/tmpl/default.php create mode 100644 src/admin/views/users/view.html.php create mode 100644 src/site/models/searchperson.php rename src/site/{js => views/clubassoc}/assoc.js (100%) diff --git a/src/admin/clubs.php b/src/admin/clubs.php index aea8f99..58ca6d0 100644 --- a/src/admin/clubs.php +++ b/src/admin/clubs.php @@ -1,5 +1,18 @@ input; + +$task = $input->getCmd("task", "display"); + +$view = $input->getCmd('view', 'users'); +$input->set('view', $view); + +$controller->execute($task); +$controller->redirect(); diff --git a/src/admin/controller.php b/src/admin/controller.php index 134a89f..edebd9f 100644 --- a/src/admin/controller.php +++ b/src/admin/controller.php @@ -8,4 +8,13 @@ defined('_JEXEC') or die; 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); + } + } diff --git a/src/admin/controllers/user.php b/src/admin/controllers/user.php new file mode 100644 index 0000000..4b87f6a --- /dev/null +++ b/src/admin/controllers/user.php @@ -0,0 +1,11 @@ + true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } + +} \ No newline at end of file diff --git a/src/admin/models/forms/changeuser.xml b/src/admin/models/forms/changeuser.xml new file mode 100644 index 0000000..2df793b --- /dev/null +++ b/src/admin/models/forms/changeuser.xml @@ -0,0 +1,76 @@ + +
+
+ + + + + + + + + +
+
diff --git a/src/admin/models/forms/newuser.xml b/src/admin/models/forms/newuser.xml new file mode 100644 index 0000000..3f265d2 --- /dev/null +++ b/src/admin/models/forms/newuser.xml @@ -0,0 +1,96 @@ + +
+
+ + + + + + + + + + + +
+
diff --git a/src/admin/models/rules/clubusername.php b/src/admin/models/rules/clubusername.php new file mode 100644 index 0000000..a67c3ac --- /dev/null +++ b/src/admin/models/rules/clubusername.php @@ -0,0 +1,41 @@ +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; + } + +} \ No newline at end of file diff --git a/src/admin/models/user.php b/src/admin/models/user.php new file mode 100644 index 0000000..535755a --- /dev/null +++ b/src/admin/models/user.php @@ -0,0 +1,91 @@ +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) + {} + + +} \ No newline at end of file diff --git a/src/admin/models/users.php b/src/admin/models/users.php new file mode 100644 index 0000000..8d914a9 --- /dev/null +++ b/src/admin/models/users.php @@ -0,0 +1,22 @@ +getDbo(); + $q = $db->getQuery(true); + + $q->select('*') + ->from('#__club_users'); + + return $q; + } + +} \ No newline at end of file diff --git a/src/admin/tables/user.php b/src/admin/tables/user.php new file mode 100644 index 0000000..028c652 --- /dev/null +++ b/src/admin/tables/user.php @@ -0,0 +1,21 @@ + + +
+
+
+ +
+
+ form->getFieldset() as $field): ?> +
+
label; ?>
+
input; ?>
+
+ +
+
+
+
+ + +
diff --git a/src/admin/views/user/view.html.php b/src/admin/views/user/view.html.php new file mode 100644 index 0000000..6057dc4 --- /dev/null +++ b/src/admin/views/user/view.html.php @@ -0,0 +1,61 @@ +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('
', $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ügen'; + } + else + { + $title = 'Benutzer bearbeiten'; + } + + ToolbarHelper::title($title, 'user'); + ToolbarHelper::save('user.save'); + ToolbarHelper::cancel('user.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE'); + } + +} diff --git a/src/admin/views/users/tmpl/default.php b/src/admin/views/users/tmpl/default.php new file mode 100644 index 0000000..7876cec --- /dev/null +++ b/src/admin/views/users/tmpl/default.php @@ -0,0 +1,73 @@ + + +
+ + + + + + + + + + + + + + + + + + + users)) : ?> + users as $i => $row) : ?> + id); ?> + + + + + + + + + + + + +
Nr. + + + Name + + Ort + + Username + + Id +
+ pagination->getListFooter(); ?> +
+ pagination->getRowOffset($i); ?> + + id); ?> + + name); ?> + + city); ?> + + user); ?> + + id; ?> +
+ + + + +
diff --git a/src/admin/views/users/view.html.php b/src/admin/views/users/view.html.php new file mode 100644 index 0000000..2f034d4 --- /dev/null +++ b/src/admin/views/users/view.html.php @@ -0,0 +1,28 @@ +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'); + } +} diff --git a/src/clubs.xml b/src/clubs.xml index 518fc17..1301ee2 100644 --- a/src/clubs.xml +++ b/src/clubs.xml @@ -44,9 +44,9 @@ Vereinsmanagement - - - + clubs.php controller.php diff --git a/src/site/controller.php b/src/site/controller.php index 6f76b47..2e0d713 100644 --- a/src/site/controller.php +++ b/src/site/controller.php @@ -1,6 +1,7 @@ input->get('view', $this->default_view); + if($this->checkAuth($viewName)) + 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 + } } + } diff --git a/src/site/css/clubs.css b/src/site/css/clubs.css index e80fded..925ae59 100644 --- a/src/site/css/clubs.css +++ b/src/site/css/clubs.css @@ -14,10 +14,14 @@ margin: 10px 0px; } -input.clubs, -textarea.clubs +.clubs_content_row > input.clubs[type="text"], +.clubs_content_row > textarea.clubs, +.clubs_content_row > select.clubs { width: 100%; + box-sizing: border-box; + height: auto; + padding: 10px 10px; } table.clubs > tbody > tr > th diff --git a/src/site/models/searchperson.php b/src/site/models/searchperson.php new file mode 100644 index 0000000..c66d0ce --- /dev/null +++ b/src/site/models/searchperson.php @@ -0,0 +1,13 @@ +
Funktion im Verein
-
userFunction;?>
+
+ +
diff --git a/src/site/views/clubassoc/view.html.php b/src/site/views/clubassoc/view.html.php index 1585460..cda6d4e 100644 --- a/src/site/views/clubassoc/view.html.php +++ b/src/site/views/clubassoc/view.html.php @@ -27,6 +27,11 @@ class ClubsViewClubAssoc extends HtmlView $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->address = "Strasse 1\n66123 Ort"; $this->contactperson = "Max Mustermann"; @@ -59,7 +64,7 @@ class ClubsViewClubAssoc extends HtmlView HTMLHelper::_('jquery.framework'); 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); }