clientRepo = $clientRepo; } public function markAddressAsCurrent() { $client = \Shared\Helpers\Helpers::get_session('client'); if (!$client) { return false; } $this->clientRepo->markAddressAsCurrent( (int)$client['id'], (int)\Shared\Helpers\Helpers::get('address_id') ); exit; } public function addressDelete() { $client = \Shared\Helpers\Helpers::get_session('client'); if (!$client) { header('Location: /logowanie'); exit; } $address = $this->clientRepo->addressDetails((int)\Shared\Helpers\Helpers::get('id')); if (!$address || $address['client_id'] != $client['id']) { header('Location: /panel-klienta/adresy'); exit; } if ($this->clientRepo->addressDelete((int)\Shared\Helpers\Helpers::get('id'))) { \Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('adres-usuniety-komunikat')); } else { \Shared\Helpers\Helpers::error(\Shared\Helpers\Helpers::lang('adres-usuniety-blad')); } header('Location: /panel-klienta/adresy'); exit; } public function addressEdit() { global $page, $settings; $page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-edycja-adresu') . ' | ' . $settings['firm_name']; $client = \Shared\Helpers\Helpers::get_session('client'); if (!$client) { header('Location: /logowanie'); exit; } $addressId = (int)\Shared\Helpers\Helpers::get('id'); $address = $this->clientRepo->addressDetails($addressId); if ($address && $address['client_id'] != $client['id']) { $address = null; } return \front\Views\ShopClient::addressEdit([ 'address' => $address, ]); } public function addressSave() { $client = \Shared\Helpers\Helpers::get_session('client'); if (!$client) { header('Location: /logowanie'); exit; } $addressId = (int)\Shared\Helpers\Helpers::get('address_id'); $data = [ 'name' => \Shared\Helpers\Helpers::get('name', true), 'surname' => \Shared\Helpers\Helpers::get('surname', true), 'street' => \Shared\Helpers\Helpers::get('street'), 'postal_code' => \Shared\Helpers\Helpers::get('postal_code', true), 'city' => \Shared\Helpers\Helpers::get('city', true), 'phone' => \Shared\Helpers\Helpers::get('phone', true), ]; if ($this->clientRepo->addressSave((int)$client['id'], $addressId ?: null, $data)) { $msg = $addressId ? \Shared\Helpers\Helpers::lang('zmiana-adresu-sukces') : \Shared\Helpers\Helpers::lang('dodawanie-nowego-adresu-sukces'); \Shared\Helpers\Helpers::alert($msg); } else { $msg = $addressId ? \Shared\Helpers\Helpers::lang('zmiana-adresu-blad') : \Shared\Helpers\Helpers::lang('dodawanie-nowego-adresu-blad'); \Shared\Helpers\Helpers::error($msg); } header('Location: /panel-klienta/adresy'); exit; } public function clientAddresses() { global $page, $settings; $page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-lista-adresow') . ' | ' . $settings['firm_name']; $client = \Shared\Helpers\Helpers::get_session('client'); if (!$client) { header('Location: /logowanie'); exit; } return \front\Views\ShopClient::clientAddresses([ 'client' => $client, 'addresses' => $this->clientRepo->clientAddresses((int)$client['id']), ]); } public function clientOrders() { global $page, $settings; $page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-historia-zamowien') . ' | ' . $settings['firm_name']; $client = \Shared\Helpers\Helpers::get_session('client'); if (!$client) { header('Location: /logowanie'); exit; } return \front\Views\ShopClient::clientOrders([ 'client' => $client, 'orders' => $this->clientRepo->clientOrders((int)$client['id']), 'statuses' => \shop\Order::order_statuses(), ]); } public function newPassword() { $result = $this->clientRepo->generateNewPassword( (string)\Shared\Helpers\Helpers::get('hash') ); if ($result) { $text = $this->buildEmailBody('#nowe-haslo', [ '[HASLO]' => $result['password'], ]); \Shared\Helpers\Helpers::send_email( $result['email'], \Shared\Helpers\Helpers::lang('nowe-haslo-w-sklepie'), $text ); \Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('nowe-haslo-zostalo-wyslane-na-twoj-adres-email')); } header('Location: /logowanie'); exit; } public function sendEmailPasswordRecovery() { $hash = $this->clientRepo->initiatePasswordRecovery( (string)\Shared\Helpers\Helpers::get('email') ); if ($hash) { $text = $this->buildEmailBody('#odzyskiwanie-hasla-link', [ '[LINK]' => '/shopClient/new_password/hash=' . $hash, ]); \Shared\Helpers\Helpers::send_email( (string)\Shared\Helpers\Helpers::get('email'), \Shared\Helpers\Helpers::lang('generowanie-nowego-hasla-w-sklepie'), $text ); \Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('odzyskiwanie-hasla-link-komunikat')); } else { \Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('odzyskiwanie-hasla-blad')); } header('Location: /logowanie'); exit; } public function recoverPassword() { global $page, $settings; $page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-odzyskiwanie-hasla') . ' | ' . $settings['firm_name']; return \front\Views\ShopClient::recoverPassword(); } public function logout() { \Shared\Helpers\Helpers::delete_session('client'); header('Location: /'); exit; } public function login() { $result = $this->clientRepo->authenticate( (string)\Shared\Helpers\Helpers::get('email'), (string)\Shared\Helpers\Helpers::get('password') ); if ($result['status'] === 'inactive') { $link = '' . ucfirst(\Shared\Helpers\Helpers::lang('wyslij-link-ponownie')) . ''; \Shared\Helpers\Helpers::alert( str_replace('[LINK]', $link, \Shared\Helpers\Helpers::lang('logowanie-blad-nieaktywne-konto')) ); header('Location: /logowanie'); exit; } if ($result['status'] !== 'ok') { \Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang($result['code'])); header('Location: /logowanie'); exit; } \Shared\Helpers\Helpers::set_session('client', $result['client']); \Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('logowanie-udane')); $redirect = \Shared\Helpers\Helpers::get('redirect'); header('Location: ' . ($redirect ? $redirect : '/panel-klienta')); exit; } public function confirm() { $email = $this->clientRepo->confirmRegistration( (string)\Shared\Helpers\Helpers::get('hash') ); if ($email) { $text = $this->buildEmailBody('#potwierdzenie-aktywacji-konta'); \Shared\Helpers\Helpers::send_email( $email, \Shared\Helpers\Helpers::lang('potwierdzenie-aktywacji-konta-w-sklepie') . ' ' . \Shared\Helpers\Helpers::lang('#nazwa-serwisu'), $text ); \Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('rejestracja-potwierdzenie')); } header('Location: /logowanie'); exit; } public function signup() { $email = (string)\Shared\Helpers\Helpers::get('email'); $password = (string)\Shared\Helpers\Helpers::get('password'); $created = $this->clientRepo->createClient( $email, $password, (bool)\Shared\Helpers\Helpers::get('agremment_marketing') ); if (!$created) { echo json_encode([ 'status' => 'bad', 'msg' => \Shared\Helpers\Helpers::lang('rejestracja-email-zajety'), ]); exit; } $text = $this->buildEmailBody('#potwierdzenie-rejestracji', [ '[LINK]' => '/shopClient/confirm/hash=' . $created['hash'], ]); \Shared\Helpers\Helpers::send_email( $email, \Shared\Helpers\Helpers::lang('potwierdzenie-rejestracji-konta-w-sklepie') . ' ' . \Shared\Helpers\Helpers::lang('#nazwa-serwisu'), $text ); echo json_encode([ 'status' => 'ok', 'msg' => \Shared\Helpers\Helpers::lang('rejestracja-udana'), ]); exit; } public function loginForm() { global $page, $settings; $page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-logowanie') . ' | ' . $settings['firm_name']; $page['class'] = 'page-login-form'; $client = \Shared\Helpers\Helpers::get_session('client'); if ($client) { header('Location: /panel-klienta/zamowienia'); exit; } return \front\Views\ShopClient::loginForm(); } public function registerForm() { global $page, $settings; $page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-rejestracja') . ' | ' . $settings['firm_name']; $client = \Shared\Helpers\Helpers::get_session('client'); if ($client) { header('Location: /panel-klienta/zamowienia'); exit; } return \front\Views\ShopClient::registerForm(); } /** * Builds email body from newsletter template with URL absolutization. * * @param array $replacements Placeholders to replace in the template */ private function buildEmailBody(string $templateName, array $replacements = []): string { $settings = $GLOBALS['settings']; $text = $settings['newsletter_header']; $text .= (new \Domain\Newsletter\NewsletterRepository($GLOBALS['mdb']))->templateByName($templateName); $text .= $settings['newsletter_footer']; $base = !empty($settings['ssl']) ? 'https' : 'http'; $serverName = $_SERVER['SERVER_NAME'] ?? ''; $regex = "-(]+src\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i"; $text = preg_replace($regex, '$1' . $base . '://' . $serverName . '$2$4', $text); $regex = "-(]+href\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i"; $text = preg_replace($regex, '$1' . $base . '://' . $serverName . '$2$4', $text); foreach ($replacements as $placeholder => $value) { $text = str_replace($placeholder, $value, $text); } return $text; } }