diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 184f040..c932b55 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -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 + * + * @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 + * + * @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; + } } diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index d41dfd8..da0c317 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -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', ]]; diff --git a/Theme/Backend/profile-single.tpl.php b/Theme/Backend/profile-single.tpl.php index a170862..ed9c8f9 100755 --- a/Theme/Backend/profile-single.tpl.php +++ b/Theme/Backend/profile-single.tpl.php @@ -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(); No address specified - - - - Private - SMALLSYS INC
795 E DRAGRAM
TUCSON AZ 85705
USA - + + + getHtml('aType' . $location->getType()); ?> + + + + printHtml($location->getAddress()); ?> + + + printHtml($location->getPostal() . ', ' . $location->getCity()); ?> + + + printHtml(ISO3166NameEnum::getByName(ISO3166TwoEnum::getName($location->getCountry()))); ?> + getHtml('Contact'); ?> @@ -121,12 +116,11 @@ echo $this->getData('nav')->render(); No contact specified - - - - Private - +01 12345-4567 - + + + getHtml('cType' . $contact->getType()); ?> + getContent(); ?> + getHtml('Registered'); ?> printHtml($account->getCreatedAt()->format('Y-m-d')); ?> @@ -155,7 +149,22 @@ echo $this->getData('nav')->render(); - request->getHeader()->getAccount() === $account->getId()) : ?> + 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(); + ?> request->getUri()->getFragment() === 'c-tab-2' ? ' checked' : ''; ?>>