Compare commits
72 Commits
master
...
dev/self-b
Author | SHA1 | Date | |
---|---|---|---|
a2eb141d5c | |||
1d1bde1a8d | |||
5179ea9de5 | |||
759f04d34f | |||
52a5ebea3a | |||
7411516c5b | |||
3d9d244b65 | |||
c6708a2e1c | |||
dff733699f | |||
b96506c8ae | |||
44e90e2adb | |||
c95b3c31a6 | |||
28494f6142 | |||
7210dff28c | |||
404ccf3498 | |||
150dfd8f60 | |||
9cef15b4f5 | |||
e3008b8789 | |||
40b88859cd | |||
60abc189ec | |||
fc85e6b322 | |||
16e7ed0bc0 | |||
616a0b7dd9 | |||
1b43ab8356 | |||
319911d52f | |||
65ccfe23f7 | |||
eb704af915 | |||
904d31843a | |||
dd52d7ca31 | |||
4ce8fd274d | |||
4fa01d4cc0 | |||
d93a02e779 | |||
8dbbb4d245 | |||
5a359ad97a | |||
92481a62ac | |||
dec4bb5165 | |||
7bf2386851 | |||
e6db7787ef | |||
8b25925ec4 | |||
23941f32d3 | |||
a9caa06e02 | |||
ed47052a59 | |||
d48d7eb853 | |||
7c18f48b2a | |||
cb624c19eb | |||
b868f0fe86 | |||
b3e28d7884 | |||
cb6068bfd6 | |||
fd0a0f7f4d | |||
51c910e51f | |||
852f110967 | |||
6209d1aca6 | |||
f4f59dcc81 | |||
5ce47c288d | |||
4dc78c21af | |||
f8df0c3fc4 | |||
c459e1d332 | |||
03df8c8f1a | |||
17e737b64c | |||
47c81d3ce9 | |||
6e1326240b | |||
4b2dbff104 | |||
893dc754f0 | |||
b08b01689f | |||
22566986a8 | |||
e801770b80 | |||
0bafe438e2 | |||
63caca5b80 | |||
5f91d76147 | |||
604ac0e84f | |||
8aaf1bf057 | |||
9c407e750f |
@ -1,6 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<buildpath>
|
<buildpath>
|
||||||
<buildpathentry kind="src" path="src"/>
|
<buildpathentry kind="src" path="src"/>
|
||||||
|
<buildpathentry external="true" kind="lib" path="/home/private/slt/joomla">
|
||||||
|
<accessrules>
|
||||||
|
<accessrule kind="nonaccessible" pattern="administrator/components/com_clubs"/>
|
||||||
|
</accessrules>
|
||||||
|
</buildpathentry>
|
||||||
<buildpathentry external="true" kind="lib" path="/srv/slt-dev"/>
|
<buildpathentry external="true" kind="lib" path="/srv/slt-dev"/>
|
||||||
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
|
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
|
||||||
|
<buildpathentry external="true" kind="lib" path="/srv/http/slt"/>
|
||||||
</buildpath>
|
</buildpath>
|
||||||
|
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/clubs.tar.gz
|
||||||
|
/slt-update.xml
|
||||||
|
|
@ -1,2 +1,2 @@
|
|||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
include_path=1;/srv/slt-dev
|
include_path=1;/srv/slt-dev\u00051;/srv/http/slt\u00051;/home/private/slt/joomla
|
||||||
|
2
.settings/org.eclipse.php.ui.prefs
Normal file
2
.settings/org.eclipse.php.ui.prefs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.php.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
|
47
Makefile
Normal file
47
Makefile
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
# UPDATE_PATH=/srv/slt-update
|
||||||
|
PACKAGES = clubs.tar.gz
|
||||||
|
|
||||||
|
export DL_PREFIX=https://slt.wolf-stuttgart.net/update/com_clubs
|
||||||
|
|
||||||
|
RSYNC_OPTIONS=-rltDz --delete --delete-delay --delete-excluded --exclude '.gitignore' --exclude '.dummy'
|
||||||
|
RSYNC_USER=christian
|
||||||
|
RSYNC_HOST=hh.wolf-stuttgart.net
|
||||||
|
DL_PATH=/srv/http/slt/update/com_clubs
|
||||||
|
|
||||||
|
all: package
|
||||||
|
|
||||||
|
package: $(PACKAGES)
|
||||||
|
|
||||||
|
.PHONY: clubs.tar.gz
|
||||||
|
clubs.tar.gz:
|
||||||
|
tar czf $@ -C src .
|
||||||
|
|
||||||
|
.PHONY: release
|
||||||
|
release: clubs.tar.gz
|
||||||
|
./scripts/create-release.sh
|
||||||
|
|
||||||
|
.PHONY: release-force
|
||||||
|
release-force: clubs.tar.gz
|
||||||
|
./scripts/create-release.sh -f
|
||||||
|
|
||||||
|
.PHONY: upload
|
||||||
|
upload: release
|
||||||
|
$(MAKE) reupload
|
||||||
|
|
||||||
|
.PHONY: slt-update.xml
|
||||||
|
slt-update.xml:
|
||||||
|
./scripts/create-update-xml.sh
|
||||||
|
|
||||||
|
.PHONY: reupload
|
||||||
|
reupload: slt-update.xml
|
||||||
|
@echo Pushing files
|
||||||
|
@rsync $(RSYNC_OPTIONS) releases/ $(RSYNC_USER)@$(RSYNC_HOST):$(DL_PATH)/files -v
|
||||||
|
|
||||||
|
@echo Pushing XML configuration
|
||||||
|
@rsync $(RSYNC_OPTIONS) slt-update.xml $(RSYNC_USER)@$(RSYNC_HOST):$(DL_PATH)
|
||||||
|
|
||||||
|
#
|
||||||
|
# .PHONY: update
|
||||||
|
# update: $(PACKAGES)
|
||||||
|
# cp slt.xml slt1.tar.gz $(UPDATE_PATH)
|
9
TODO.md
Normal file
9
TODO.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
# Aufgaben
|
||||||
|
|
||||||
|
## Backend
|
||||||
|
|
||||||
|
- Bilder fuer Loeschen statt des Textes Del einsetzen
|
||||||
|
- Optik anpassen mit CSS
|
||||||
|
|
||||||
|
## Frontend
|
0
releases/.dummy
Normal file
0
releases/.dummy
Normal file
BIN
releases/clubs-0.0.1.tar.gz
Normal file
BIN
releases/clubs-0.0.1.tar.gz
Normal file
Binary file not shown.
1
res/postfix.template
Normal file
1
res/postfix.template
Normal file
@ -0,0 +1 @@
|
|||||||
|
</updates>
|
2
res/prefix.template
Normal file
2
res/prefix.template
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<updates>
|
16
res/update.template
Normal file
16
res/update.template
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<update>
|
||||||
|
<name>SLT Vereinsverwaltung</name>
|
||||||
|
<description>Vereinsportal des saarländischen Tanzsportverbands</description>
|
||||||
|
<element>com_clubs</element>
|
||||||
|
<type>component</type>
|
||||||
|
<client>0</client>
|
||||||
|
<version>__VERSION__</version>
|
||||||
|
<downloads>
|
||||||
|
<downloadurl type="full" format="__FORMAT__">__DOWNLOAD_URL__</downloadurl>
|
||||||
|
</downloads>
|
||||||
|
<tags>
|
||||||
|
<tag>stable</tag>
|
||||||
|
</tags>
|
||||||
|
<maintainer>Christian Wolf</maintainer>
|
||||||
|
<targetplatform name="joomla" version=".*"/>
|
||||||
|
</update>
|
23
scripts/create-release.sh
Executable file
23
scripts/create-release.sh
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
MAJOR=`cat serial/major`
|
||||||
|
MINOR=`cat serial/minor`
|
||||||
|
RELEASE=`cat serial/release`
|
||||||
|
TOTRELEASE="$MAJOR.$MINOR.$RELEASE"
|
||||||
|
|
||||||
|
outname="releases/clubs-$TOTRELEASE.tar.gz"
|
||||||
|
|
||||||
|
mkdir -p releases
|
||||||
|
|
||||||
|
# First check if the named release exists already
|
||||||
|
if [ -f "$outname" ]; then
|
||||||
|
if [ "$1" = '-f' ]; then
|
||||||
|
echo "Overwriting existing file $outname."
|
||||||
|
else
|
||||||
|
echo "The file $outname existes already. Either remove the release from the folder manually or increase the release version."
|
||||||
|
echo "Aborting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp clubs.tar.gz "$outname"
|
23
scripts/create-update-xml.sh
Executable file
23
scripts/create-update-xml.sh
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# DL_PREFIX="https://slt.wolf-stuttgart.net/update/template"
|
||||||
|
|
||||||
|
cat res/prefix.template > slt-update.xml
|
||||||
|
|
||||||
|
find releases -name clubs-\* | while read f
|
||||||
|
do
|
||||||
|
|
||||||
|
VSTR=`echo "$f" | sed -E 's@releases/clubs-@@; s@^([0-9]+\.[0-9]+\.[0-9]+).*$@\1@'`
|
||||||
|
|
||||||
|
FILE=`echo "$f" | sed 's@releases/@@'`
|
||||||
|
FORMAT=`echo "$f" | sed -E 's@^.*[0-9]+\.[0-9]+\.[0-9]+\.@@'`
|
||||||
|
|
||||||
|
sed '
|
||||||
|
s@__VERSION__@'"$VSTR"'@g;
|
||||||
|
s@__DOWNLOAD_URL__@'"$DL_PREFIX/files/$FILE"'@g;
|
||||||
|
s@__FORMAT__@'"$FORMAT"'@g
|
||||||
|
' res/update.template >> slt-update.xml
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
cat res/postfix.template >> slt-update.xml
|
1
serial/major
Normal file
1
serial/major
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
1
serial/minor
Normal file
1
serial/minor
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
1
serial/release
Normal file
1
serial/release
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
24
sql/init2.sql
Normal file
24
sql/init2.sql
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
CREATE TABLE `dev_club_keys` (
|
||||||
|
`privkey` text NOT NULL,
|
||||||
|
`publickey` text NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_users` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`user` varchar(30) NOT NULL,
|
||||||
|
`password` varchar(150) DEFAULT NULL,
|
||||||
|
`name` varchar(255) NOT NULL,
|
||||||
|
`address` tinytext NOT NULL,
|
||||||
|
`city` varchar(50) NOT NULL,
|
||||||
|
`mail` varchar(100) NOT NULL,
|
||||||
|
`phone` varchar(50) DEFAULT NULL,
|
||||||
|
`mobile` varchar(50) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_offers` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
76
sql/init3.sql
Normal file
76
sql/init3.sql
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
CREATE TABLE `dev_club_keys` (
|
||||||
|
`privkey` text NOT NULL,
|
||||||
|
`publickey` text NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_users` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`user` varchar(30) NOT NULL,
|
||||||
|
`password` varchar(150) DEFAULT NULL,
|
||||||
|
`name` varchar(255) NOT NULL,
|
||||||
|
`address` tinytext NOT NULL,
|
||||||
|
`city` varchar(50) NOT NULL,
|
||||||
|
`mail` varchar(100) NOT NULL,
|
||||||
|
`phone` varchar(50) DEFAULT NULL,
|
||||||
|
`mobile` varchar(50) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_offers` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_positions` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_clubs` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
`address` tinytext NOT NULL,
|
||||||
|
`city` varchar(50) NOT NULL,
|
||||||
|
`homepage` varchar(100) NULL,
|
||||||
|
`mail` varchar(100) NOT NULL,
|
||||||
|
`iban` char(34) NOT NULL,
|
||||||
|
`bic` char(11) NOT NULL,
|
||||||
|
`charitable` tinyint(1) NOT NULL,
|
||||||
|
`president` int(10) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_offer_assocs` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`clubid` int(10) NOT NULL,
|
||||||
|
`offerid` int(10) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_places` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`clubid` int(10) NOT NULL,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
`address` tinytext NOT NULL,
|
||||||
|
`area` int(10) NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `dev_club_user_assocs` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`clubid` int(10) NOT NULL,
|
||||||
|
`userid` int(10) NOT NULL,
|
||||||
|
`positionid` int(10) NOT NULL,
|
||||||
|
`admin` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`state` enum('regular', 'vacant', 'temporary') NOT NULL DEFAULT 'vacant',
|
||||||
|
`address` tinytext DEFAULT NULL,
|
||||||
|
`mail` varchar(100) DEFAULT NULL,
|
||||||
|
`phone` varchar(50) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
220
src/admin/abstract/controller.php
Normal file
220
src/admin/abstract/controller.php
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\MVC\Controller\BaseController;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class DataParsingException extends Exception {}
|
||||||
|
class DataInvalidException extends Exception {}
|
||||||
|
|
||||||
|
abstract class AbstractClubsController extends BaseController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return AbstractCommonClubsModelFactory
|
||||||
|
*/
|
||||||
|
protected abstract function getFactory();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string The name of the underlying object in lower letters.
|
||||||
|
*/
|
||||||
|
protected abstract function getSingleBaseName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string The name of the view to show a single object
|
||||||
|
*/
|
||||||
|
protected function getSingleViewName()
|
||||||
|
{
|
||||||
|
return $this->getSingleBaseName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function new()
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
$obj = $factory->createNew();
|
||||||
|
|
||||||
|
$this->saveToDatabase($obj, 'new');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function change()
|
||||||
|
{
|
||||||
|
$app = Factory::getApplication();
|
||||||
|
$input = $app->input;
|
||||||
|
$id = (int) $input->post->getInt('id');
|
||||||
|
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
$obj = $factory->loadById($id);
|
||||||
|
|
||||||
|
$this->saveToDatabase($obj, $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param AbstractCommonClubsModel $obj
|
||||||
|
* @param int $id
|
||||||
|
*/
|
||||||
|
protected function saveToDatabase($obj, $id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Fetch the posted data
|
||||||
|
$values = $this->loadData($this->additionalData());
|
||||||
|
|
||||||
|
$this->filterRaw($values);
|
||||||
|
|
||||||
|
// Check the input data
|
||||||
|
if( ! $this->requiredDataIsAvailable($values) )
|
||||||
|
throw new DataParsingException();
|
||||||
|
|
||||||
|
if( ! $this->rawDataIsValid($values) )
|
||||||
|
throw new DataParsingException();
|
||||||
|
|
||||||
|
$obj->applyAndMergeValues($values, true);
|
||||||
|
|
||||||
|
$this->filterObject($obj, $values);
|
||||||
|
|
||||||
|
// Do some additional tests by the controller
|
||||||
|
if( ! $this->objectValid($obj) )
|
||||||
|
throw new DataInvalidException();
|
||||||
|
|
||||||
|
// Check if the object complains about valitity
|
||||||
|
if( ! $obj->dataIsValid() )
|
||||||
|
throw new DataInvalidException();
|
||||||
|
|
||||||
|
// Do the actual work
|
||||||
|
$obj->save();
|
||||||
|
$this->saveAssocs($obj, $values);
|
||||||
|
|
||||||
|
// Redirect to the list of objects
|
||||||
|
$view = $this->getSingleViewName();
|
||||||
|
$this->setRedirect(Route::_("index.php?option=com_clubs&view={$view}s", false));
|
||||||
|
}
|
||||||
|
catch(DataParsingException $e)
|
||||||
|
{
|
||||||
|
// FIXME Make this robust (are external refs already dereferenced?)
|
||||||
|
$view = $this->getSingleViewName();
|
||||||
|
$obj->setValues($values, true);
|
||||||
|
$urldata = $obj->pack();
|
||||||
|
$this->setRedirect(Route::_("index.php?option=com_clubs&view={$view}&id={$id}&data={$urldata}", false));
|
||||||
|
}
|
||||||
|
catch(DataInvalidException $e)
|
||||||
|
{
|
||||||
|
$view = $this->getSingleViewName();
|
||||||
|
$urldata = $obj->pack();
|
||||||
|
$this->setRedirect(Route::_("index.php?option=com_clubs&view={$view}&id={$id}&data={$urldata}", false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function saveAssocs($obj, $vlaues){}
|
||||||
|
|
||||||
|
protected function additionalData()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function loadData($additionalData)
|
||||||
|
{
|
||||||
|
$values = array();
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
$input = Factory::getApplication()->input->post;
|
||||||
|
|
||||||
|
foreach($factory->getAttributes() as $column)
|
||||||
|
{
|
||||||
|
$values[$column->getAlias()] = $column->getFilter()->getFilteredValue($input, $column->getAlias());
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($additionalData as $k => $v)
|
||||||
|
{
|
||||||
|
$values[$k] = $v->getFilteredValue($input, $k);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterRaw(&$values){}
|
||||||
|
|
||||||
|
protected function filterObject($obj){}
|
||||||
|
|
||||||
|
protected function objectValid($obj)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function requiredDataIsAvailable($values)
|
||||||
|
{
|
||||||
|
$ok = true;
|
||||||
|
|
||||||
|
foreach($this->getFactory()->getAttributes() as $column)
|
||||||
|
{
|
||||||
|
$filter = $column->getFilter();
|
||||||
|
if(! $filter->requiredDataAvailable($values[$column->getAlias()]))
|
||||||
|
{
|
||||||
|
$fname = $filter->getName();
|
||||||
|
Factory::getApplication()->enqueueMessage("Das Feld $fname ist obligatorisch.", 'error');
|
||||||
|
$ok = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $values
|
||||||
|
* @param AbstractCommonClubsModel $obj
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
protected function rawDataIsValid($values)
|
||||||
|
{
|
||||||
|
$error = false;
|
||||||
|
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
|
||||||
|
foreach($factory->getAttributes() as $column)
|
||||||
|
{
|
||||||
|
if(! $column->getFilter()->rawValueValid($values[$column->getAlias()]))
|
||||||
|
{
|
||||||
|
$fname = $column->getFilter()->getName();
|
||||||
|
Factory::getApplication()->enqueueMessage("Das Feld $fname ist fehlerhaft.", 'error');
|
||||||
|
$error = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ! $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function fieldValid($name, $value, $options)
|
||||||
|
{
|
||||||
|
if(empty($value))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(isset($options['filter']))
|
||||||
|
{
|
||||||
|
switch($options['filter'])
|
||||||
|
{
|
||||||
|
case 'string':
|
||||||
|
if(empty(trim($value)))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete()
|
||||||
|
{
|
||||||
|
$app = Factory::getApplication();
|
||||||
|
|
||||||
|
$id = $app->input->get->getInt('id');
|
||||||
|
$name = $this->getSingleBaseName();
|
||||||
|
$app->enqueueMessage("Removal of $name with id $id.");
|
||||||
|
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
$element = $factory->loadById($id);
|
||||||
|
$element->delete();
|
||||||
|
|
||||||
|
$view = $this->getSingleViewName();
|
||||||
|
$this->setRedirect(Route::_("index.php?option=com_clubs&view={$view}s", false));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
67
src/admin/abstract/view/list.php
Normal file
67
src/admin/abstract/view/list.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
use Joomla\CMS\MVC\View\HtmlView;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
abstract class AbstractClubsViewList extends HtmlView
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var AbstractCommonClubsModel
|
||||||
|
*/
|
||||||
|
protected $objects;
|
||||||
|
protected $delUrl;
|
||||||
|
protected $addUrl;
|
||||||
|
protected $changeUrl;
|
||||||
|
|
||||||
|
private $prepared = FALSE;
|
||||||
|
|
||||||
|
public function prepareDisplay()
|
||||||
|
{
|
||||||
|
$this->prepared = TRUE;
|
||||||
|
|
||||||
|
$this->objects = $this->loadObjects();
|
||||||
|
$baseUrl = "index.php?option=com_clubs";
|
||||||
|
$viewName = $this->getSingleViewName();
|
||||||
|
$controllerName = $this->getControllerName();
|
||||||
|
|
||||||
|
$this->addUrl = Route::_("$baseUrl&view=$viewName&id=new");
|
||||||
|
$this->changeUrl = Route::_("$baseUrl&view=$viewName&id=__ID__");
|
||||||
|
$this->delUrl = Route::_("$baseUrl&task=$controllerName.delete&id=__ID__");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function display($tpl = null)
|
||||||
|
{
|
||||||
|
if(!$this->prepared)
|
||||||
|
$this->prepareDisplay();
|
||||||
|
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract function getSingleBaseName();
|
||||||
|
|
||||||
|
protected function getControllerName()
|
||||||
|
{
|
||||||
|
return $this->getSingleBaseName();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSingleViewName()
|
||||||
|
{
|
||||||
|
return $this->getSingleBaseName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return AbstractCommonClubsModelFactory
|
||||||
|
*/
|
||||||
|
protected abstract function getFactory();
|
||||||
|
|
||||||
|
protected function loadObjects()
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
return $factory->loadElements();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
85
src/admin/abstract/view/single.php
Normal file
85
src/admin/abstract/view/single.php
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\MVC\View\HtmlView;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
abstract class AbstractClubsViewSingle extends HtmlView
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $address;
|
||||||
|
/**
|
||||||
|
* @var AbstractCommonClubsModel
|
||||||
|
*/
|
||||||
|
protected $object;
|
||||||
|
protected $isNew;
|
||||||
|
protected $id;
|
||||||
|
|
||||||
|
private $prepared = FALSE;
|
||||||
|
|
||||||
|
public function prepareDisplay()
|
||||||
|
{
|
||||||
|
$this->prepared = TRUE;
|
||||||
|
|
||||||
|
$input = Factory::getApplication()->input;
|
||||||
|
$id = $input->get->get('id');
|
||||||
|
|
||||||
|
$controllerName = $this->getControllerName();
|
||||||
|
|
||||||
|
if($id === 'new')
|
||||||
|
{
|
||||||
|
$this->address = Route::_("index.php?option=com_clubs&task={$controllerName}.new");
|
||||||
|
$this->object = $this->createNewObject();
|
||||||
|
$this->isNew = true;
|
||||||
|
}
|
||||||
|
else if(is_numeric($id))
|
||||||
|
{
|
||||||
|
$id = (int) $id;
|
||||||
|
$this->address = Route::_("index.php?option=com_clubs&task={$controllerName}.change&id=$id");
|
||||||
|
$this->object = $this->loadObject($id);
|
||||||
|
$this->isNew = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new Exception('Need a valid object id.');
|
||||||
|
|
||||||
|
$jsonData = $input->get->get('data', null, 'json');
|
||||||
|
if($jsonData !== null)
|
||||||
|
{
|
||||||
|
$this->object->unpack($jsonData);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function display($tpl = null)
|
||||||
|
{
|
||||||
|
if(!$this->prepared)
|
||||||
|
$this->prepareDisplay();
|
||||||
|
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract function getControllerName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return AbstractCommonClubsModelFactory
|
||||||
|
*/
|
||||||
|
protected abstract function getFactory();
|
||||||
|
|
||||||
|
protected function createNewObject()
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
return $factory->createNew();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function loadObject($id)
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
return $factory->loadById($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// No direct access.
|
// No direct access.
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\MVC\Controller\BaseController;
|
||||||
|
|
||||||
defined('_JEXEC') or die;
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
JLoader::discover('Clubs', JPATH_ROOT . '/administrator/components/com_clubs/mymodels');
|
||||||
|
JLoader::registerPrefix('AbstractClubs', JPATH_ROOT . '/administrator/components/com_clubs/abstract');
|
||||||
|
|
||||||
|
JLoader::registerPrefix('AbstractCommonClubs', JPATH_ROOT . '/administrator/components/com_clubs/common/abstract');
|
||||||
|
JLoader::registerPrefix('CommonClubsModel', JPATH_ROOT . '/administrator/components/com_clubs/common/models');
|
||||||
|
JLoader::registerPrefix('CommonClubsControllerMapping', JPATH_ROOT . '/administrator/components/com_clubs/common/controllermappings');
|
||||||
|
|
||||||
|
$controller = BaseController::getInstance("Clubs");
|
||||||
|
$input = Factory::getApplication()->input;
|
||||||
|
|
||||||
|
$task = $input->getCmd("task", "display");
|
||||||
|
|
||||||
|
$controller->execute($task);
|
||||||
|
$controller->redirect();
|
||||||
|
55
src/admin/common/abstract/controller/mapping.php
Normal file
55
src/admin/common/abstract/controller/mapping.php
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
abstract class AbstractCommonClubsControllerMapping
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $required;
|
||||||
|
protected $name;
|
||||||
|
|
||||||
|
public function __construct($name, $required = true)
|
||||||
|
{
|
||||||
|
$this->name = $name;
|
||||||
|
$this->required = $required;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $value
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function requiredDataAvailable($value)
|
||||||
|
{
|
||||||
|
if($this->required && ($value === null || $value === ''))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param JInput $input
|
||||||
|
* @param string $name
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public abstract function getFilteredValue($input, $name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $value
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function rawValueValid($value)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
385
src/admin/common/abstract/model.php
Normal file
385
src/admin/common/abstract/model.php
Normal file
@ -0,0 +1,385 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
abstract class AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
// TODO Add data validator
|
||||||
|
// TODO Make setting of values attribute fail in case of problems
|
||||||
|
// FIXME Add Joins in select statements
|
||||||
|
|
||||||
|
private $id;
|
||||||
|
private $new;
|
||||||
|
|
||||||
|
public function getId()
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setId($id)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private $values = null;
|
||||||
|
|
||||||
|
protected function getValues($force = false)
|
||||||
|
{
|
||||||
|
if(is_null($this->values) || $force)
|
||||||
|
$this->loadDataFromDatabase();
|
||||||
|
|
||||||
|
return $this->values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isNew()
|
||||||
|
{
|
||||||
|
return $this->new;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setValues($values, $unpack = false)
|
||||||
|
{
|
||||||
|
if($unpack)
|
||||||
|
$this->values = $this->unpackExternalReferencesFromKeys($values);
|
||||||
|
else
|
||||||
|
$this->values = $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function applyAndMergeValues($values, $unpack = true)
|
||||||
|
{
|
||||||
|
$vals = $this->getValues();
|
||||||
|
|
||||||
|
if($unpack)
|
||||||
|
$vals = $this->packExternalReferencesAsKeys($vals);
|
||||||
|
|
||||||
|
foreach($this->getFactory()->getAttributes() as $column)
|
||||||
|
{
|
||||||
|
if(array_key_exists($column->getAlias(), $values))
|
||||||
|
{
|
||||||
|
$vals[$column->getAlias()] = $values[$column->getAlias()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($unpack)
|
||||||
|
$vals = $this->unpackExternalReferencesFromKeys($vals);
|
||||||
|
|
||||||
|
$this->setValues($vals, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setValue($key, $value)
|
||||||
|
{
|
||||||
|
if(is_null($this->values))
|
||||||
|
$this->loadDataFromDatabase();
|
||||||
|
|
||||||
|
$this->values[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function markAsNew($new)
|
||||||
|
{
|
||||||
|
$this->new = $new;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fillDefaultValues()
|
||||||
|
{}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return AbstractCommonClubsModelFactory
|
||||||
|
*/
|
||||||
|
protected abstract function getFactory();
|
||||||
|
|
||||||
|
public function save()
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
$attribs = $factory->getAttributes();
|
||||||
|
|
||||||
|
$db = Factory::getDbo();
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
|
||||||
|
$db->transactionStart();
|
||||||
|
|
||||||
|
if($this->new)
|
||||||
|
$this->prepareInsert($attribs, $factory, $q);
|
||||||
|
else
|
||||||
|
$this->prepareUpdate($attribs, $factory, $q);
|
||||||
|
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
|
||||||
|
if($this->new)
|
||||||
|
{
|
||||||
|
$this->finishInsert($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->transactionCommit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function loadDataFromDatabase()
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
$attribs = $factory->getAttributes();
|
||||||
|
|
||||||
|
$db = Factory::getDbo();
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
|
||||||
|
foreach($attribs as $a)
|
||||||
|
{
|
||||||
|
$a->select($q);
|
||||||
|
}
|
||||||
|
$q->from($factory->getTableName());
|
||||||
|
$q->where("id = {$this->id}");
|
||||||
|
|
||||||
|
$joins = $factory->getJoins();
|
||||||
|
foreach($joins as $j)
|
||||||
|
{
|
||||||
|
$j->join($q);
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
|
||||||
|
$values = $db->loadAssoc();
|
||||||
|
|
||||||
|
$values = $this->unpackExternalReferencesFromKeys($values);
|
||||||
|
|
||||||
|
$this->values = $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function packExternalReferencesAsKeys($vals)
|
||||||
|
{
|
||||||
|
foreach($this->getFactory()->getAttributes() as $a)
|
||||||
|
{
|
||||||
|
$alias = $a->getAlias();
|
||||||
|
$vals[$alias] = $a->packValue($vals[$alias]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX Joins
|
||||||
|
return $vals;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function unpackExternalReferencesFromKeys($vals)
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
|
||||||
|
foreach($factory->getAttributes() as $a)
|
||||||
|
{
|
||||||
|
$alias = $a->getAlias();
|
||||||
|
if(isset($vals[$alias]))
|
||||||
|
$vals[$alias] = $a->unpackValue($vals[$alias]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$joins = $factory->getJoins();
|
||||||
|
foreach($joins as $join)
|
||||||
|
{
|
||||||
|
$join->unpackExternalReferencesFromKeys($vals);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $vals;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param array $rawData
|
||||||
|
* @param AbstractCommonClubsModelColumn[] $attribs
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
* @return string[]|number[]|NULL[]
|
||||||
|
*/
|
||||||
|
private function quoteData($rawData, $attribs, $q)
|
||||||
|
{
|
||||||
|
$quotedData = array();
|
||||||
|
|
||||||
|
foreach($attribs as $a)
|
||||||
|
{
|
||||||
|
$alias = $a->getAlias();
|
||||||
|
$quotedData[$alias] = $a->getQuotedValue($q, $rawData[$alias]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $quotedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterDatabaseRawData($values)
|
||||||
|
{
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterDatabaseQuotedData($quoted)
|
||||||
|
{
|
||||||
|
return $quoted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param array $attribs
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function getQuotedData($attribs, $q)
|
||||||
|
{
|
||||||
|
$rawData = $this->getValues();
|
||||||
|
$rawData = $this->filterDatabaseRawData($rawData);
|
||||||
|
|
||||||
|
$quotedData = $this->quoteData($rawData, $attribs, $q);
|
||||||
|
$quotedData = $this->filterDatabaseQuotedData($quotedData);
|
||||||
|
|
||||||
|
return $quotedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param AbstractCommonClubsModelColumn[] $attribs
|
||||||
|
* @param AbstractCommonClubsModelFactory $factory
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
*/
|
||||||
|
private function prepareInsert($attribs, $factory, $q)
|
||||||
|
{
|
||||||
|
$q->insert($factory->getTableName());
|
||||||
|
|
||||||
|
$dbcols = array();
|
||||||
|
foreach($attribs as $a)
|
||||||
|
{
|
||||||
|
$dbcols[] = $a->getColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
$q->columns($q->qn($dbcols));
|
||||||
|
|
||||||
|
$quotedData = $this->getQuotedData($attribs, $q);
|
||||||
|
|
||||||
|
$q->values(join(', ', $quotedData));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param JDatabaseDriver $db
|
||||||
|
*/
|
||||||
|
private function finishInsert($db)
|
||||||
|
{
|
||||||
|
$this->id = $db->insertid();
|
||||||
|
$this->new = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param AbstractCommonClubsModelColumn[] $attribs
|
||||||
|
* @param AbstractCommonClubsModelFactory $factory
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
*/
|
||||||
|
private function prepareUpdate($attribs, $factory, $q)
|
||||||
|
{
|
||||||
|
$q->update($factory->getTableName());
|
||||||
|
|
||||||
|
$dbcols = array();
|
||||||
|
foreach($attribs as $a)
|
||||||
|
$dbcols[] = $a->getColumn();
|
||||||
|
|
||||||
|
$quotedData = $this->getQuotedData($attribs, $q);
|
||||||
|
|
||||||
|
$q->set(array_map(function($col, $data){
|
||||||
|
return "$col = $data";
|
||||||
|
}, $dbcols, $quotedData));
|
||||||
|
|
||||||
|
$q->where("id = {$this->id}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param JDatabaseDriver $db
|
||||||
|
*/
|
||||||
|
protected function prepareDelete($db)
|
||||||
|
{}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
$db = Factory::getDbo();
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
|
||||||
|
$q->delete($factory->getTableName());
|
||||||
|
$q->where("id = {$this->id}");
|
||||||
|
|
||||||
|
$db->transactionStart(true);
|
||||||
|
$this->prepareDelete($db);
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
$db->transactionCommit(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param AbstractCommonClubsModelFactory $factory
|
||||||
|
* @param string $colName
|
||||||
|
* @param array $constraints
|
||||||
|
*/
|
||||||
|
protected function fetchAssociatedElements($factory, $colName, $constraints = null, $sorting = null)
|
||||||
|
{
|
||||||
|
$condition = "main.$colName = {$this->id}";
|
||||||
|
|
||||||
|
if(isset($constraints))
|
||||||
|
{
|
||||||
|
if(is_array($constraints))
|
||||||
|
$allConstraints = clone $constraints;
|
||||||
|
elseif(is_string($constraints))
|
||||||
|
$allConstraints = array($constraints);
|
||||||
|
else
|
||||||
|
throw new Exception('Unknown type of constraint');
|
||||||
|
|
||||||
|
// Add the manual condition to match the current object
|
||||||
|
$allConstraints[] = $condition;
|
||||||
|
|
||||||
|
return $factory->loadElements($allConstraints, $sorting);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return $factory->loadElements($condition, $sorting);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterPackData($values)
|
||||||
|
{
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterUnpackData($values)
|
||||||
|
{
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function pack()
|
||||||
|
{
|
||||||
|
$vals = $this->getValues();
|
||||||
|
|
||||||
|
$vals = $this->packExternalReferencesAsKeys($vals);
|
||||||
|
$vals = $this->filterPackData($vals);
|
||||||
|
|
||||||
|
$json = json_encode($vals);
|
||||||
|
return urlencode($json);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $str
|
||||||
|
* @param boolean $decode
|
||||||
|
*/
|
||||||
|
public function unpack($str, $decode = false)
|
||||||
|
{
|
||||||
|
if($decode)
|
||||||
|
$json = urldecode($str);
|
||||||
|
else
|
||||||
|
$json = $str;
|
||||||
|
$data = json_decode($json, true);
|
||||||
|
|
||||||
|
$vals = $this->unpackExternalReferencesFromKeys($data);
|
||||||
|
$vals = $this->filterUnpackData($vals);
|
||||||
|
|
||||||
|
$this->setValues($vals);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataIsValid()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
78
src/admin/common/abstract/model/column.php
Normal file
78
src/admin/common/abstract/model/column.php
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
abstract class AbstractCommonClubsModelColumn
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $alias;
|
||||||
|
protected $column;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var AbstractCommonClubsControllerMapping
|
||||||
|
*/
|
||||||
|
protected $filter;
|
||||||
|
|
||||||
|
public function getAlias()
|
||||||
|
{
|
||||||
|
return $this->alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getColumn()
|
||||||
|
{
|
||||||
|
return $this->column;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract function isSimpleType();
|
||||||
|
|
||||||
|
public function __construct($alias, $filter, $column = null)
|
||||||
|
{
|
||||||
|
$this->alias = $alias;
|
||||||
|
$this->filter = $filter;
|
||||||
|
if(isset($column))
|
||||||
|
$this->column = $column;
|
||||||
|
else
|
||||||
|
$this->column = $alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
*/
|
||||||
|
public function select($q)
|
||||||
|
{
|
||||||
|
$q->select($q->qn($this->column, $this->alias));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
public abstract function getQuotedValue($q,$value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
*/
|
||||||
|
public function getQuotedColumnName($q)
|
||||||
|
{
|
||||||
|
return $q->qn($this->column);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function packValue($value)
|
||||||
|
{
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unpackValue($value)
|
||||||
|
{
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFilter()
|
||||||
|
{
|
||||||
|
return $this->filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
208
src/admin/common/abstract/model/factory.php
Normal file
208
src/admin/common/abstract/model/factory.php
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ElementNotFoundException extends Exception
|
||||||
|
{}
|
||||||
|
|
||||||
|
abstract class AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
|
||||||
|
// TODO Attribures as objects allowing to use polymophism in filtering/parsing/checking/sql building
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This method should return an array to configure the trivially accessible values.
|
||||||
|
* The key must be a unique key describing the information and will be reused in the getValues() method.
|
||||||
|
* The value of each key should be an associative array describing the object field.
|
||||||
|
* Example of an array returned by this method is
|
||||||
|
* array(
|
||||||
|
* 'name'=>array('col'=>'Name', type=>'string'),
|
||||||
|
* 'size'=>array('col'=>'area', type=>'int')
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
* The inner arrays contain the following entries:
|
||||||
|
* - col: The name of the column in the database. Defaults to the key name
|
||||||
|
* - type: The type of the column. If nothing is specified, string is assumed.
|
||||||
|
* - string
|
||||||
|
* - int
|
||||||
|
* - float
|
||||||
|
* - ref
|
||||||
|
* - optional: boolean, if true, the field can be NULL
|
||||||
|
* - ref: (only with type='ref') The name of the class that is referenced
|
||||||
|
*/
|
||||||
|
protected abstract function fetchAttributes();
|
||||||
|
|
||||||
|
private $attributes = null;
|
||||||
|
/**
|
||||||
|
* @param boolean $force
|
||||||
|
* @return AbstractCommonClubsModelColumn[]
|
||||||
|
*/
|
||||||
|
public function getAttributes($force = False)
|
||||||
|
{
|
||||||
|
if($this->attributes === null || $force)
|
||||||
|
$this->attributes = $this->fetchAttributes();
|
||||||
|
|
||||||
|
return $this->attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract function getTableName();
|
||||||
|
public abstract function getClassName();
|
||||||
|
|
||||||
|
// TODO Als Klassen formulieren
|
||||||
|
/*
|
||||||
|
* This method returns the relevant join operations on the data.
|
||||||
|
* The return value is an associated arrray whose keys are the names of the tables in the join.
|
||||||
|
* Each value of such joins is again an associative array.
|
||||||
|
* These arrays have the following entries:
|
||||||
|
* - alias: The alias name of the table to use. Mandatory
|
||||||
|
* - type: The type of the join. Can be inner, left, right or outer. Defaults to inner.
|
||||||
|
* - on: Join constraint as a string representation.
|
||||||
|
* - cols: The columns to insert in the query. Same structure as fetchAttributes() method
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* array(
|
||||||
|
* 'mytable'=>array(
|
||||||
|
* 'alias'=>'t1',
|
||||||
|
* 'type'=>'left',
|
||||||
|
* 'on'=>'main.id = t1.clubid',
|
||||||
|
* 'cols'=>array(
|
||||||
|
* 'name'=>array(),
|
||||||
|
* 'count'=>array('type'=>'int', 'col'=>'numElements'
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
protected function fetchJoins()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
private $joins = null;
|
||||||
|
/**
|
||||||
|
* @return AbstractCommonClubsModelJoin[]
|
||||||
|
*/
|
||||||
|
public function getJoins($force = False)
|
||||||
|
{
|
||||||
|
if($this->joins === null || $force)
|
||||||
|
$this->joins = $this->fetchJoins();
|
||||||
|
|
||||||
|
return $this->joins;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param string $condition
|
||||||
|
* @param string|array $sorting
|
||||||
|
* @return AbstractCommonClubsModel[]
|
||||||
|
*/
|
||||||
|
public function loadElements($condition = null, $sorting = null, $callback = null)
|
||||||
|
{
|
||||||
|
$db = Factory::getDbo();
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
|
||||||
|
// $columns = array_map(function($arr) use ($q){ return $q->qn('main' . $arr['col']); }, $this->fetchAttributes());
|
||||||
|
// $columns = array();
|
||||||
|
// foreach($this->fetchAttributes() as $k=>$v)
|
||||||
|
// {
|
||||||
|
// $columns[] = $q->qn('main' . $v['col'], $k);
|
||||||
|
// }
|
||||||
|
|
||||||
|
$q->select('main.id AS id');//->select($columns);
|
||||||
|
$q->from($this->getTableName() . ' AS main');
|
||||||
|
|
||||||
|
if($condition !== null)
|
||||||
|
$q->where($condition);
|
||||||
|
|
||||||
|
if($sorting !== null)
|
||||||
|
$q->order($sorting);
|
||||||
|
|
||||||
|
if($callback !== null)
|
||||||
|
{
|
||||||
|
$callback($q);
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
|
||||||
|
$rows = $db->loadAssocList();
|
||||||
|
$ret = array();
|
||||||
|
foreach($rows as $row)
|
||||||
|
{
|
||||||
|
$ret[] = $this->generateObject($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $id
|
||||||
|
* @return AbstractCommonClubsModel
|
||||||
|
*/
|
||||||
|
public function loadById($id, $throwErr = true)
|
||||||
|
{
|
||||||
|
$arr = $this->loadElements("main.id = " . ((int)$id) );
|
||||||
|
if(sizeof($arr) == 0)
|
||||||
|
{
|
||||||
|
if($throwErr)
|
||||||
|
throw new ElementNotFoundException();
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $arr[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function generatePlainObject($id)
|
||||||
|
{
|
||||||
|
$name = $this->getClassName();
|
||||||
|
$obj = new $name();
|
||||||
|
|
||||||
|
$obj->setId($id);
|
||||||
|
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $row
|
||||||
|
* @return AbstractCommonClubsModel
|
||||||
|
*/
|
||||||
|
protected function generateObject($row)
|
||||||
|
{
|
||||||
|
$obj = $this->generatePlainObject($row['id']);
|
||||||
|
$obj->markAsNew(false);
|
||||||
|
|
||||||
|
//unset($row['id']);
|
||||||
|
//$obj->setValues($row);
|
||||||
|
|
||||||
|
// Do not trigger cache if no needed
|
||||||
|
//$obj->getValues();
|
||||||
|
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return AbstractCommonClubsModel
|
||||||
|
*/
|
||||||
|
public function createNew()
|
||||||
|
{
|
||||||
|
$obj = $this->generatePlainObject('new');
|
||||||
|
$obj->markAsNew(true);
|
||||||
|
|
||||||
|
$values = array();
|
||||||
|
foreach($this->getAttributes() as $a)
|
||||||
|
{
|
||||||
|
$values[$a->getAlias()] = null;
|
||||||
|
}
|
||||||
|
// $attribs = array_map(function($v){
|
||||||
|
// return Null;
|
||||||
|
// }, $this->getAttributes());
|
||||||
|
$obj->setValues($values);
|
||||||
|
|
||||||
|
$obj->fillDefaultValues();
|
||||||
|
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
}
|
84
src/admin/common/abstract/model/join.php
Normal file
84
src/admin/common/abstract/model/join.php
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
abstract class AbstractCommonClubsModelJoin
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $tablename;
|
||||||
|
protected $alias;
|
||||||
|
protected $condition;
|
||||||
|
/**
|
||||||
|
* @var AbstractCommonClubsModelColumn[]
|
||||||
|
*/
|
||||||
|
protected $columns;
|
||||||
|
|
||||||
|
public function __construct($alias, $condition, $colums, $tablename = null)
|
||||||
|
{
|
||||||
|
/// XXX Some checks need to be performed
|
||||||
|
$this->alias = $alias;
|
||||||
|
$this->condition = $condition;
|
||||||
|
$this->columns = $colums;
|
||||||
|
|
||||||
|
if(empty($tablename))
|
||||||
|
$this->tablename = $alias;
|
||||||
|
else
|
||||||
|
$this->tablename = $alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAlias()
|
||||||
|
{
|
||||||
|
return $this->alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return $this->tablename;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOnCondition()
|
||||||
|
{
|
||||||
|
return $this->condition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getColumns()
|
||||||
|
{
|
||||||
|
return $this->columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
*/
|
||||||
|
public function join($q)
|
||||||
|
{
|
||||||
|
$str = "{$this->tablename} AS {$this->alias}";
|
||||||
|
if(isset($this->condition))
|
||||||
|
$str .= " ON {$this->condition}";
|
||||||
|
$this->addJoin($q, $str);
|
||||||
|
|
||||||
|
foreach($this->columns as $c)
|
||||||
|
{
|
||||||
|
$qc = $q->q("{$this->alias}." . $c->getColumn(), $c->getAlias());
|
||||||
|
$q->select($qc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param JDatabaseQuery $q
|
||||||
|
* @param String $str
|
||||||
|
*/
|
||||||
|
protected abstract function addJoin($q, $str);
|
||||||
|
|
||||||
|
public function unpackExternalReferencesFromKeys(&$vals)
|
||||||
|
{
|
||||||
|
foreach($this->columns as $col)
|
||||||
|
{
|
||||||
|
$alias = $col->getAlias();
|
||||||
|
$vals[$alias] = $col->unpackValue($vals[$alias]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
src/admin/common/controllermappings/cmd.php
Normal file
14
src/admin/common/controllermappings/cmd.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsControllerMappingCmd extends AbstractCommonClubsControllerMapping
|
||||||
|
{
|
||||||
|
|
||||||
|
public function getFilteredValue($input, $name)
|
||||||
|
{
|
||||||
|
return $input->getCmd($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
src/admin/common/controllermappings/float.php
Normal file
14
src/admin/common/controllermappings/float.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsControllerMappingFloat extends AbstractCommonClubsControllerMapping
|
||||||
|
{
|
||||||
|
|
||||||
|
public function getFilteredValue($input, $name)
|
||||||
|
{
|
||||||
|
return $input->getFloat($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
src/admin/common/controllermappings/int.php
Normal file
14
src/admin/common/controllermappings/int.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsControllerMappingInt extends AbstractCommonClubsControllerMapping
|
||||||
|
{
|
||||||
|
|
||||||
|
public function getFilteredValue($input, $name)
|
||||||
|
{
|
||||||
|
return $input->getInt($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
44
src/admin/common/controllermappings/ref.php
Normal file
44
src/admin/common/controllermappings/ref.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsControllerMappingRef extends AbstractCommonClubsControllerMapping
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var AbstractCommonClubsModelFactory
|
||||||
|
*/
|
||||||
|
protected $factory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @param AbstractCommonClubsModelFactory $factory
|
||||||
|
* @param boolean $required
|
||||||
|
*/
|
||||||
|
public function __construct($name, $factory, $required = true)
|
||||||
|
{
|
||||||
|
parent::__construct($name, $required);
|
||||||
|
$this->factory = $factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFilteredValue($input, $name)
|
||||||
|
{
|
||||||
|
return $input->getInt($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rawValueValid($value)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$this->factory->loadById((int) $value);
|
||||||
|
}
|
||||||
|
catch(ElementNotFoundException $e)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
src/admin/common/controllermappings/string.php
Normal file
14
src/admin/common/controllermappings/string.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsControllerMappingString extends AbstractCommonClubsControllerMapping
|
||||||
|
{
|
||||||
|
|
||||||
|
public function getFilteredValue($input, $name)
|
||||||
|
{
|
||||||
|
return $input->getString($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
160
src/admin/common/models/club.php
Normal file
160
src/admin/common/models/club.php
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelClub extends AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryClub();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->getValues()['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAddress()
|
||||||
|
{
|
||||||
|
return $this->getValues()['address'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCity()
|
||||||
|
{
|
||||||
|
return $this->getValues()['city'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHomepage()
|
||||||
|
{
|
||||||
|
return $this->getValues()['homepage'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMail()
|
||||||
|
{
|
||||||
|
return $this->getValues()['mail'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIban()
|
||||||
|
{
|
||||||
|
return $this->getValues()['iban'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBic()
|
||||||
|
{
|
||||||
|
return $this->getValues()['bic'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCharitable()
|
||||||
|
{
|
||||||
|
return $this->getValues()['charitable'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPresident()
|
||||||
|
{
|
||||||
|
return $this->getValues()['president'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPlaces()
|
||||||
|
{
|
||||||
|
return $this->fetchAssociatedElements(new CommonClubsModelFactoryPlace(), 'clubid');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getOfferAssocs()
|
||||||
|
{
|
||||||
|
return $this->fetchAssociatedElements(new CommonClubsModelFactoryOfferassoc(), 'clubid');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOffers()
|
||||||
|
{
|
||||||
|
$assocs = $this->getOfferAssocs();
|
||||||
|
|
||||||
|
$offersFactory = new CommonClubsModelFactoryOffer();
|
||||||
|
$allOffers = $offersFactory->loadElements();
|
||||||
|
|
||||||
|
$ret = array();
|
||||||
|
foreach($allOffers as $offer)
|
||||||
|
{
|
||||||
|
$arr = array(
|
||||||
|
'offer' => $offer,
|
||||||
|
'valid' => false
|
||||||
|
);
|
||||||
|
|
||||||
|
$id = $offer->getId();
|
||||||
|
foreach($assocs as $a)
|
||||||
|
{
|
||||||
|
$oid = $a->getOffer()->getId();
|
||||||
|
if($id === $oid)
|
||||||
|
{
|
||||||
|
$arr['valid'] = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret[] = $arr;
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int[] $ids
|
||||||
|
*/
|
||||||
|
public function setOfferIds($ids)
|
||||||
|
{
|
||||||
|
if(empty($ids))
|
||||||
|
$ids = array();
|
||||||
|
|
||||||
|
$dbo = $this->getFactory()->loadById($this->getId());
|
||||||
|
$currentOffersAssocs = $dbo->getOfferAssocs();
|
||||||
|
$currentIds = array_map(function($obj){
|
||||||
|
return $obj->getOffer()->getId();
|
||||||
|
}, $currentOffersAssocs);
|
||||||
|
|
||||||
|
$newIds = array_diff($ids, $currentIds);
|
||||||
|
$delIds = array_diff($currentIds, $ids);
|
||||||
|
|
||||||
|
$offerAssocFactory = new CommonClubsModelFactoryOfferassoc();
|
||||||
|
$offerFactory = new CommonClubsModelFactoryOffer();
|
||||||
|
|
||||||
|
foreach($delIds as $id)
|
||||||
|
{
|
||||||
|
$delId = (int) $id;
|
||||||
|
$delObjs = $offerAssocFactory->loadElements("clubid = {$this->getId()} AND offerid = $delId");
|
||||||
|
foreach($delObjs as $o)
|
||||||
|
$o->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($newIds as $id)
|
||||||
|
{
|
||||||
|
$newId = (int) $id;
|
||||||
|
$o = $offerAssocFactory->createNew();
|
||||||
|
$o->setOffer($offerFactory->loadById($newId));
|
||||||
|
$o->setClub($this);
|
||||||
|
$o->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUsers()
|
||||||
|
{
|
||||||
|
return $this->fetchAssociatedElements(new CommonClubsModelFactoryUserassoc(), 'clubid');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareDelete($db)
|
||||||
|
{
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
$q->delete('#__club_user_assocs')->where("clubid = {$this->getId()}");
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
$q->delete('#__club_places')->where("clubid = {$this->getId()}");
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
$q->delete('#__club_offer_assocs')->where("clubid = {$this->getId()}");
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
}
|
||||||
|
}
|
22
src/admin/common/models/column/float.php
Normal file
22
src/admin/common/models/column/float.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelColumnFloat extends AbstractCommonClubsModelColumn
|
||||||
|
{
|
||||||
|
public function isSimpleType()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getQuotedValue($q, $value)
|
||||||
|
{
|
||||||
|
if(is_null($value))
|
||||||
|
return 'NULL';
|
||||||
|
else
|
||||||
|
return (float) $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
22
src/admin/common/models/column/int.php
Normal file
22
src/admin/common/models/column/int.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelColumnInt extends AbstractCommonClubsModelColumn
|
||||||
|
{
|
||||||
|
public function isSimpleType()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getQuotedValue($q, $value)
|
||||||
|
{
|
||||||
|
if(is_null($value))
|
||||||
|
return 'NULL';
|
||||||
|
else
|
||||||
|
return (int) $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
105
src/admin/common/models/column/ref.php
Normal file
105
src/admin/common/models/column/ref.php
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class WrongRefTypeException extends Exception
|
||||||
|
{}
|
||||||
|
|
||||||
|
class AssociatedObjectUnsavedException extends Exception
|
||||||
|
{}
|
||||||
|
|
||||||
|
class CommonClubsModelColumnRef extends AbstractCommonClubsModelColumn
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $className;
|
||||||
|
|
||||||
|
public function __construct($alias, $className, $column, $filter)
|
||||||
|
{
|
||||||
|
parent::__construct($alias, $filter, $column);
|
||||||
|
|
||||||
|
if(empty($className))
|
||||||
|
throw new Exception('Classname must be non-empty.');
|
||||||
|
|
||||||
|
$this->className = $className;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isSimpleType()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getQuotedValue($q, $value)
|
||||||
|
{
|
||||||
|
if(is_null($value))
|
||||||
|
return 'NULL';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(! ( $value instanceof $this->className ) )
|
||||||
|
throw new WrongRefTypeException();
|
||||||
|
|
||||||
|
$id = $value->getId();
|
||||||
|
if($id === 'new')
|
||||||
|
throw new AssociatedObjectUnsavedException();
|
||||||
|
|
||||||
|
return $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function packValue($value)
|
||||||
|
{
|
||||||
|
if(is_null($value))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if(! ($value instanceof $this->className) )
|
||||||
|
throw new WrongRefTypeException();
|
||||||
|
|
||||||
|
$id = $value->getId();
|
||||||
|
|
||||||
|
if($id === 'new')
|
||||||
|
throw new AssociatedObjectUnsavedException();
|
||||||
|
|
||||||
|
return (int) $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unpackValue($value)
|
||||||
|
{
|
||||||
|
if(empty($value))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if(is_string($value) && preg_match('/^[0-9]+$/', $value))
|
||||||
|
$value = (int) $value;
|
||||||
|
|
||||||
|
if(! is_int($value))
|
||||||
|
throw new Exception('Reference with non-integer value');
|
||||||
|
|
||||||
|
$factoryName = $this->getFactoryNameOfClass($this->className); // XXX Use attribute?
|
||||||
|
$factory = new $factoryName();
|
||||||
|
return $factory->loadById($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private const CLASSNAME_MAP = array(
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @todo This must be done better and more cleanly
|
||||||
|
* @param string $className
|
||||||
|
* @return AbstractCommonClubsModelFactory
|
||||||
|
*/
|
||||||
|
private function getFactoryNameOfClass($className)
|
||||||
|
{
|
||||||
|
if(empty(self::CLASSNAME_MAP[$className]))
|
||||||
|
{
|
||||||
|
$parts = array();
|
||||||
|
if(preg_match('/^CommonClubsModel(.*)/', $className, $parts))
|
||||||
|
{
|
||||||
|
return "CommonClubsModelFactory{$parts[1]}";
|
||||||
|
}
|
||||||
|
throw new Exception("Unknown mapping of class $className");
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::CLASSNAME_MAP[$className];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
22
src/admin/common/models/column/string.php
Normal file
22
src/admin/common/models/column/string.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelColumnString extends AbstractCommonClubsModelColumn
|
||||||
|
{
|
||||||
|
public function isSimpleType()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getQuotedValue($q, $value)
|
||||||
|
{
|
||||||
|
if(is_null($value))
|
||||||
|
return 'NULL';
|
||||||
|
else
|
||||||
|
return $q->q($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
34
src/admin/common/models/factory/club.php
Normal file
34
src/admin/common/models/factory/club.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelFactoryClub extends AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
public function fetchAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new CommonClubsModelColumnString('name', new CommonClubsControllerMappingString('Clubname')),
|
||||||
|
new CommonClubsModelColumnString('address', new CommonClubsControllerMappingString('Adresse')),
|
||||||
|
new CommonClubsModelColumnString('city', new CommonClubsControllerMappingString('Stadt')),
|
||||||
|
new CommonClubsModelColumnString('homepage', new CommonClubsControllerMappingString('Homepaage', false)),
|
||||||
|
new CommonClubsModelColumnString('mail', new CommonClubsControllerMappingString('E-Mail')),
|
||||||
|
new CommonClubsModelColumnString('iban', new CommonClubsControllerMappingCmd('IBAN')),
|
||||||
|
new CommonClubsModelColumnString('bic', new CommonClubsControllerMappingCmd('BIC')),
|
||||||
|
new CommonClubsModelColumnInt('charitable', new CommonClubsControllerMappingInt('Gemeinnützigkeit')),
|
||||||
|
new CommonClubsModelColumnRef('president', 'CommonClubsModelUser', 'president', new CommonClubsControllerMappingRef('Vorsitzender', new CommonClubsModelFactoryUser()))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return '#__club_clubs';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'CommonClubsModelClub';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
24
src/admin/common/models/factory/offer.php
Normal file
24
src/admin/common/models/factory/offer.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelFactoryOffer extends AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
protected function fetchAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new CommonClubsModelColumnString('name', new CommonClubsControllerMappingString('Bezeichnung'))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return '#__club_offers';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'CommonClubsModelOffer';
|
||||||
|
}
|
||||||
|
}
|
25
src/admin/common/models/factory/offerassoc.php
Normal file
25
src/admin/common/models/factory/offerassoc.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelFactoryOfferassoc extends AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
protected function fetchAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new CommonClubsModelColumnRef('club', 'CommonClubsModelClub', 'clubid', new CommonClubsControllerMappingRef('Club', new CommonClubsModelFactoryClub())),
|
||||||
|
new CommonClubsModelColumnRef('offer', 'CommonClubsModelOffer', 'offerid', new CommonClubsControllerMappingRef('Angebot', new CommonClubsModelFactoryOffer()))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return '#__club_offer_assocs';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'CommonClubsModelOfferassoc';
|
||||||
|
}
|
||||||
|
}
|
28
src/admin/common/models/factory/place.php
Normal file
28
src/admin/common/models/factory/place.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelFactoryPlace extends AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
public function fetchAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new CommonClubsModelColumnString('name', new CommonClubsControllerMappingString('Bezeichnung')),
|
||||||
|
new CommonClubsModelColumnRef('club', 'CommonClubsModelClub', 'clubid', new CommonClubsControllerMappingRef('Club', new CommonClubsModelFactoryClub())),
|
||||||
|
new CommonClubsModelColumnInt('area', new CommonClubsControllerMappingInt('Fläche', false))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return '#__club_places';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'CommonClubsModelPlace';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
25
src/admin/common/models/factory/position.php
Normal file
25
src/admin/common/models/factory/position.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelFactoryPosition extends AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
protected function fetchAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new CommonClubsModelColumnString('name', new CommonClubsControllerMappingString('Bezeichnung'))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return '#__club_positions';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'CommonClubsModelPosition';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
33
src/admin/common/models/factory/user.php
Normal file
33
src/admin/common/models/factory/user.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelFactoryUser extends AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
public function fetchAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new CommonClubsModelColumnString('user', new CommonClubsControllerMappingCmd('Benutzername')),
|
||||||
|
new CommonClubsModelColumnString('name', new CommonClubsControllerMappingString('Bürgerlicher Name')),
|
||||||
|
new CommonClubsModelColumnString('password', new CommonClubsControllerMappingString('Passwort', false)),
|
||||||
|
new CommonClubsModelColumnString('address', new CommonClubsControllerMappingString('Adresse')),
|
||||||
|
new CommonClubsModelColumnString('city', new CommonClubsControllerMappingString('Stadt')),
|
||||||
|
new CommonClubsModelColumnString('mail', new CommonClubsControllerMappingString('E-Mail')),
|
||||||
|
new CommonClubsModelColumnString('phone', new CommonClubsControllerMappingString('Telefonnummer', false)),
|
||||||
|
new CommonClubsModelColumnString('mobile', new CommonClubsControllerMappingString('Handynummer', false))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return '#__club_users';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'CommonClubsModelUser';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
33
src/admin/common/models/factory/userassoc.php
Normal file
33
src/admin/common/models/factory/userassoc.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelFactoryUserassoc extends AbstractCommonClubsModelFactory
|
||||||
|
{
|
||||||
|
protected function fetchAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new CommonClubsModelColumnRef('user', 'CommonClubsModelUser', 'userid', new CommonClubsControllerMappingRef('User', new CommonClubsModelFactoryUser())),
|
||||||
|
new CommonClubsModelColumnRef('club', 'CommonClubsModelClub', 'clubid', new CommonClubsControllerMappingRef('Club', new CommonClubsModelFactoryClub())),
|
||||||
|
new CommonClubsModelColumnRef('position', 'CommonClubsModelPosition', 'positionid', new CommonClubsControllerMappingRef('Position', new CommonClubsModelFactoryPosition())),
|
||||||
|
new CommonClubsModelColumnInt('admin', new CommonClubsControllerMappingInt('Admin')),
|
||||||
|
new CommonClubsModelColumnString('address', new CommonClubsControllerMappingString('Adresse', false)),
|
||||||
|
new CommonClubsModelColumnString('mail', new CommonClubsControllerMappingString('E-Mail', false)),
|
||||||
|
new CommonClubsModelColumnString('phone', new CommonClubsControllerMappingString('Telefonnummer', false)),
|
||||||
|
new CommonClubsModelColumnString('state', new CommonClubsControllerMappingString('Status'))
|
||||||
|
// -> `state` enum('regular', 'vacant', 'temporary') NOT NULL DEFAULT 'vacant',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTableName()
|
||||||
|
{
|
||||||
|
return '#__club_user_assocs';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClassName()
|
||||||
|
{
|
||||||
|
return 'CommonClubsModelUserassoc';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
src/admin/common/models/join/innner.php
Normal file
12
src/admin/common/models/join/innner.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelJoinInner extends AbstractCommonClubsModelJoin
|
||||||
|
{
|
||||||
|
protected function addJoin($q, $str)
|
||||||
|
{
|
||||||
|
$q->innerJoin($str);
|
||||||
|
}
|
||||||
|
}
|
12
src/admin/common/models/join/left.php
Normal file
12
src/admin/common/models/join/left.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelJoinLeft extends AbstractCommonClubsModelJoin
|
||||||
|
{
|
||||||
|
protected function addJoin($q, $str)
|
||||||
|
{
|
||||||
|
$q->leftJoin($str);
|
||||||
|
}
|
||||||
|
}
|
12
src/admin/common/models/join/outer.php
Normal file
12
src/admin/common/models/join/outer.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelJoinOuter extends AbstractCommonClubsModelJoin
|
||||||
|
{
|
||||||
|
protected function addJoin($q, $str)
|
||||||
|
{
|
||||||
|
$q->outerJoin($str);
|
||||||
|
}
|
||||||
|
}
|
12
src/admin/common/models/join/right.php
Normal file
12
src/admin/common/models/join/right.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelJoinRight extends AbstractCommonClubsModelJoin
|
||||||
|
{
|
||||||
|
protected function addJoin($q, $str)
|
||||||
|
{
|
||||||
|
$q->rightJoin($str);
|
||||||
|
}
|
||||||
|
}
|
37
src/admin/common/models/offer.php
Normal file
37
src/admin/common/models/offer.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelOffer extends AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryOffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->getValues()['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setName($name)
|
||||||
|
{
|
||||||
|
$this->setValue('name', $name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public function getClubs()
|
||||||
|
{
|
||||||
|
return $this->fetchAssociatedElements(new CommonClubsModelFactoryClub(), '');
|
||||||
|
}*/
|
||||||
|
|
||||||
|
protected function prepareDelete($db)
|
||||||
|
{
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
$q->delete('#__club_offer_assocs');
|
||||||
|
$q->where("offerid = {$this->getId()}");
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
49
src/admin/common/models/offerassoc.php
Normal file
49
src/admin/common/models/offerassoc.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelOfferassoc extends AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryOfferassoc();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return CommonClubsModelClub
|
||||||
|
*/
|
||||||
|
public function getClub()
|
||||||
|
{
|
||||||
|
return $this->getValues()['club'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param CommonClubsModelClub $club
|
||||||
|
*/
|
||||||
|
public function setClub($club)
|
||||||
|
{
|
||||||
|
$this->setValue('club', $club);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return CommonClubsModelOffer
|
||||||
|
*/
|
||||||
|
public function getOffer()
|
||||||
|
{
|
||||||
|
return $this->getValues()['offer'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param CommonClubsModelOffer $offer
|
||||||
|
*/
|
||||||
|
public function setOffer($offer)
|
||||||
|
{
|
||||||
|
$this->setValue('offer', $offer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
src/admin/common/models/place.php
Normal file
43
src/admin/common/models/place.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelPlace extends AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryPlace();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->getValues()['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClub()
|
||||||
|
{
|
||||||
|
return $this->getValues()['club'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getArea()
|
||||||
|
{
|
||||||
|
return $this->getValues()['area'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setName($name)
|
||||||
|
{
|
||||||
|
$this->setValue('name', $name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setArea($area)
|
||||||
|
{
|
||||||
|
$this->setValue('area', $area);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setClub($club)
|
||||||
|
{
|
||||||
|
$this->setValue('club', $club);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
32
src/admin/common/models/position.php
Normal file
32
src/admin/common/models/position.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelPosition extends AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->getValues()['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setName($name)
|
||||||
|
{
|
||||||
|
$this->setValue('name', $name);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareDelete($db)
|
||||||
|
{
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
$q->delete('#__club_user_assocs');
|
||||||
|
$q->where("positionid = {$this->getId()}");
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
221
src/admin/common/models/user.php
Normal file
221
src/admin/common/models/user.php
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelUser extends AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->getValues()['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setName($name)
|
||||||
|
{
|
||||||
|
$this->setValue('name', $name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUsername()
|
||||||
|
{
|
||||||
|
return $this->getValues()['user'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setUsername($user)
|
||||||
|
{
|
||||||
|
// XXX Check for validity
|
||||||
|
$this->setValue('user', $user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAddress()
|
||||||
|
{
|
||||||
|
return $this->getValues()['address'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAddress($address)
|
||||||
|
{
|
||||||
|
$this->setValue('address', $address);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCity()
|
||||||
|
{
|
||||||
|
return $this->getValues()['city'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCity($city)
|
||||||
|
{
|
||||||
|
$this->setValue('city', $city);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMail()
|
||||||
|
{
|
||||||
|
return $this->getValues()['mail'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMail($mail) {
|
||||||
|
$this->setValue('mail', $mail);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPhone()
|
||||||
|
{
|
||||||
|
return $this->getValues()['phone'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPhone($phone)
|
||||||
|
{
|
||||||
|
$this->setValue('phone', $phone);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMobile()
|
||||||
|
{
|
||||||
|
return $this->getValues()['mobile'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMobile($mobile)
|
||||||
|
{
|
||||||
|
$this->setValue('mobile', $mobile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isPasswordValid($password)
|
||||||
|
{
|
||||||
|
$hash = $this->getValues()['password'];
|
||||||
|
|
||||||
|
if(password_verify($password, $hash))
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkRehashNeeded($newPassword, $check = false)
|
||||||
|
{
|
||||||
|
$hash = $this->getValues()['password'];
|
||||||
|
if(password_needs_rehash($hash, PASSWORD_DEFAULT))
|
||||||
|
{
|
||||||
|
if($check)
|
||||||
|
{
|
||||||
|
if(! $this->isPasswordValid($newPassword))
|
||||||
|
throw new Exception('Password did not match.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setPassword($newPassword);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPassword($password)
|
||||||
|
{
|
||||||
|
$hash = password_hash($password, PASSWORD_DEFAULT);
|
||||||
|
$this->setValue('password', $hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isPasswordSet()
|
||||||
|
{
|
||||||
|
$password = $this->getValues()['password'];
|
||||||
|
return isset($password) && strlen($password) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPositions()
|
||||||
|
{
|
||||||
|
return $this->fetchAssociatedElements(new CommonClubsModelFactoryUserassoc(), 'userid');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPresidentClubs()
|
||||||
|
{
|
||||||
|
return $this->fetchAssociatedElements(new CommonClubsModelFactoryClub(), 'president');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isPasswordSuitable($password)
|
||||||
|
{
|
||||||
|
if(strlen($password) < 8)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$pwdLower = strtolower($password);
|
||||||
|
$userLower = strtolower($this->getName());
|
||||||
|
|
||||||
|
if(strpos($pwdLower, $userLower) || strpos($userLower, $pwdLower))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(
|
||||||
|
preg_match('/.*[a-z].*/', $password) === false ||
|
||||||
|
preg_match('/.*[A-Z].*/', $password) === false
|
||||||
|
)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isUsernameFree($user)
|
||||||
|
{
|
||||||
|
$factory = new CommonClubsModelFactoryUser();
|
||||||
|
$users = $factory->loadElements(null, null, function($q) use ($user){
|
||||||
|
$q->where('main.user = ' . $q->q($user));
|
||||||
|
});
|
||||||
|
|
||||||
|
if(sizeof($users) == 0)
|
||||||
|
return true;
|
||||||
|
elseif(sizeof($users) == 1)
|
||||||
|
{
|
||||||
|
if($this->getId() == $users[0]->getId())
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw new Exception('The database is inconsistent!');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareDelete($db)
|
||||||
|
{
|
||||||
|
$q = $db->getQuery(true);
|
||||||
|
$q->delete('#__club_user_assocs')->where("userid = {$this->getId()}");
|
||||||
|
$db->setQuery($q);
|
||||||
|
$db->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataIsValid()
|
||||||
|
{
|
||||||
|
if(! parent::dataIsValid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(! $this->usernameIsValid())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function usernameIsValid()
|
||||||
|
{
|
||||||
|
$factory = $this->getFactory();
|
||||||
|
$medb = $factory->loadById($this->getId(), false);
|
||||||
|
|
||||||
|
if($medb !== null && $medb->getUserName() === $this->getUsername())
|
||||||
|
// No change was made
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(! $this->isUsernameFree($this->getUsername()) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterDatabaseRawData($values)
|
||||||
|
{
|
||||||
|
if(strlen($values['phone']) == 0)
|
||||||
|
$values['phone'] = null;
|
||||||
|
|
||||||
|
if(strlen($values['mobile']) == 0)
|
||||||
|
$values['mobile'] = null;
|
||||||
|
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
119
src/admin/common/models/userassoc.php
Normal file
119
src/admin/common/models/userassoc.php
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class CommonClubsModelUserassoc extends AbstractCommonClubsModel
|
||||||
|
{
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryUserassoc();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return CommonClubsModelUser
|
||||||
|
*/
|
||||||
|
public function getUser()
|
||||||
|
{
|
||||||
|
return $this->getValues()['user'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return CommonClubsModelPosition
|
||||||
|
*/
|
||||||
|
public function getPosition()
|
||||||
|
{
|
||||||
|
return $this->getValues()['position'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return CommonClubsModelClub
|
||||||
|
*/
|
||||||
|
public function getClub()
|
||||||
|
{
|
||||||
|
return $this->getValues()['club'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setUser($user)
|
||||||
|
{
|
||||||
|
$this->setValue('user', $user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPosition($position)
|
||||||
|
{
|
||||||
|
$this->setValue('position', $position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setClub($club)
|
||||||
|
{
|
||||||
|
$this->setValue('club', $club);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isAdmin()
|
||||||
|
{
|
||||||
|
return $this->getValues()['admin'] == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAdmin($admin)
|
||||||
|
{
|
||||||
|
if($admin)
|
||||||
|
$this->setValue('admin', 1);
|
||||||
|
else
|
||||||
|
$this->setValue('admin', 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAddress()
|
||||||
|
{
|
||||||
|
return $this->getValues()['address'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAddress($address)
|
||||||
|
{
|
||||||
|
$this->setValue('address', $address);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMail()
|
||||||
|
{
|
||||||
|
return $this->getValues()['mail'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMail($mail)
|
||||||
|
{
|
||||||
|
$this->setValue('mail', $mail);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPhone()
|
||||||
|
{
|
||||||
|
return $this->getValues()['phone'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPhone($phone)
|
||||||
|
{
|
||||||
|
$this->setValue('phone', $phone);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getState()
|
||||||
|
{
|
||||||
|
return $this->getValues()['state'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setState($state)
|
||||||
|
{
|
||||||
|
switch(strtolower($state))
|
||||||
|
{
|
||||||
|
case 'vacant':
|
||||||
|
case 'temporary':
|
||||||
|
case 'regular':
|
||||||
|
$state = strtolower($state);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Exception("Unknown state \"$state\" found.");
|
||||||
|
}
|
||||||
|
$this->setValue('state', $state);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -8,4 +8,5 @@ defined('_JEXEC') or die;
|
|||||||
class ClubsController extends BaseController
|
class ClubsController extends BaseController
|
||||||
{
|
{
|
||||||
|
|
||||||
|
protected $default_view = 'users';
|
||||||
}
|
}
|
||||||
|
46
src/admin/controllers/club.php
Normal file
46
src/admin/controllers/club.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsControllerClub extends AbstractClubsController
|
||||||
|
{
|
||||||
|
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'club';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterRaw(&$values)
|
||||||
|
{
|
||||||
|
if(is_null($values['charitable']))
|
||||||
|
$values['charitable'] = false;
|
||||||
|
else
|
||||||
|
$values['charitable'] = true;
|
||||||
|
|
||||||
|
$values['president'] = (int)($values['president']);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterPrePacking(&$values)
|
||||||
|
{
|
||||||
|
$values['president'] = $values['president']->getId();
|
||||||
|
}
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryClub();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function additionalData()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'offers' => new CommonClubsControllerMappingInt('Angebot')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function saveAssocs($obj, $values)
|
||||||
|
{
|
||||||
|
$obj->setOfferIds($values['offers']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
91
src/admin/controllers/clubposition.json.php
Normal file
91
src/admin/controllers/clubposition.json.php
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\MVC\Controller\BaseController;
|
||||||
|
use Joomla\CMS\Response\JsonResponse;
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsControllerClubposition extends BaseController
|
||||||
|
{
|
||||||
|
|
||||||
|
public function save()
|
||||||
|
{
|
||||||
|
$app = Factory::getApplication();
|
||||||
|
$input = $app->input->post;
|
||||||
|
|
||||||
|
$id = $input->getCmd('id', 'new');
|
||||||
|
$clubid = $input->getInt('clubid');
|
||||||
|
$positionid = $input->getInt('positionid');
|
||||||
|
$state = $input->getCmd('state', 'regular');
|
||||||
|
$admin = $input->getCmd('admin', '0');
|
||||||
|
$userid = $input->getInt('userid', -1);
|
||||||
|
$address = $input->getString('address');
|
||||||
|
$mail = $input->getString('mail');
|
||||||
|
$phone = $input->getString('phone');
|
||||||
|
|
||||||
|
$clubFactory = new CommonClubsModelFactoryClub();
|
||||||
|
$club = $clubFactory->loadById($clubid);
|
||||||
|
$positionFactory = new CommonClubsModelFactoryPosition();
|
||||||
|
$position = $positionFactory->loadById($positionid);
|
||||||
|
|
||||||
|
$assocFactory = new CommonClubsModelFactoryUserassoc();
|
||||||
|
|
||||||
|
if($id === 'new')
|
||||||
|
{
|
||||||
|
$assoc = $assocFactory->createNew();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$assoc = $assocFactory->loadById((int) $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($userid != -1)
|
||||||
|
{
|
||||||
|
$userFactory = new CommonClubsModelFactoryUser();
|
||||||
|
$user = $userFactory->loadById($userid);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$user = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($state === 'vacant')
|
||||||
|
$user = null;
|
||||||
|
|
||||||
|
$assoc->setUser($user);
|
||||||
|
|
||||||
|
$assoc->setState($state);
|
||||||
|
$assoc->setAddress($address === '' ? null : $address);
|
||||||
|
$assoc->setMail($mail === '' ? null : $mail);
|
||||||
|
$assoc->setPhone($phone === '' ? null : $phone);
|
||||||
|
$assoc->setClub($club);
|
||||||
|
$assoc->setAdmin($admin);
|
||||||
|
$assoc->setPosition($position);
|
||||||
|
|
||||||
|
$assoc->save();
|
||||||
|
|
||||||
|
$ret = array('new' => ($id === 'new'), 'id' => $assoc->getId());
|
||||||
|
|
||||||
|
echo new JsonResponse($ret, null, false, true);
|
||||||
|
|
||||||
|
// jexit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
$app = Factory::getApplication();
|
||||||
|
$input = $app->input->get;
|
||||||
|
|
||||||
|
$id = $input->getInt('id');
|
||||||
|
$factory = new CommonClubsModelFactoryUserassoc();
|
||||||
|
$ua = $factory->loadById($id);
|
||||||
|
$ua->delete();
|
||||||
|
|
||||||
|
$ret = array('id' => $id);
|
||||||
|
|
||||||
|
echo new JsonResponse($ret, null, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
20
src/admin/controllers/offer.php
Normal file
20
src/admin/controllers/offer.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsControllerOffer extends AbstractClubsController
|
||||||
|
{
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'offer';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryOffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
20
src/admin/controllers/position.php
Normal file
20
src/admin/controllers/position.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsControllerPosition extends AbstractClubsController
|
||||||
|
{
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'position';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
106
src/admin/controllers/user.php
Normal file
106
src/admin/controllers/user.php
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsControllerUser extends AbstractClubsController
|
||||||
|
{
|
||||||
|
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'user';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function rawDataIsValid($values)
|
||||||
|
{
|
||||||
|
if(! parent::rawDataIsValid($values))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if($this->passwordIsSet($values))
|
||||||
|
{
|
||||||
|
if( ! $this->passwordIsValid($values))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function passwordIsSet($values)
|
||||||
|
{
|
||||||
|
return isset($values['pwd']) && strlen($values['pwd']) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function passwordIsValid($values)
|
||||||
|
{
|
||||||
|
$pwd = $values['pwd'];
|
||||||
|
$pwdConfirm = $values['pwdConfirm'];
|
||||||
|
|
||||||
|
if(trim($pwd) != trim($pwdConfirm))
|
||||||
|
{
|
||||||
|
Factory::getApplication()->enqueueMessage('Die Passwörter stimmen nicht überein.', 'error');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME Check password strength
|
||||||
|
// if(! ClubsUser::checkPasswordStrength(trim($pwd)))
|
||||||
|
// {
|
||||||
|
// Factory::getApplication()->enqueueMessage('Das Passwort ist zu schwach.', 'error');
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* {@inheritDoc}
|
||||||
|
* @see AbstractClubsController::filterObject()
|
||||||
|
* @param CommonClubsModelUser $obj
|
||||||
|
*/
|
||||||
|
protected function filterObject($obj, $values)
|
||||||
|
{
|
||||||
|
// if($obj->isNew() && (empty($values['pwd']) || strlen($values['pwd']) == 0) )
|
||||||
|
|
||||||
|
if(isset($values['pwd']) && strlen($values['pwd']) > 0)
|
||||||
|
{
|
||||||
|
$obj->setPassword($values['pwd']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
* @see AbstractClubsController::objectValid()
|
||||||
|
* @param CommonClubsModelUser $obj
|
||||||
|
*/
|
||||||
|
protected function objectValid($obj)
|
||||||
|
{
|
||||||
|
if(! $obj->isPasswordSet())
|
||||||
|
{
|
||||||
|
Factory::getApplication()->enqueueMessage('Kein Passwort wurde vergeben.', 'error');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function filterRaw(&$values)
|
||||||
|
{
|
||||||
|
unset($values['password']);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function additionalData()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'pwd' => new CommonClubsControllerMappingString('Passwort'),
|
||||||
|
'pwdConfirm' => new CommonClubsControllerMappingString('Passwortwiederholung')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
51
src/admin/res/admin-club.css
Normal file
51
src/admin/res/admin-club.css
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
#dialog-club {
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
position: fixed;
|
||||||
|
left: 0pt;
|
||||||
|
top: 0pt;
|
||||||
|
z-index: 1500;
|
||||||
|
/*border-style: solid;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialog-club > .dialog {
|
||||||
|
background-color: white;
|
||||||
|
width: 70vw;
|
||||||
|
height: 60vh;
|
||||||
|
position: absolute;
|
||||||
|
left: 15vw;
|
||||||
|
top: 20vh;
|
||||||
|
/*z-index: 100;*/
|
||||||
|
border-style: solid;
|
||||||
|
/*visibility: visible;*/
|
||||||
|
overflow: auto;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialog-club > .background {
|
||||||
|
background-color: gray;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
position: absolute;
|
||||||
|
left: 0pt;
|
||||||
|
top: 0pt;
|
||||||
|
/*z-index: 1000;*/
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog-entry-hidden {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-disabled {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hidden-id {
|
||||||
|
display: none;
|
||||||
|
}
|
102
src/admin/res/club/club.js
Normal file
102
src/admin/res/club/club.js
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
|
||||||
|
jQuery(function($){
|
||||||
|
|
||||||
|
function closeDialog() {
|
||||||
|
$('#dialog-club > .dialog').html('');
|
||||||
|
$('body').removeClass('form-disabled');
|
||||||
|
$('#dialog-club').addClass('dialog-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
function openDialog(data) {
|
||||||
|
// console.log(data);
|
||||||
|
$('#dialog-club > .dialog').html(data);
|
||||||
|
$('body').addClass('form-disabled');
|
||||||
|
$('#dialog-club').removeClass('dialog-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#new-position').click(function(ev){
|
||||||
|
ev.preventDefault();
|
||||||
|
|
||||||
|
var url = $('#new-position').attr('href');
|
||||||
|
$.get(url, function(data){
|
||||||
|
openDialog(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('click', '#clubposition-abort', function(ev){
|
||||||
|
ev.preventDefault();
|
||||||
|
closeDialog();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('change', '#clubposition-state', function(){
|
||||||
|
if($('#clubposition-state').val() == "vacant")
|
||||||
|
$('#clubposition-user').addClass('dialog-entry-hidden');
|
||||||
|
else
|
||||||
|
$('#clubposition-user').removeClass('dialog-entry-hidden');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('click', '#clubposition-save', function(ev){
|
||||||
|
ev.preventDefault();
|
||||||
|
|
||||||
|
var data = $('#clubposition-form').serializeArray();
|
||||||
|
|
||||||
|
$.post($('#clubposition-form').attr('action'), data, function(data){
|
||||||
|
// console.log(data)
|
||||||
|
|
||||||
|
if(data.success)
|
||||||
|
{
|
||||||
|
console.log("all right!");
|
||||||
|
|
||||||
|
var url = "index.php?option=com_clubs&view=clubposition&layout=row&id=" + data.data.id + "&club=" + $('#hidden-id').html();
|
||||||
|
console.log(url);
|
||||||
|
|
||||||
|
if(data.data.new) {
|
||||||
|
$.get(url, function(data2){
|
||||||
|
$("#userassocs").append(data2);
|
||||||
|
closeDialog();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$.get(url, function(data2){
|
||||||
|
$('#userassoc-' + data.data.id).html(data2);
|
||||||
|
closeDialog();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alert(data.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('click', '.edit-position', function(ev){
|
||||||
|
ev.preventDefault();
|
||||||
|
|
||||||
|
var url = ev.currentTarget.href;
|
||||||
|
|
||||||
|
$.get(url, function(data){
|
||||||
|
openDialog(data);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('click', '.del-position', function(ev){
|
||||||
|
ev.preventDefault();
|
||||||
|
|
||||||
|
if(confirm("Der Eintrag wird endgültig gelöscht werden. OK?")) {
|
||||||
|
var url = ev.currentTarget.href;
|
||||||
|
$.get(url, function(d){
|
||||||
|
if(d.success) {
|
||||||
|
$('#userassoc-' + d.data.id).remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).on('beforeunload', function(){return "Wollen Sie die Seite wirklich verlassen? Möglicherweise sind nicht alle Daten gesichert.";});
|
||||||
|
$('.form-exit').click(function(){
|
||||||
|
$(window).off('beforeunload');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
68
src/admin/sql/mysql/install.sql
Normal file
68
src/admin/sql/mysql/install.sql
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_clubs` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
`address` tinytext NOT NULL,
|
||||||
|
`city` varchar(50) NOT NULL,
|
||||||
|
`homepage` varchar(100) DEFAULT NULL,
|
||||||
|
`mail` varchar(100) NOT NULL,
|
||||||
|
`iban` char(34) NOT NULL,
|
||||||
|
`bic` char(11) NOT NULL,
|
||||||
|
`charitable` tinyint(1) NOT NULL,
|
||||||
|
`president` int(10) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_keys` (
|
||||||
|
`privkey` text NOT NULL,
|
||||||
|
`publickey` text NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_offer_assocs` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`clubid` int(10) NOT NULL,
|
||||||
|
`offerid` int(10) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_offers` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`name` varchar(100) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_places` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`clubid` int(10) NOT NULL,
|
||||||
|
`name` varchar(100) NOT NULL,
|
||||||
|
`address` tinytext NOT NULL,
|
||||||
|
`area` int(10) DEFAULT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_positions` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`name` varchar(100) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_user_assocs` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`clubid` int(10) NOT NULL,
|
||||||
|
`userid` int(10) DEFAULT NULL,
|
||||||
|
`positionid` int(10) NOT NULL,
|
||||||
|
`admin` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`state` enum('regular','vacant','temporary') NOT NULL DEFAULT 'vacant',
|
||||||
|
`address` tinytext DEFAULT NULL,
|
||||||
|
`mail` varchar(100) DEFAULT NULL,
|
||||||
|
`phone` varchar(50) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `#__club_users` (
|
||||||
|
`id` int(10) NOT NULL AUTO_INCREMENT,
|
||||||
|
`user` varchar(30) NOT NULL,
|
||||||
|
`password` varchar(150) DEFAULT NULL,
|
||||||
|
`name` varchar(255) NOT NULL,
|
||||||
|
`address` tinytext NOT NULL,
|
||||||
|
`city` varchar(50) NOT NULL,
|
||||||
|
`mail` varchar(100) NOT NULL,
|
||||||
|
`phone` varchar(50) DEFAULT NULL,
|
||||||
|
`mobile` varchar(50) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
);
|
9
src/admin/sql/mysql/uninstall.sql
Normal file
9
src/admin/sql/mysql/uninstall.sql
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
DROP TABLE IF EXISTS `#__club_clubs`;
|
||||||
|
DROP TABLE IF EXISTS `#__club_keys`;
|
||||||
|
DROP TABLE IF EXISTS `#__club_offer_assocs`;
|
||||||
|
DROP TABLE IF EXISTS `#__club_offers`;
|
||||||
|
DROP TABLE IF EXISTS `#__club_places`;
|
||||||
|
DROP TABLE IF EXISTS `#__club_positions`;
|
||||||
|
DROP TABLE IF EXISTS `#__club_user_assocs`;
|
||||||
|
DROP TABLE IF EXISTS `#__club_users`;
|
0
src/admin/sql/mysql/updates/0.0.1.sql
Normal file
0
src/admin/sql/mysql/updates/0.0.1.sql
Normal file
@ -1,18 +0,0 @@
|
|||||||
DROP TABLE IF EXISTS `#__club_keys`;
|
|
||||||
CREATE TABLE `#__club_keys` (
|
|
||||||
`privkey` text NOT NULL,
|
|
||||||
`publickey` text NOT NULL
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
|
|
||||||
INSERT INTO `#__club_keys` VALUES ('-----BEGIN PRIVATE KEY-----\nMIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDvZHhLHHqmfnnP\noj5Y7AtS0UvEN8XLzNdHj/0nHBVHrXDMNul8phbCaevuaXcYTZvb9JBTAO019Bnu\nCoj6KFrk0Cw/zcVgVHryguNCr2DeLaxAXyArfkKNZPuG/kTw1mxE6ebeR886JVU0\nfQpIi3zDGAHpXxaKO7EttnvQK8NRd4h5O5EI6dCnmMn/8xY/d5G7AsZKuAxq01ZB\nmmUrkRKrQtBTwUeJWhtfT+XjOa1n1FVIwmqz4O2sqbfm0pa6PX0BNT0CUp0RI1wN\nGmF6bh/WkQ8h3jmTamzZ2cQUwDnL7ByAJqexJrrPacRbE6EotCGODjuBXDSy02PJ\nZk0fThZpAgMBAAECggEBANJaU0WU8cUo73pekzBpwY11MYFqjJiHF0ffo0/hYmWI\nZsxbGBGak/cjQdhNvgOR9nlxTfxRnR7CrqI3iaNfIHdc4PTzqBL8SMid8HohRxoT\nwf8SV19AY9SAvnAhL4z8rUhky6PYL6RlN5iWoxmZz/hSOSPKlTDEQOztI6CJQ+hp\nUFEiOLq/TSWB1DYEu6qAQRyI5wcC1QMo+zB/zBwIuM3DsB2f6Xtj86kXzU/bGeDj\nNLbsCuhRbFyMgvcJ3z6KQTvREZOGkeF22HA+ZVH7bWf00PqCEjq2I/XFHZGK61X4\nWLgNOUmVZSmGv2Kd9UJaC8VffkBnrV3XFN1n97gcP4ECgYEA/Joaw3VrbWpKsquf\nMiTuMJVyvcV9fmVhWhPNuioCwWwBx2mjGz/texd/67KNWPr7r1IGCIBnYfs3Dy+k\nOo+lAWT7oaec24dH4vjiljWrvFvZXmkpTa6j8RSqhhIVTUFSnXBkvxkEzcnUMbxK\n6A4gdggSfcMpeo3DmjGqNWTXlbkCgYEA8pzgD2VFEYq4/fgDhxKeoWSt1UPJtPxT\n4iYPXWKGdWLsEKg36oYiRXSTdan5aRwiZUXpDoFJU8vVCfmdVb2qpwPp66LwYFax\nAYuA3aPTi9npT4nDOBygVGSTY0TsxmL5asndyxl99OdoskLmS3N2UzeWMy7prRTt\nWZL7uWnU3jECgYEA+8EHLYkIcXs/SYV823gtIKTCP9rlsSSPezxDjOgz6NyhhUKG\nejEjmcuZBarl7ynt0BU6yBxZbTD39h2wW2EwvgwMMlggIDda8R7GjZieOdN89/ht\nXuvQnwTO02KQcnfJQ/pxnnfr7sHZx1v3eAIkXh67dzYcT/WcXkBjeGWx65kCgYEA\n0WU8rY0GU+GbUPfic45Kg5nVvx/G1AKEk8etszf6PQ6oGKhXun8SzUeUjhWqQmIZ\n/badM/u6QizHLtjWRs5wn73tA4eaWEv6cg7ppmJjj20AxbltWNy8NJqp6x/uDDwY\ncWbRmx3hbKLd5h1/jteU5LYxWPPAk7ZgNNN7l8gUBcECgYEAzVVKQ5dn58iHkH1i\nB3UUnTrqPD/cn7WigcWn7A6vpxqbGARkAyIXV/xqLoD8pX1G7JhqFKArC+UJzUuC\n6hgL1Hq+OJXTaN2NzcvQaIvLzsOWQebFtNfFxi0tzAE0t2/JfuFxeam0WZunaNgg\nAabygognDdEZW9HBvCydJ5N8e+s=\n-----END PRIVATE KEY-----\n','-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA72R4Sxx6pn55z6I+WOwL\nUtFLxDfFy8zXR4/9JxwVR61wzDbpfKYWwmnr7ml3GE2b2/SQUwDtNfQZ7gqI+iha\n5NAsP83FYFR68oLjQq9g3i2sQF8gK35CjWT7hv5E8NZsROnm3kfPOiVVNH0KSIt8\nwxgB6V8WijuxLbZ70CvDUXeIeTuRCOnQp5jJ//MWP3eRuwLGSrgMatNWQZplK5ES\nq0LQU8FHiVobX0/l4zmtZ9RVSMJqs+DtrKm35tKWuj19ATU9AlKdESNcDRphem4f\n1pEPId45k2ps2dnEFMA5y+wcgCansSa6z2nEWxOhKLQhjg47gVw0stNjyWZNH04W\naQIDAQAB\n-----END PUBLIC KEY-----\n');
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `#__club_users`;
|
|
||||||
CREATE TABLE `#__club_users` (
|
|
||||||
`id` int(10) NOT NULL AUTO_INCREMENT,
|
|
||||||
`user` varchar(30) NOT NULL,
|
|
||||||
`password` varchar(150) DEFAULT NULL,
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
|
|
||||||
|
|
||||||
INSERT INTO `#__club_users` VALUES (1,'chris','$2y$10$2/aeOfLlLwFx7JYXpaAOH.CG0ZtvkzTuK6nojvSIuOYlTbSd07CqC');
|
|
137
src/admin/views/club/tmpl/default.php
Normal file
137
src/admin/views/club/tmpl/default.php
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<form method="post" action="<?php echo $this->address; ?>" id='form-club'>
|
||||||
|
<input type='hidden' name='id' value='<?php echo $this->object->getId(); ?>'>
|
||||||
|
<h2>Stammdaten</h2>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Clubname</td>
|
||||||
|
<td><input type='text' name='name' value='<?php echo htmlentities($this->object->getName()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Vollständige postalische Adresse</td>
|
||||||
|
<td>
|
||||||
|
<textarea name='address' rows='5'><?php echo htmlentities($this->object->getAddress()); ?></textarea>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Stadt</td>
|
||||||
|
<td><input type='text' name='city' value='<?php echo htmlentities($this->object->getCity()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Homepage</td>
|
||||||
|
<td><input type='text' name='homepage' value='<?php echo htmlentities($this->object->getHomepage()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>E-Mail</td>
|
||||||
|
<td><input type='text' name='mail' value='<?php echo htmlentities($this->object->getMail()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>IBAN</td>
|
||||||
|
<td><input type='text' name='iban' value='<?php echo htmlentities($this->object->getIban()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>BIC</td>
|
||||||
|
<td><input type='text' name='bic' value='<?php echo htmlentities($this->object->getBic()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Gemeinnützig</td>
|
||||||
|
<td><input type='checkbox' name='charitable' value='1' <?php echo $this->object->isCharitable() ? 'checked' : ''; ?>></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Vorsitzende/r</td>
|
||||||
|
<td>
|
||||||
|
<select name='president'>
|
||||||
|
<?php foreach($this->users as $u): ?>
|
||||||
|
<option value='<?php echo $u->getId(); ?>' <?php if ($this->object->getPresident() !== null && $this->object->getPresident()->getId() == $u->getId()) echo 'selected="selected"'; ?>>
|
||||||
|
<?php echo htmlentities("{$u->getName()}, {$u->getCity()}"); ?>
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
<?php if(! $this->isNew): ?>
|
||||||
|
<tr>
|
||||||
|
<td>ID</td>
|
||||||
|
<td><?php echo $this->object->getId(); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endif; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<?php if(! $this->isNew): ?>
|
||||||
|
<h2>Angebote</h2>
|
||||||
|
<?php foreach($this->object->getOffers() as $oconf): ?>
|
||||||
|
<input type='checkbox' name='offers[]' value='<?php echo $oconf['offer']->getId(); ?>' <?php if($oconf['valid']) echo 'checked="checked"';?>>
|
||||||
|
<?php echo htmlentities($oconf['offer']->getName()); ?><br />
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<h2>Posten</h2>
|
||||||
|
<?php if(sizeof($this->object->getUsers()) == 0 ): ?>
|
||||||
|
<p>Dem Verein ist bisher kein Posten zugewiesen.</p>
|
||||||
|
<?php else: ?>
|
||||||
|
<table width='100%' class='table table-stiped, table-hover' id='userassocs'>
|
||||||
|
<tr>
|
||||||
|
<th width='20%'>Rolle</th>
|
||||||
|
<th width='25%'>Name</th>
|
||||||
|
<th width='10%'>Stadt</th>
|
||||||
|
<th width='5%' style='text-align: center;'>Admin?</th>
|
||||||
|
<th></th>
|
||||||
|
<th width='5%'>ID</th>
|
||||||
|
</tr>
|
||||||
|
<?php foreach($this->object->getUsers() as $ua): ?>
|
||||||
|
<?php
|
||||||
|
$user = $ua->getUser();
|
||||||
|
if($user == null)
|
||||||
|
{
|
||||||
|
$username = '<i>Derzeit vakant</i>';
|
||||||
|
$usercity = '';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$username = htmlentities($user->getName());
|
||||||
|
$usercity = htmlentities($user->getCity());
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<tr id='userassoc-<?php echo $ua->getId(); ?>'>
|
||||||
|
<td><?php echo htmlentities($ua->getPosition()->getName()); ?></td>
|
||||||
|
<td><?php echo $username; ?></td>
|
||||||
|
<td><?php echo $usercity; ?></td>
|
||||||
|
<td style='text-align: center;'><?php if($ua->isAdmin()) echo "<span class='icon-checkmark'></span>"; ?></td>
|
||||||
|
<td>
|
||||||
|
<a href='<?php echo Route::_("index.php?option=com_clubs&view=clubposition&layout=edit&club={$this->object->getId()}&id={$ua->getId()}"); ?>' class='edit-position'><span class='icon-edit'></span></a>
|
||||||
|
<a href='<?php echo Route::_("index.php?option=com_clubs&task=clubposition.delete&format=json&id={$ua->getId()}"); ?>' class='del-position'><span class='icon-delete'></span></a>
|
||||||
|
</td>
|
||||||
|
<td><?php echo $ua->getId(); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
<?php endif; ?>
|
||||||
|
<p><a href='<?php echo Route::_("index.php?option=com_clubs&view=clubposition&layout=edit&club={$this->object->getId()}&id=new"); ?>' id='new-position'><span class='icon-new'></span> Neuen Posten einfügen</a></p>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<input type='submit' value='Speichern' class='form-exit'> <br /><a href='<?php echo Route::_('index.php?option=com_clubs&view=clubs'); ?>' class='form-exit'>Zurück zur Übersicht</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div id='dialog-club' class='dialog-hidden'>
|
||||||
|
<div class='background'></div>
|
||||||
|
<div class='dialog'>Ein Test</div>
|
||||||
|
<div id='hidden-id'><?php echo $this->object->getId(); ?></div>
|
||||||
|
</div>
|
||||||
|
|
43
src/admin/views/club/view.html.php
Normal file
43
src/admin/views/club/view.html.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
JLoader::register("ClubsControllerClub", JPATH_ROOT . "/administrator/components/com_clubs/controllers/club.php");
|
||||||
|
|
||||||
|
class ClubsViewClub extends AbstractClubsViewSingle
|
||||||
|
{
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Club-Management - Verein', 'cube');
|
||||||
|
|
||||||
|
$this->prepareDisplay();
|
||||||
|
|
||||||
|
$userFactory = new CommonClubsModelFactoryUser();
|
||||||
|
$this->users = $userFactory->loadElements();
|
||||||
|
|
||||||
|
JHtmlJquery::framework();
|
||||||
|
Factory::getDocument()->addScript('components/com_clubs/res/club/club.js');
|
||||||
|
Factory::getDocument()->addStyleSheet('components/com_clubs/res/admin-club.css');
|
||||||
|
|
||||||
|
// $this->
|
||||||
|
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getControllerName()
|
||||||
|
{
|
||||||
|
return 'club';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryClub();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
90
src/admin/views/clubposition/tmpl/edit.php
Normal file
90
src/admin/views/clubposition/tmpl/edit.php
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<form id='clubposition-form' method="post" action="<?php echo Route::_('index.php?option=com_clubs&task=clubposition.save&format=json') ?>">
|
||||||
|
<input type='hidden' name='id' value='<?php echo $this->id; ?>'>
|
||||||
|
<input type='hidden' name='clubid' value='<?php echo $this->clubid; ?>'>
|
||||||
|
<h1>Posten bearbeiten</h1>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Funktion: </td>
|
||||||
|
<td>
|
||||||
|
<select name='positionid'>
|
||||||
|
<?php foreach($this->positions as $p): ?>
|
||||||
|
<?php
|
||||||
|
if($this->assoc->getPosition() !== null)
|
||||||
|
$selected = $this->assoc->getPosition()->getId() == $p->getId();
|
||||||
|
else
|
||||||
|
$selected = false;
|
||||||
|
?>
|
||||||
|
<option value='<?php echo $p->getId(); ?>' <?php if($selected) echo 'selected'; ?>>
|
||||||
|
<?php echo $p->getName(); ?>
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Status</td>
|
||||||
|
<td>
|
||||||
|
<select name='state' id='clubposition-state'>
|
||||||
|
<option value='regular' <?php echo $this->assoc->getState() === 'regular' ? 'selected' : ''; ?>>regulär</option>
|
||||||
|
<option value='temporary' <?php echo $this->assoc->getState() === 'temporary' ? 'selected' : ''; ?>>kommisarisch</option>
|
||||||
|
<option value='vacant' <?php echo $this->assoc->getState() === 'vacant' ? 'selected' : ''; ?>>vakant</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id='clubposition-user' <?php if($this->assoc->getState() === 'vacant') echo 'class="dialog-entry-hidden"'; ?>>
|
||||||
|
<td>Person: </td>
|
||||||
|
<td>
|
||||||
|
<select name='userid'>
|
||||||
|
<?php foreach($this->users as $u): ?>
|
||||||
|
<?php
|
||||||
|
$uid = $this->assoc->getUser() === null ? -1 : $this->assoc->getUser()->getId();
|
||||||
|
$selected = ($u->getId() == $uid);
|
||||||
|
?>
|
||||||
|
<option value='<?php echo $u->getId();?>' <?php echo $selected ? 'selected' : ''; ?>>
|
||||||
|
<?php echo $u->getName(); ?> (<?php echo $u->getCity(); ?>)
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Admin: </td>
|
||||||
|
<td>
|
||||||
|
<input type='checkbox' name='admin' value='1' <?php echo $this->assoc->isAdmin() ? 'checked' : ''; ?>>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Postalische Adresse (optional): </td>
|
||||||
|
<td>
|
||||||
|
<textarea name='address' rows='4'><?php echo $this->assoc->getAddress(); ?></textarea>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>E-Mail (optional): </td>
|
||||||
|
<td>
|
||||||
|
<input type='text' name='mail' value='<?php echo $this->assoc->getMail(); ?>'>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Telefon-Nr. (optional): </td>
|
||||||
|
<td>
|
||||||
|
<input type='text' name='phone' value='<?php echo $this->assoc->getPhone(); ?>'>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<a href='#' id='clubposition-save'>Speichern</a>
|
||||||
|
<a href='#' id='clubposition-abort'>Abbrechen</a>
|
||||||
|
|
17
src/admin/views/clubposition/tmpl/row.php
Normal file
17
src/admin/views/clubposition/tmpl/row.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
<td><?php echo htmlentities($this->assoc->getPosition()->getName()); ?></td>
|
||||||
|
<td><?php echo $this->username; ?></td>
|
||||||
|
<td><?php echo $this->usercity; ?></td>
|
||||||
|
<td style='text-align: center;'><?php if($this->assoc->isAdmin()) echo "<span class='icon-checkmark'></span>"; ?></td>
|
||||||
|
<td>
|
||||||
|
<a href='<?php echo Route::_("index.php?option=com_clubs&view=clubposition&layout=edit&club={$this->clubid}&id={$this->assoc->getId()}"); ?>' class='edit-position'><span class='icon-edit'></span></a>
|
||||||
|
<a href='<?php echo Route::_("index.php?option=com_clubs&task=clubposition.delete&format=json&id={$this->assoc->getId()}"); ?>' class='del-position'><span class='icon-delete'></span></a>
|
||||||
|
</td>
|
||||||
|
<td><?php echo $this->assoc->getId(); ?></td>
|
62
src/admin/views/clubposition/view.html.php
Normal file
62
src/admin/views/clubposition/view.html.php
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\MVC\View\HtmlView;
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
JLoader::register("ClubsControllerPosition", JPATH_ROOT . "/administrator/components/com_clubs/controllers/position.php");
|
||||||
|
|
||||||
|
class ClubsViewClubPosition extends HtmlView
|
||||||
|
{
|
||||||
|
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
$input = Factory::getApplication()->input->get;
|
||||||
|
$positonFactory = new CommonClubsModelFactoryPosition();
|
||||||
|
$userFactory = new CommonClubsModelFactoryUser();
|
||||||
|
$this->positions = $positonFactory->loadElements();
|
||||||
|
$this->users = $userFactory->loadElements();
|
||||||
|
|
||||||
|
$id = $input->getCmd('id', 'new');
|
||||||
|
$assocFactory = new CommonClubsModelFactoryUserassoc();
|
||||||
|
|
||||||
|
if($id !== 'new')
|
||||||
|
{
|
||||||
|
$id = (int) $id;
|
||||||
|
|
||||||
|
$this->assoc = $assocFactory->loadById($id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->assoc = $assocFactory->createNew();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->id = $id;
|
||||||
|
$this->clubid = $input->getInt('club');
|
||||||
|
|
||||||
|
$this->username = '<i>Derzeit vakant.</i>';
|
||||||
|
$this->usercity = '';
|
||||||
|
if($this->assoc->getUser() !== null)
|
||||||
|
{
|
||||||
|
$u = $this->assoc->getUser();
|
||||||
|
$this->username = htmlentities($u->getName());
|
||||||
|
$this->usercity = htmlentities($u->getCity());
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::display($tpl);
|
||||||
|
|
||||||
|
jexit();
|
||||||
|
}
|
||||||
|
protected function getControllerName()
|
||||||
|
{
|
||||||
|
return 'position';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
src/admin/views/clubs/tmpl/default.php
Normal file
34
src/admin/views/clubs/tmpl/default.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table class='table table-stiped, table-hover'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width='30%'>Bezeichnung</th>
|
||||||
|
<th width='20%'>Stadt</th>
|
||||||
|
<th width='20%'>Homepage</th>
|
||||||
|
<th width='20%'>E-Mail</th>
|
||||||
|
<th width='10%'></th>
|
||||||
|
<th width='3%'>id</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<?php foreach($this->objects as $club): ?>
|
||||||
|
<?php $url = htmlentities($club->getHomepage()); ?>
|
||||||
|
<?php $mail = htmlentities($club->getMail()); ?>
|
||||||
|
<tr>
|
||||||
|
<td><a href='<?php echo str_replace('__ID__', $club->getId(), $this->changeUrl); ?>'><?php echo htmlentities($club->getName()); ?></a></td>
|
||||||
|
<td><?php echo htmlentities($club->getCity()); ?></td>
|
||||||
|
<td><a href='<?php echo $url; ?>' target='_blank'><?php echo $url; ?></a></td>
|
||||||
|
<td><a href='mailto:<?php echo $mail; ?>'><?php echo $mail; ?></a></td>
|
||||||
|
<td><a href='<?php echo str_replace('__ID__', $club->getId(), $this->delUrl); ?>'><span class='icon-delete'></span>Löschen</a></td>
|
||||||
|
<td><?php echo htmlentities($club->getId()); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div><a href='<?php echo $this->addUrl; ?>'><span class='icon-new'></span>Neuen Verein anlegen</a></div>
|
27
src/admin/views/clubs/view.html.php
Normal file
27
src/admin/views/clubs/view.html.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsViewClubs extends AbstractClubsViewList
|
||||||
|
{
|
||||||
|
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Club-Management - Clubs', 'cube');
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryClub();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'club';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
27
src/admin/views/offer/tmpl/default.php
Normal file
27
src/admin/views/offer/tmpl/default.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<form method="post" action="<?php echo $this->address; ?>">
|
||||||
|
<input type='hidden' name='id' value='<?php echo $this->object->getId(); ?>'>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Bezeichnung</td>
|
||||||
|
<td><input type='text' name='name' value='<?php echo htmlentities($this->object->getName()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<?php if(! $this->isNew): ?>
|
||||||
|
<tr>
|
||||||
|
<td>ID</td>
|
||||||
|
<td><?php echo $this->object->getId(); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endif; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<input type='submit' value='Speichern'> <br /><a href='<?php echo Route::_('index.php?option=com_clubs&view=offers'); ?>'>Zurück zur Übersicht</a>
|
||||||
|
</form>
|
||||||
|
|
30
src/admin/views/offer/view.html.php
Normal file
30
src/admin/views/offer/view.html.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
JLoader::register("ClubsControllerOffer", JPATH_ROOT . "/administrator/components/com_clubs/controllers/offer.php");
|
||||||
|
|
||||||
|
class ClubsViewOffer extends AbstractClubsViewSingle
|
||||||
|
{
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Club-Management - Angebot', 'file');
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryOffer();
|
||||||
|
}
|
||||||
|
protected function getControllerName()
|
||||||
|
{
|
||||||
|
return 'offer';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
28
src/admin/views/offers/tmpl/default.php
Normal file
28
src/admin/views/offers/tmpl/default.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table class='table table-stiped, table-hover'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width='30%'>Bezeichnung</th>
|
||||||
|
<th width='5%'></th>
|
||||||
|
<th width='5%'>id</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<?php foreach($this->objects as $offer): ?>
|
||||||
|
<?php $link = Route::_('index.php?option=com_clubs&view=offer&id=' . $offer->getId()); ?>
|
||||||
|
<tr>
|
||||||
|
<td><a href='<?php echo str_replace('__ID__', $offer->getId(), $this->changeUrl); ?>'><?php echo htmlentities($offer->getName()); ?></a></td>
|
||||||
|
<td><a href='<?php echo str_replace('__ID__', $offer->getId(), $this->delUrl); ?>'><span class='icon-delete'></span>Löschen</a></td>
|
||||||
|
<td><?php echo htmlentities($offer->getId()); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div><a href='<?php echo $this->addUrl; ?>'><span class='icon-new'></span>Neues Angebot anlegen</a></div>
|
27
src/admin/views/offers/view.html.php
Normal file
27
src/admin/views/offers/view.html.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsViewOffers extends AbstractClubsViewList
|
||||||
|
{
|
||||||
|
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Club-Management - Angebote', 'list');
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryOffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'offer';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
27
src/admin/views/position/tmpl/default.php
Normal file
27
src/admin/views/position/tmpl/default.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<form method="post" action="<?php echo $this->address; ?>">
|
||||||
|
<input type='hidden' name='id' value='<?php echo $this->object->getId(); ?>'>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Bezeichnung</td>
|
||||||
|
<td><input type='text' name='name' value='<?php echo htmlentities($this->object->getName()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<?php if(! $this->isNew): ?>
|
||||||
|
<tr>
|
||||||
|
<td>ID</td>
|
||||||
|
<td><?php echo $this->object->getId(); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endif; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<input type='submit' value='Speichern'> <br /><a href='<?php echo Route::_('index.php?option=com_clubs&view=positions'); ?>'>Zurück zur Übersicht</a>
|
||||||
|
</form>
|
||||||
|
|
28
src/admin/views/position/view.html.php
Normal file
28
src/admin/views/position/view.html.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
JLoader::register("ClubsControllerPosition", JPATH_ROOT . "/administrator/components/com_clubs/controllers/position.php");
|
||||||
|
|
||||||
|
class ClubsViewPosition extends AbstractClubsViewSingle
|
||||||
|
{
|
||||||
|
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Club-Management - Position', 'users');
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
protected function getControllerName()
|
||||||
|
{
|
||||||
|
return 'position';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
26
src/admin/views/positions/tmpl/default.php
Normal file
26
src/admin/views/positions/tmpl/default.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table class='table table-stiped, table-hover'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width='30%'>Bezeichnung</th>
|
||||||
|
<th width='5%'></th>
|
||||||
|
<th width='5%'>id</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<?php foreach($this->objects as $position): ?>
|
||||||
|
<tr>
|
||||||
|
<td><a href='<?php echo str_replace('__ID__', $position->getId(), $this->changeUrl); ?>'><?php echo htmlentities($position->getName()); ?></a></td>
|
||||||
|
<td><a href='<?php echo str_replace('__ID__', $position->getId(), $this->delUrl); ?>'><span class='icon-delete'></span>Löschen</a></td>
|
||||||
|
<td><?php echo htmlentities($position->getId()); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div><a href='<?php echo $this->addUrl; ?>'><span class='icon-new'></span>Neuen Posten anlegen</a></div>
|
27
src/admin/views/positions/view.html.php
Normal file
27
src/admin/views/positions/view.html.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsViewPositions extends AbstractClubsViewList
|
||||||
|
{
|
||||||
|
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Club-Management - Positionen', 'users');
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'position';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
24
src/admin/views/test/tmpl/default.php
Normal file
24
src/admin/views/test/tmpl/default.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
ClubName: <?php echo $this->club->getName(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->getAddress(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->getCity(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->getHomepage(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->getMail(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->getIban(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->getBic(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->isCharitable(); ?> <br />
|
||||||
|
ClubName: <?php echo $this->club->getPresident()->getName(); ?> <br />
|
||||||
|
<?php foreach($this->club->getPlaces() as $place): ?>
|
||||||
|
Place: <?php echo $place->getName(); ?><br>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<h1>Output</h1>
|
||||||
|
<pre><?php print_r($this->log); ?></pre>
|
||||||
|
|
||||||
|
<a href='#' id='mya'>Test Link</a>
|
8
src/admin/views/test/tmpl/foo.php
Normal file
8
src/admin/views/test/tmpl/foo.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
// Append &layout=foo to URL
|
||||||
|
?>
|
||||||
|
<p>This is foo.</p>
|
64
src/admin/views/test/view.html.php
Normal file
64
src/admin/views/test/view.html.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
use Joomla\CMS\MVC\View\HtmlView;
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
JLoader::register("ClubsControllerClub", JPATH_ROOT . "/administrator/components/com_clubs/controllers/club.php");
|
||||||
|
|
||||||
|
class ClubsViewTest extends HtmlView
|
||||||
|
{
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Test');
|
||||||
|
|
||||||
|
$this->log = '';
|
||||||
|
|
||||||
|
$factory = new CommonClubsModelFactoryClub();
|
||||||
|
$this->clubs = $factory->loadElements();
|
||||||
|
|
||||||
|
$this->club = $this->clubs[0];
|
||||||
|
|
||||||
|
$c = $factory->loadById(1);
|
||||||
|
$p = $c->getPresident();
|
||||||
|
$id = $p->getId();
|
||||||
|
|
||||||
|
$places = $c->getPlaces();
|
||||||
|
// $places[0]->setName("abc");
|
||||||
|
// $places[0]->save();
|
||||||
|
|
||||||
|
$pfactory = new CommonClubsModelFactoryPlace();
|
||||||
|
$np = $pfactory->createNew();
|
||||||
|
$np->setName('MyName');
|
||||||
|
$np->setClub($c);
|
||||||
|
// $np->save();
|
||||||
|
$np->getId();
|
||||||
|
|
||||||
|
$np = $c->getPlaces()[2];
|
||||||
|
$np->getName();
|
||||||
|
// $np->setName('foo2 with new Name');
|
||||||
|
// $np->save();
|
||||||
|
// $np->delete();
|
||||||
|
$this->log = $np;
|
||||||
|
|
||||||
|
parent::display($tpl);
|
||||||
|
//Factory::getDocument()->addScript( "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" );
|
||||||
|
JHtmlJquery::framework();
|
||||||
|
Factory::getDocument()->addScript('components/com_clubs/res/clubs.js');
|
||||||
|
//jexit();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getViewName()
|
||||||
|
{
|
||||||
|
return 'club';
|
||||||
|
}
|
||||||
|
protected function getElementController()
|
||||||
|
{
|
||||||
|
return new ClubsControllerClub();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
81
src/admin/views/user/tmpl/default.php
Normal file
81
src/admin/views/user/tmpl/default.php
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<form method="post" action="<?php echo $this->address; ?>">
|
||||||
|
<h2>Stammdaten</h2>
|
||||||
|
<input type='hidden' name='id' value='<?php echo $this->object->getId(); ?>'>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Username</td>
|
||||||
|
<td><input type='text' name='user' value='<?php echo htmlentities($this->object->getUserName()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Passwort</td>
|
||||||
|
<td><input type='password' name='pwd' value=''></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Passwort wiederholen</td>
|
||||||
|
<td><input type='password' name='pwdConfirm' value=''></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Bürgerlicher Name</td>
|
||||||
|
<td><input type='text' name='name' value='<?php echo htmlentities($this->object->getName()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Vollständige postalische Adresse</td>
|
||||||
|
<td>
|
||||||
|
<textarea rows="4" name='address'><?php echo (htmlentities($this->object->getAddress())); ?></textarea>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Stadt</td>
|
||||||
|
<td><input type='text' name='city' value='<?php echo htmlentities($this->object->getCity()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>E-Mail</td>
|
||||||
|
<td><input type='text' name='mail' value='<?php echo htmlentities($this->object->getMail()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Telefon</td>
|
||||||
|
<td><input type='text' name='phone' value='<?php echo htmlentities($this->object->getPhone()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Handy</td>
|
||||||
|
<td><input type='text' name='mobile' value='<?php echo htmlentities($this->object->getMobile()); ?>'></td>
|
||||||
|
</tr>
|
||||||
|
<?php if(! $this->isNew): ?>
|
||||||
|
<tr>
|
||||||
|
<td>ID</td>
|
||||||
|
<td><?php echo $this->object->getId(); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endif; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<?php if(! $this->isNew): ?>
|
||||||
|
<h2>Verknüpfungen</h2>
|
||||||
|
<?php if(sizeof($this->jobs) == 0): ?>
|
||||||
|
<p>Es wurden keine Verknüpfungen zu der Person gefunden.</p>
|
||||||
|
<?php else: ?>
|
||||||
|
<table class='table table-stiped, table-hover'>
|
||||||
|
<tr>
|
||||||
|
<th>Posten</th>
|
||||||
|
<th>Verein</th>
|
||||||
|
<th>Stadt</th>
|
||||||
|
</tr>
|
||||||
|
<?php foreach($this->jobs as $job): ?>
|
||||||
|
<tr>
|
||||||
|
<td><?php echo htmlentities($job['position']); ?></td>
|
||||||
|
<td><a href='<?php echo $job['url']; ?>' target='_blank'><?php echo htmlentities($job['club']); ?></a></td>
|
||||||
|
<td><?php echo htmlentities($job['city']); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
<input type='submit' value='Speichern'> <br /><a href='<?php echo Route::_('index.php?option=com_clubs&view=users'); ?>'>Zurück zur Übersicht</a>
|
||||||
|
</form>
|
71
src/admin/views/user/view.html.php
Normal file
71
src/admin/views/user/view.html.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsViewUser extends AbstractClubsViewSingle
|
||||||
|
{
|
||||||
|
|
||||||
|
public function display($tpl = null)
|
||||||
|
{
|
||||||
|
$this->prepareDisplay();
|
||||||
|
|
||||||
|
if($this->isNew)
|
||||||
|
{
|
||||||
|
$this->jobs = array();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$factory = new CommonClubsModelFactoryUser();
|
||||||
|
$user = $factory->loadById($this->id);
|
||||||
|
|
||||||
|
$positions = $user->getPositions();
|
||||||
|
|
||||||
|
$clubFactory = new CommonClubsModelFactoryClub();
|
||||||
|
$clubsPresident = $clubFactory->loadElements("main.president = {$this->id}");
|
||||||
|
|
||||||
|
$jobs = array();
|
||||||
|
|
||||||
|
foreach($clubsPresident as $club)
|
||||||
|
{
|
||||||
|
$job = array(
|
||||||
|
'club' => $club->getName(),
|
||||||
|
'city' => $club->getCity(),
|
||||||
|
'position' => 'Vorsitzender',
|
||||||
|
'url' => Route::_("index.php?option=com_clubs&view=club&id={$club->getId()}")
|
||||||
|
);
|
||||||
|
$jobs[] = $job;
|
||||||
|
}
|
||||||
|
foreach($positions as $p)
|
||||||
|
{
|
||||||
|
$c = $p->getClub();
|
||||||
|
$job = array(
|
||||||
|
'club' => $c->getName(),
|
||||||
|
'city' => $c->getCity(),
|
||||||
|
'position' => $p->getPosition()->getName(),
|
||||||
|
'url' => Route::_("index.php?option=com_clubs&view=club&id={$c->getId()}")
|
||||||
|
);
|
||||||
|
$jobs[] = $job;
|
||||||
|
}
|
||||||
|
$this->jobs = $jobs;
|
||||||
|
}
|
||||||
|
|
||||||
|
ToolbarHelper::title('Club-Management - Person', 'user');
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getControllerName()
|
||||||
|
{
|
||||||
|
return 'user';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
34
src/admin/views/users/tmpl/default.php
Normal file
34
src/admin/views/users/tmpl/default.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table width='100%' class='table table-stiped, table-hover'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width='15%'>Benutzername</th>
|
||||||
|
<th width='20%'>Name</th>
|
||||||
|
<th width='30%'>Ort</th>
|
||||||
|
<th width='30%'>E-Mail</th>
|
||||||
|
<th width='5%'></th>
|
||||||
|
<th width='5%'>id</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<?php foreach($this->objects as $user): ?>
|
||||||
|
<?php $link = str_replace('__ID__', $user->getId(), $this->changeUrl); ?>
|
||||||
|
<tr>
|
||||||
|
<td><a href='<?php echo $link; ?>'><?php echo htmlentities($user->getUserName()); ?></a></td>
|
||||||
|
<td><a href='<?php echo $link; ?>'><?php echo htmlentities($user->getName()); ?></a></td>
|
||||||
|
<td><?php echo htmlentities($user->getCity()); ?></td>
|
||||||
|
<td><a href='mailto:<?php echo htmlentities($user->getMail()); ?>'><?php echo htmlentities($user->getMail()); ?></a></td>
|
||||||
|
<td><a href='<?php echo str_replace('__ID__', $user->getId(), $this->delUrl); ?>'><span class='icon-delete'></span>Löschen</a></td>
|
||||||
|
<td><?php echo htmlentities($user->getId()); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div><a href='<?php echo $this->addUrl; ?>'><span class='icon-new'></span>Neuen Benutzer anlegen</a></div>
|
||||||
|
|
27
src/admin/views/users/view.html.php
Normal file
27
src/admin/views/users/view.html.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Toolbar\ToolbarHelper;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsViewUsers extends AbstractClubsViewList
|
||||||
|
{
|
||||||
|
function display($tpl = null)
|
||||||
|
{
|
||||||
|
ToolbarHelper::title('Club-Management - Personen', 'user');
|
||||||
|
|
||||||
|
parent::display($tpl);
|
||||||
|
}
|
||||||
|
protected function getFactory()
|
||||||
|
{
|
||||||
|
return new CommonClubsModelFactoryUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSingleBaseName()
|
||||||
|
{
|
||||||
|
return 'user';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -5,8 +5,9 @@
|
|||||||
type="component">
|
type="component">
|
||||||
|
|
||||||
<!-- SOLLTE, Der Annzeige-Name in Joomla -->
|
<!-- SOLLTE, Der Annzeige-Name in Joomla -->
|
||||||
<name>Vereinsmanagement</name>
|
<name>Vereinsportal</name>
|
||||||
<title>Vereinsportal des saarländischen Tanzsportverbands</title>
|
<title>Vereinsportal des saarländischen Tanzsportverbands</title>
|
||||||
|
<element>com_clubs</element>
|
||||||
|
|
||||||
<!--SOLLTE Erstellungsdatum -->
|
<!--SOLLTE Erstellungsdatum -->
|
||||||
<creationDate>30.03.2019</creationDate>
|
<creationDate>30.03.2019</creationDate>
|
||||||
@ -25,11 +26,13 @@
|
|||||||
<!--<description>TPL_TEST_TEMPLATE_XML_DESCRIPTION</description>-->
|
<!--<description>TPL_TEST_TEMPLATE_XML_DESCRIPTION</description>-->
|
||||||
|
|
||||||
<!-- MUSS, der Files-Tag bezeichnet den Block mit den Dateien und Ordnern die mit installiert werden -->
|
<!-- MUSS, der Files-Tag bezeichnet den Block mit den Dateien und Ordnern die mit installiert werden -->
|
||||||
<files from='site'>
|
<files folder='site'>
|
||||||
<filename>clubs.php</filename>
|
<filename>clubs.php</filename>
|
||||||
<filename>controller.php</filename>
|
<filename>controller.php</filename>
|
||||||
<folder>controller</folder>
|
<folder>controllers</folder>
|
||||||
|
<folder>css</folder>
|
||||||
<folder>helpers</folder>
|
<folder>helpers</folder>
|
||||||
|
<folder>js</folder>
|
||||||
<folder>models</folder>
|
<folder>models</folder>
|
||||||
<folder>views</folder>
|
<folder>views</folder>
|
||||||
</files>
|
</files>
|
||||||
@ -46,27 +49,36 @@
|
|||||||
<menu>Vereinsmanagement</menu>
|
<menu>Vereinsmanagement</menu>
|
||||||
<submenu>
|
<submenu>
|
||||||
<!-- <menu link='link' view='v'>Test</menu> -->
|
<!-- <menu link='link' view='v'>Test</menu> -->
|
||||||
|
<menu link='option=com_clubs&view=positions'>Posten</menu>
|
||||||
|
<menu link='option=com_clubs&view=offers'>Trainingsangebote</menu>
|
||||||
|
<menu link='option=com_clubs&view=users'>Personen</menu>
|
||||||
|
<menu link='option=com_clubs&view=clubs'>Vereine</menu>
|
||||||
</submenu>
|
</submenu>
|
||||||
<files from='admin'>
|
<files folder='admin'>
|
||||||
|
<folder>abstract</folder>
|
||||||
|
<folder>common</folder>
|
||||||
|
<folder>controllers</folder>
|
||||||
|
<folder>res</folder>
|
||||||
|
<folder>sql</folder>
|
||||||
|
<folder>views</folder>
|
||||||
<filename>clubs.php</filename>
|
<filename>clubs.php</filename>
|
||||||
<filename>controller.php</filename>
|
<filename>controller.php</filename>
|
||||||
<folder>sql</folder>
|
|
||||||
</files>
|
</files>
|
||||||
</administration>
|
</administration>
|
||||||
|
|
||||||
<install>
|
<install>
|
||||||
<sql>
|
<sql>
|
||||||
<file driver='mysql'>sql/mysql/install.sql</file>
|
<file driver='mysql' charset='utf8'>sql/mysql/install.sql</file>
|
||||||
</sql>
|
</sql>
|
||||||
</install>
|
</install>
|
||||||
<uninstall>
|
<uninstall>
|
||||||
<sql>
|
<sql>
|
||||||
<file driver='mysql'>sql/mysql/uninstall.sql</file>
|
<file driver='mysql' charset='utf8'>sql/mysql/uninstall.sql</file>
|
||||||
</sql>
|
</sql>
|
||||||
</uninstall>
|
</uninstall>
|
||||||
<update>
|
<update>
|
||||||
<schemas>
|
<schemas>
|
||||||
<schemapath type='mysql'>sql/updates/mysql</schemapath>
|
<schemapath type='mysql'>sql/mysql/updates</schemapath>
|
||||||
</schemas>
|
</schemas>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
@ -6,6 +6,16 @@ use Joomla\CMS\Factory;
|
|||||||
// No direct access.
|
// No direct access.
|
||||||
defined('_JEXEC') or die;
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
JLoader::discover('Clubs', JPATH_ROOT . '/administrator/components/com_clubs/mymodels');
|
||||||
|
|
||||||
|
JLoader::register("ClubsHelperAuth", JPATH_ROOT . "/components/com_clubs/helpers/auth.php");
|
||||||
|
|
||||||
|
JLoader::registerPrefix('AbstractClubs', JPATH_ROOT . '/administrator/components/com_clubs/abstract');
|
||||||
|
|
||||||
|
JLoader::registerPrefix('AbstractCommonClubs', JPATH_ROOT . '/administrator/components/com_clubs/common/abstract');
|
||||||
|
JLoader::registerPrefix('CommonClubsModel', JPATH_ROOT . '/administrator/components/com_clubs/common/models');
|
||||||
|
JLoader::registerPrefix('CommonClubsControllerMapping', JPATH_ROOT . '/administrator/components/com_clubs/common/controllermappings');
|
||||||
|
|
||||||
$controller = BaseController::getInstance("Clubs");
|
$controller = BaseController::getInstance("Clubs");
|
||||||
$input = Factory::getApplication()->input;
|
$input = Factory::getApplication()->input;
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Joomla\CMS\MVC\Controller\BaseController;
|
use Joomla\CMS\MVC\Controller\BaseController;
|
||||||
|
use Joomla\CMS\Uri\Uri;
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
|
||||||
// No direct access.
|
// No direct access.
|
||||||
defined('_JEXEC') or die;
|
defined('_JEXEC') or die;
|
||||||
@ -10,11 +12,56 @@ class ClubsController extends BaseController
|
|||||||
|
|
||||||
public function display($cachable = false, $params = array())
|
public function display($cachable = false, $params = array())
|
||||||
{
|
{
|
||||||
|
$auth = new ClubsHelperAuth();
|
||||||
|
|
||||||
|
$app = Factory::getApplication();
|
||||||
|
$view = $app->input->getCmd('view');
|
||||||
|
|
||||||
|
// Most of the pages can only be viewd as a logged-in user
|
||||||
|
if($auth->isValidUserLoggedIn())
|
||||||
|
{
|
||||||
|
if($this->isUrlAllowed($view))
|
||||||
|
{
|
||||||
|
$this->doDisplay($cachable, $params);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// User is not allowed to see the site, give useful information
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if($view === 'login' || $view === 'publicclubs')
|
||||||
|
{
|
||||||
|
$this->doDisplay($cachable, $params);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// User needs to login in order to see the site
|
||||||
|
$this->redirectToLogin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->redirectToLogin();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function doDisplay($cachable, $params)
|
||||||
|
{
|
||||||
|
Factory::getDocument()->addStyleSheet(Uri::base(true) . "components/com_clubs/css/clubs.css");
|
||||||
parent::display($cachable, $params);
|
parent::display($cachable, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function foo()
|
private function redirectToLogin()
|
||||||
{
|
{
|
||||||
echo "dsfh";
|
// XXX Attach URL to forward later
|
||||||
|
$this->setRedirect('index.php?opion=com_clubs&view=login');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function isUrlAllowed($view)
|
||||||
|
{
|
||||||
|
// FIXME Insert ACLs checking here
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,6 @@ use Joomla\CMS\Factory;
|
|||||||
// No direct access.
|
// No direct access.
|
||||||
defined('_JEXEC') or die;
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
JLoader::register("ClubsHelperAuth", JPATH_ROOT . "/components/com_clubs/helpers/auth.php");
|
|
||||||
|
|
||||||
class ClubsControllerLogin extends BaseController
|
class ClubsControllerLogin extends BaseController
|
||||||
{
|
{
|
||||||
public function login()
|
public function login()
|
||||||
|
@ -9,6 +9,12 @@ defined('_JEXEC') or die;
|
|||||||
class ClubsHelperAuth
|
class ClubsHelperAuth
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public function isValidUserLoggedIn()
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public function checkUser($user, $pwd)
|
public function checkUser($user, $pwd)
|
||||||
{
|
{
|
||||||
$userModel = BaseDatabaseModel::getInstance("user", "ClubsModel");
|
$userModel = BaseDatabaseModel::getInstance("user", "ClubsModel");
|
||||||
|
34
src/site/route.php
Normal file
34
src/site/route.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Component\Router\RouterInterface;
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsRouter implements RouterInterface
|
||||||
|
{
|
||||||
|
public function build(&$query)
|
||||||
|
{
|
||||||
|
$ret = array();
|
||||||
|
// $ret[] = $query['Itemid'];
|
||||||
|
if(isset($query['view']))
|
||||||
|
{
|
||||||
|
$ret[] = $query['view'];
|
||||||
|
unset($query['view']);
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function parse(&$segments)
|
||||||
|
{
|
||||||
|
$ret = array();
|
||||||
|
//$ret['itemid'] = $segments[0];
|
||||||
|
$ret['view'] = $segments[0];
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
public function preprocess($query)
|
||||||
|
{
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,46 +1,61 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
// No direct access.
|
// No direct access.
|
||||||
defined('_JEXEC') or die;
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<h1><?php echo $this->clubname; ?></h1>
|
<h1><?php echo htmlentities($this->club->getName()); ?></h1>
|
||||||
|
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Adresse</div>
|
<div class='clubs_title_row'>Adresse</div>
|
||||||
<div class='clubs_content_row'><?php echo nl2br(htmlentities($this->address)); ?></div>
|
<div class='clubs_content_row'><?php echo nl2br(htmlentities($this->club->getAddress())); ?></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Internet</div>
|
<div class='clubs_title_row'>Stadt</div>
|
||||||
<div class='clubs_content_row'><?php echo htmlentities($this->internet); ?></div>
|
<div class='clubs_content_row'><?php echo htmlentities($this->club->getCity()); ?></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Kontaktperson</div>
|
<div class='clubs_title_row'>Homepage</div>
|
||||||
<div class='clubs_content_row'><?php echo htmlentities($this->contactperson); ?></div>
|
<div class='clubs_content_row'><a href='<?php echo htmlentities($this->club->getHomepage()); ?>' target='_blank'><?php echo htmlentities($this->club->getHomepage()); ?></a></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Mail-Adresse</div>
|
<div class='clubs_title_row'>Mail-Adresse</div>
|
||||||
<div class='clubs_content_row'><a href='mailto:<?php echo htmlentities($this->email); ?>'><?php echo htmlentities($this->email); ?></a></div>
|
<div class='clubs_content_row'><a href='mailto:<?php echo htmlentities($this->club->getMail()); ?>'><?php echo htmlentities($this->club->getMail()); ?></a></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Telefon</div>
|
<div class='clubs_title_row'>IBAN / BIC</div>
|
||||||
<div class='clubs_content_row'><?php echo htmlentities($this->phone); ?></div>
|
<div class='clubs_content_row'><?php echo htmlentities($this->club->getIban()); ?> / <?php echo htmlentities($this->club->getBic()); ?></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class='clubs_row'>
|
||||||
|
<div class='clubs_title_row'>Gemeinnützigkeit</div>
|
||||||
|
<div class='clubs_content_row'><span class='icon-<?php echo $this->club->isCharitable() ? 'ok' : 'cancel'; ?>'></span> Der Verein ist <?php echo $this->club->isCharitable() ? '' : '<b>nicht</b>'; ?> gemeinnützig.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--<div class='clubs_row'>
|
||||||
|
<div class='clubs_title_row'>Telefon</div>
|
||||||
|
<div class='clubs_content_row'><?php echo htmlentities('$this->phone'); ?></div>
|
||||||
|
</div>-->
|
||||||
|
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Angebote</div>
|
<div class='clubs_title_row'>Angebote</div>
|
||||||
<div class='clubs_content_row'>
|
<div class='clubs_content_row'>
|
||||||
<?php if($this->hasOptions):
|
<?php if($this->hasOffers):
|
||||||
|
|
||||||
// Put all options there
|
// Put all options there
|
||||||
foreach($this->options as $k=>$v):
|
foreach($this->club->getOffers() as $o):
|
||||||
?>
|
?>
|
||||||
<input type="checkbox" disabled="disabled" <?php if(isset($v)) echo 'checked="checked"'; ?>> <?php echo htmlentities($k); ?><br />
|
<span class='icon-<?php echo $o['valid'] ? 'ok' : 'cancel-2'; ?>'></span>
|
||||||
|
<?php if($o['valid']) echo '<b>'; ?>
|
||||||
|
<?php echo htmlentities($o['offer']->getName()); ?><br />
|
||||||
|
<?php if($o['valid']) echo '</b>'; ?>
|
||||||
<?php
|
<?php
|
||||||
endforeach;
|
endforeach;
|
||||||
|
|
||||||
@ -52,47 +67,54 @@ endif; ?>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php if(count($this->trainingPlaces) > 0): ?>
|
<?php if(count($this->club->getPlaces()) > 0): ?>
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Räumlichkeiten</div>
|
<div class='clubs_title_row'>Räumlichkeiten</div>
|
||||||
<?php foreach($this->trainingPlaces as $p): ?>
|
<?php foreach($this->club->getPlaces() as $p): ?>
|
||||||
<div class='clubs_content_row'>
|
<div class='clubs_content_row'>
|
||||||
<?php echo htmlentities($p['name']); ?><br />
|
<b><?php echo htmlentities($p->getName()); ?></b><br />
|
||||||
<?php echo htmlentities($p['street']); ?><br />
|
<i>Adresse</i>
|
||||||
<?php echo htmlentities($p['plz'] . " " . $p['city']); ?>
|
<?php //echo nl2br(htmlentities($p->getAddress())); ?>
|
||||||
</div>
|
<?php echo $p->getArea() === null ? '' : '<br />Fläche: ' . htmlentities($p->getArea()) . 'qm'; ?>
|
||||||
|
</div>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
<div class='clubs_content_row'><a href='<?php echo ""; ?>'><span class='icon-new'></span> Neue Assoziation anlegen</a></div>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if(count($this->persons) > 0) : ?>
|
<div class='clubs_row'>
|
||||||
|
<div class='clubs_title_row'>Präsident</div>
|
||||||
|
<div class='clubs_content_row'>
|
||||||
|
<a href='<?php echo Route::_("index.php?view=user&userid={$this->club->getPresident()->getId()}"); ?>'>
|
||||||
|
<?php echo htmlentities("{$this->club->getPresident()->getName()} ({$this->club->getPresident()->getCity()})"); ?>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php if(count($this->club->getUsers()) > 0) : ?>
|
||||||
<div class='clubs_row'>
|
<div class='clubs_row'>
|
||||||
<div class='clubs_title_row'>Assoziierte Personen</div>
|
<div class='clubs_title_row'>Assoziierte Personen</div>
|
||||||
<div class='clubs_content_row'>
|
<div class='clubs_content_row'>
|
||||||
<ul>
|
<ul>
|
||||||
<?php foreach($this->persons as $p): ?>
|
<?php foreach($this->club->getUsers() as $uassoc): ?>
|
||||||
<li>
|
<li>
|
||||||
<a href='?option=com_clubs&view=user&id=<?php echo $p['id']; ?>'><?php echo htmlentities($p['name']); ?></a>:
|
<a href='?option=com_clubs&view=user&id=<?php echo $uassoc->getUser()->getId(); ?>'>
|
||||||
<?php echo htmlentities($p['position']); ?>
|
<?php echo htmlentities($uassoc->getUser()->getName()); ?>
|
||||||
<?php if ($p['modify']) echo ' (Club-Admin)'; ?>
|
</a>:
|
||||||
<?php if($this->canModify): ?>
|
<?php echo htmlentities($uassoc->getPosition()->getName()); ?>
|
||||||
<a href='?option=com_clubs&view=clubassoc&assoc=<?php echo $p['assoc']; ?>'>Ändern</a>
|
<?php if ($uassoc->isAdmin()) echo ' (Club-Admin)'; ?>
|
||||||
<a href='?option=com_clubs&task=club.delassoc&assoc=<?php echo $p['assoc']; ?>'>Löschen</a>
|
<!--<?php //if($this->canModify): ?>
|
||||||
<?php endif; ?>
|
<a href='?option=com_clubs&view=clubassoc&assoc=<?php //echo $p['assoc']; ?>'>Ändern</a>
|
||||||
|
<a href='?option=com_clubs&task=club.delassoc&assoc=<?php //echo $p['assoc']; ?>'>Löschen</a>-->
|
||||||
|
<?php //endif; ?>
|
||||||
</li>
|
</li>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</ul>
|
</ul>
|
||||||
<?php if($this->canModify): ?>
|
<?php //if($this->canModify): ?>
|
||||||
<a href='<?php echo $this->urlNewPerson; ?>'>Neue Assoziation anlegen</a>
|
<a href='<?php echo ""; ?>'><span class='icon-new'></span> Neue Assoziation anlegen</a>
|
||||||
<?php endif; ?>
|
<?php //endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if($this->canModify): ?>
|
|
||||||
<div class='clubs_row'>
|
|
||||||
<a href="?option=com_clubs&view=clubdata&clubid=<?php echo $this->clubid; ?>">Stammdaten anpassen</a><br />
|
|
||||||
<a href="?option=com_clubs&view=clubplaces&clubid=<?php echo $this->clubid; ?>">Räumlichkeiten anpassen</a><br />
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Joomla\CMS\MVC\View\HtmlView;
|
|
||||||
use Joomla\CMS\Factory;
|
use Joomla\CMS\Factory;
|
||||||
use Joomla\CMS\Uri\Uri;
|
use Joomla\CMS\MVC\View\HtmlView;
|
||||||
|
|
||||||
// No direct access.
|
// No direct access.
|
||||||
defined('_JEXEC') or die;
|
defined('_JEXEC') or die;
|
||||||
@ -10,49 +9,21 @@ defined('_JEXEC') or die;
|
|||||||
class ClubsViewClub extends HtmlView
|
class ClubsViewClub extends HtmlView
|
||||||
{
|
{
|
||||||
|
|
||||||
public function display(string $tpl = null)
|
public function display($tpl = null)
|
||||||
{
|
{
|
||||||
// FIXME Insert code from DB
|
$input = Factory::getApplication()->input;
|
||||||
$this->clubid = 43;
|
$id = $input->getInt('clubid', -1);
|
||||||
$this->clubname = "Testclub";
|
|
||||||
$this->address = "Strasse 1\n66123 Ort";
|
|
||||||
$this->contactperson = "Max Mustermann";
|
|
||||||
$this->email = "me@club.de";
|
|
||||||
$this->phone = "012345";
|
|
||||||
$this->internet = "http://wichtig.de";
|
|
||||||
|
|
||||||
$this->options = array("Step" => NULL, "JMD" => 1, "Divers." => NULL);
|
$clubFactory = new CommonClubsModelFactoryClub();
|
||||||
$this->hasOptions = false;
|
$this->club = $clubFactory->loadById($id);
|
||||||
foreach($this->options as $o)
|
|
||||||
if(isset($o))
|
$this->hasOffers = false;
|
||||||
|
foreach($this->club->getOffers() as $o)
|
||||||
|
if($o['valid'])
|
||||||
{
|
{
|
||||||
$this->hasOptions = true;
|
$this->hasOffers = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->trainingPlaces = array();
|
|
||||||
// $this->trainingPlaces[] = array('name'=>'Schule', 'street'=>'Straße', 'city'=>'SB', 'plz'=>'12345');
|
|
||||||
// $this->trainingPlaces[] = array('name'=>'Schule', 'street'=>'Straße', 'city'=>'SB', 'plz'=>'12345');
|
|
||||||
|
|
||||||
$this->persons = array();
|
|
||||||
$this->persons[] = array('name'=>'Max', 'position'=>'Präsident', 'id'=>3, 'assoc'=>6, 'modify'=>true);
|
|
||||||
$this->persons[] = array('name'=>'Max', 'position'=>'Präsident', 'id'=>3, 'assoc'=>7, 'modify'=>false);
|
|
||||||
|
|
||||||
$this->canModify = true;
|
|
||||||
|
|
||||||
// ?option=com_clubs&view=searchperson&data=<?php echo urlencode('{"clubid":' . $this->clubid . "}");
|
|
||||||
$dataValue = array();
|
|
||||||
$dataValue['clubid'] = $this->clubid;
|
|
||||||
|
|
||||||
$dataAbort = array(
|
|
||||||
'urlAbort' => (Uri::getInstance()->toString()),
|
|
||||||
'urlSelect' => '?option=com_clubs&view=clubassoc&person=%u',
|
|
||||||
'data' => json_encode($dataValue)
|
|
||||||
);
|
|
||||||
$this->urlNewPerson = htmlentities("?option=com_clubs&view=searchperson&" . http_build_query($dataAbort));
|
|
||||||
|
|
||||||
Factory::getDocument()->addStyleSheet(Uri::base(true) . "components/com_clubs/css/clubs.css");
|
|
||||||
|
|
||||||
parent::display($tpl);
|
parent::display($tpl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,12 @@ defined('_JEXEC') or die;
|
|||||||
class ClubsViewClubAssoc extends HtmlView
|
class ClubsViewClubAssoc extends HtmlView
|
||||||
{
|
{
|
||||||
|
|
||||||
public function display(string $tpl = null)
|
public function display($tpl = null)
|
||||||
{
|
{
|
||||||
// FIXME Insert code from DB
|
// FIXME Insert code from DB
|
||||||
$inp = Factory::getApplication()->input;
|
$inp = Factory::getApplication()->input;
|
||||||
|
|
||||||
|
$this->personId = 34;
|
||||||
$this->userName = 'Max Muster';
|
$this->userName = 'Max Muster';
|
||||||
$this->userMail = 'Foo@bar.com';
|
$this->userMail = 'Foo@bar.com';
|
||||||
$this->userPhone = '34';
|
$this->userPhone = '34';
|
||||||
|
@ -10,7 +10,7 @@ defined('_JEXEC') or die;
|
|||||||
class ClubsViewClubData extends HtmlView
|
class ClubsViewClubData extends HtmlView
|
||||||
{
|
{
|
||||||
|
|
||||||
public function display(string $tpl = null)
|
public function display($tpl = null)
|
||||||
{
|
{
|
||||||
// FIXME Insert code from DB
|
// FIXME Insert code from DB
|
||||||
$this->clubid = 43;
|
$this->clubid = 43;
|
||||||
|
@ -10,7 +10,7 @@ defined('_JEXEC') or die;
|
|||||||
class ClubsViewClubPlace extends HtmlView
|
class ClubsViewClubPlace extends HtmlView
|
||||||
{
|
{
|
||||||
|
|
||||||
public function display(string $tpl = null)
|
public function display($tpl = null)
|
||||||
{
|
{
|
||||||
// FIXME Insert code from DB
|
// FIXME Insert code from DB
|
||||||
$this->clubid = 43;
|
$this->clubid = 43;
|
||||||
|
@ -10,7 +10,7 @@ defined('_JEXEC') or die;
|
|||||||
class ClubsViewClubPlaces extends HtmlView
|
class ClubsViewClubPlaces extends HtmlView
|
||||||
{
|
{
|
||||||
|
|
||||||
public function display(string $tpl = null)
|
public function display($tpl = null)
|
||||||
{
|
{
|
||||||
// FIXME Insert code from DB
|
// FIXME Insert code from DB
|
||||||
$this->clubid = 43;
|
$this->clubid = 43;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user