impl. profile contact elements and addresses

This commit is contained in:
Dennis Eichhorn 2020-10-25 23:09:26 +01:00
parent 3b7a7d7c3f
commit 526236d8c7
3 changed files with 214 additions and 30 deletions

View File

@ -15,12 +15,18 @@ declare(strict_types=1);
namespace Modules\Profile\Controller;
use Modules\Admin\Models\AccountMapper;
use Modules\Media\Models\PathSettings;
use Modules\Profile\Models\ContactElementMapper;
use Modules\Profile\Models\Profile;
use Modules\Profile\Models\ProfileMapper;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use Modules\Profile\Models\ContactElement;
use phpOMS\Model\Message\FormValidation;
use Modules\Admin\Models\Address;
use Modules\Admin\Models\AddressMapper;
/**
* Profile class.
@ -154,8 +160,11 @@ final class ApiController extends Controller
$request->getData('name') ?? '',
$uploadedFiles,
$request->getHeader()->getAccount(),
'Modules/Media/Files',
'/Accounts/' . $request->getHeader()->getAccount()
'Modules/Media/Files/Accounts/' . $profile->getAccount()->getId() . ' ' . $profile->getAccount()->getName(),
'/Accounts/' . $profile->getAccount()->getId() . ' ' . $profile->getAccount()->getName(),
'',
'',
PathSettings::FILE_PATH
);
$profile->setImage(\reset($uploaded));
@ -163,4 +172,159 @@ final class ApiController extends Controller
$this->updateModel($request->getHeader()->getAccount(), $old, $profile, ProfileMapper::class, 'profile', $request->getOrigin());
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Profile', 'Profile successfully updated', $profile);
}
/**
* Routing end-point for application behaviour.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiContactElementCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
if (!empty($val = $this->validateContactElementCreate($request))) {
$response->set('contact_element_create', new FormValidation($val));
$response->getHeader()->setStatusCode(RequestStatusCode::R_400);
return;
}
/** @var Profile $profile */
$profile = (int) ($request->getData('profile') ?? ProfileMapper::getFor($request->getData('account'), 'account')->getId());
$contactElement = $this->createContactElementFromRequest($request);
$this->createModel($request->getHeader()->getAccount(), $contactElement, ContactElementMapper::class, 'profile-contactElement', $request->getOrigin());
$this->createModelRelation($request->getHeader()->getAccount(), $profile, $contactElement->getId(), ProfileMapper::class, 'contactElements', '', $request->getOrigin());
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Contact Element', 'Contact element successfully created', $contactElement);
}
/**
* Validate contact element create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateContactElementCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['account'] = (empty($request->getData('account')) && empty($request->getData('profile'))))
|| ($val['type'] = !\is_numeric($request->getData('type')))
|| ($val['content'] = empty($request->getData('content')))
) {
return $val;
}
return [];
}
/**
* Method to create a contact element from request.
*
* @param RequestAbstract $request Request
*
* @return ContactElement
*
* @since 1.0.0
*/
public function createContactElementFromRequest(RequestAbstract $request) : ContactElement
{
/** @var ContactElement $element */
$element = new ContactElement();
$element->setType((int) ($request->getData('type') ?? 0));
$element->setSubtype((int) ($request->getData('subtype') ?? 0));
$element->setContent((string) ($request->getData('content') ?? ''));
return $element;
}
/**
* Routing end-point for application behaviour.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiAddressCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
if (!empty($val = $this->validateAddressCreate($request))) {
$response->set('address_create', new FormValidation($val));
$response->getHeader()->setStatusCode(RequestStatusCode::R_400);
return;
}
/** @var Profile $profile */
$profile = (int) ($request->getData('profile') ?? ProfileMapper::getFor($request->getData('account'), 'account')->getId());
$address = $this->createAddressFromRequest($request);
$this->createModel($request->getHeader()->getAccount(), $address, AddressMapper::class, 'profile-address', $request->getOrigin());
$this->createModelRelation($request->getHeader()->getAccount(), $profile, $address->getId(), ProfileMapper::class, 'location', '', $request->getOrigin());
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Address', 'Address successfully created', $address);
}
/**
* Validate contact element create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateAddressCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['account'] = (empty($request->getData('account')) && empty($request->getData('profile'))))
|| ($val['type'] = !\is_numeric($request->getData('type')))
|| ($val['country'] = empty($request->getData('country')))
|| ($val['city'] = empty($request->getData('city')))
|| ($val['address'] = empty($request->getData('address')))
) {
return $val;
}
return [];
}
/**
* Method to create a contact element from request.
*
* @param RequestAbstract $request Request
*
* @return Address
*
* @since 1.0.0
*/
public function createAddressFromRequest(RequestAbstract $request) : Address
{
/** @var Address $element */
$element = new Address();
$element->setName((string) ($request->getData('name') ?? ''));
$element->setAddition((string) ($request->getData('addition') ?? ''));
$element->setPostal((string) ($request->getData('postal') ?? ''));
$element->setCity((string) ($request->getData('city') ?? ''));
$element->setAddress((string) ($request->getData('address') ?? ''));
$element->setCountry((string) ($request->getData('country') ?? ''));
$element->setState((string) ($request->getData('state') ?? ''));
$element->setType((int) ($request->getData('type') ?? 0));
return $element;
}
}

View File

@ -87,4 +87,15 @@ return ['Profile' => [
'Volume' => 'Volume',
'Weight' => 'Weight',
'Zip' => 'Zip',
'cType1' => 'Phone',
'cType2' => 'Fax',
'cType3' => 'Website',
'cType4' => 'Email',
'aType1' => 'Home',
'aType2' => 'Business',
'aType3' => 'Shipping',
'aType4' => 'Billing',
'aType5' => 'Work',
'aType6' => 'Contract',
'aType7' => 'Other',
]];

View File

@ -13,6 +13,8 @@
declare(strict_types=1);
use Modules\Media\Models\NullMedia;
use phpOMS\Localization\ISO3166NameEnum;
use phpOMS\Localization\ISO3166TwoEnum;
use phpOMS\Uri\UriFactory;
/** @var \phpOMS\Views\View $this */
@ -20,21 +22,6 @@ use phpOMS\Uri\UriFactory;
$profile = $this->getData('account');
$media = $this->getDatA('media') ?? [];
$countryCodes = \phpOMS\Localization\ISO3166TwoEnum::getConstants();
$countries = \phpOMS\Localization\ISO3166NameEnum::getConstants();
$timezones = \phpOMS\Localization\TimeZoneEnumArray::getConstants();
$timeformats = \phpOMS\Localization\ISO8601EnumArray::getConstants();
$languages = \phpOMS\Localization\ISO639Enum::getConstants();
$currencies = \phpOMS\Localization\ISO4217Enum::getConstants();
$l11nDefinitions = \phpOMS\System\File\Local\Directory::list(__DIR__ . '/../../../../phpOMS/Localization/Defaults/Definitions');
$weights = \phpOMS\Utils\Converter\WeightType::getConstants();
$speeds = \phpOMS\Utils\Converter\SpeedType::getConstants();
$areas = \phpOMS\Utils\Converter\AreaType::getConstants();
$lengths = \phpOMS\Utils\Converter\LengthType::getConstants();
$volumes = \phpOMS\Utils\Converter\VolumeType::getConstants();
$temperatures = \phpOMS\Utils\Converter\TemperatureType::getConstants();
$account = $profile->getAccount();
$l11n = $account->getL11n();
@ -105,12 +92,20 @@ echo $this->getData('nav')->render();
<tr>
<th>
<td>No address specified
<?php endif; ?>
<?php foreach ($locations as $location) : ?>
<tr>
<th class="vT">Private
<td itemprop="address">SMALLSYS INC<br>795 E DRAGRAM<br>TUCSON AZ 85705<br>USA
<?php endforeach; ?>
<?php else: foreach($locations as $location) : ?>
<tr>
<th><?= $this->getHtml('aType' . $location->getType()); ?>
<td>
<tr>
<th>
<td><?= $this->printHtml($location->getAddress()); ?>
<tr>
<th>
<td><?= $this->printHtml($location->getPostal() . ', ' . $location->getCity()); ?>
<tr>
<th>
<td><?= $this->printHtml(ISO3166NameEnum::getByName(ISO3166TwoEnum::getName($location->getCountry()))); ?>
<?php endforeach; endif; ?>
<tr>
<th><?= $this->getHtml('Contact'); ?>
<td>
@ -121,12 +116,11 @@ echo $this->getData('nav')->render();
<tr>
<th>
<td>No contact specified
<?php endif; ?>
<?php foreach ($contacts as $location) : ?>
<tr>
<th>Private
<td itemprop="telephone">+01 12345-4567
<?php endforeach; ?>
<?php else: foreach($contacts as $contact) : ?>
<tr>
<th><?= $this->getHtml('cType' . $contact->getType()); ?>
<td><?= $contact->getContent(); ?>
<?php endforeach; endif; ?>
<tr>
<th><?= $this->getHtml('Registered'); ?>
<td><?= $this->printHtml($account->getCreatedAt()->format('Y-m-d')); ?>
@ -155,7 +149,22 @@ echo $this->getData('nav')->render();
</div>
</div>
</div>
<?php if ($this->request->getHeader()->getAccount() === $account->getId()) : ?>
<?php if ($this->request->getHeader()->getAccount() === $account->getId()) :
$countryCodes = \phpOMS\Localization\ISO3166TwoEnum::getConstants();
$countries = \phpOMS\Localization\ISO3166NameEnum::getConstants();
$timezones = \phpOMS\Localization\TimeZoneEnumArray::getConstants();
$timeformats = \phpOMS\Localization\ISO8601EnumArray::getConstants();
$languages = \phpOMS\Localization\ISO639Enum::getConstants();
$currencies = \phpOMS\Localization\ISO4217Enum::getConstants();
$l11nDefinitions = \phpOMS\System\File\Local\Directory::list(__DIR__ . '/../../../../phpOMS/Localization/Defaults/Definitions');
$weights = \phpOMS\Utils\Converter\WeightType::getConstants();
$speeds = \phpOMS\Utils\Converter\SpeedType::getConstants();
$areas = \phpOMS\Utils\Converter\AreaType::getConstants();
$lengths = \phpOMS\Utils\Converter\LengthType::getConstants();
$volumes = \phpOMS\Utils\Converter\VolumeType::getConstants();
$temperatures = \phpOMS\Utils\Converter\TemperatureType::getConstants();
?>
<input type="radio" id="c-tab-2" name="tabular-2"<?= $this->request->getUri()->getFragment() === 'c-tab-2' ? ' checked' : ''; ?>>
<div class="tab">
<div class="row">