* @see https://codeigniter.com/userguide3/general/urls.html */ public function index(){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $data['pageTitle'] = ''; $this->load->view('pages/home', $data); } public function barber($lang){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $data['pageTitle'] = ''; $data['selectedLang'] = $lang; $data['services'] = $this->Service_model->getAllServiceByServiceType('barber', $lang); $this->load->view('pages/barber', $data); } public function beauty($lang){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $data['pageTitle'] = ''; $data['selectedLang'] = $lang; $data['services'] = $this->Service_model->getAllServiceByServiceType('beauty', $lang); $this->load->view('pages/beauty', $data); } public function booking($lang, $subpage){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $data['pageTitle'] = ''; $data['selectedLang'] = $lang; $data['subpage'] = $subpage; $data['services'] = $this->Service_model->getAllServiceByServiceType($subpage, $lang); $data['workers'] = $this->Service_model->getActiveWorkers($subpage); switch($subpage){ case 'barber': $this->load->view('pages/barber-booking', $data); break; case 'beauty': $this->load->view('pages/beauty-booking', $data); break; default: header('Location:'.SITEURL); } } public function booking_finished($lang, $subpage){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $data['pageTitle'] = ''; $data['selectedLang'] = $lang; switch($subpage){ case 'barber': $this->load->view('pages/barber-booking-finished', $data); break; case 'beauty': $this->load->view('pages/beauty-booking-finished', $data); break; default: header('Location:'.SITEURL); } } public function email_verification(){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $this->load->model('Log_model'); $data['pageTitle'] = ''; $this->load->view('pages/email-verification', $data); } public function ajax(){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $this->load->model('Log_model'); $data['pageTitle'] = ''; if(isset($_POST['action']) && $_POST['action'] == 'getAvailableWorkersByServiceCategory' && isset($_POST['serv_cat_slug'])){ $workers = $this->Service_model->getWorkersByCategorySlug($_POST['serv_cat_slug']); $returnedWorkers = ''; $workerIndex = 0; $workerListShow = ''; if(is_array($workers)){ foreach($workers as $workerItem){ $workerListShow .= ''; /* ?> $workers, 'workerListShow' => $workerListShow ); echo json_encode($responseArray); } if(isset($_POST['action']) && $_POST['action'] == 'calculate_service_length' && isset($_POST['service_ids'])){ if($_POST['service_ids'] != ''){ $explodedServiceIds = explode(',', $_POST['service_ids']); $totalLength = '00:00:00'; if(!empty($explodedServiceIds)){ foreach($explodedServiceIds as $explodedServiceIdItem){ $currentService = $this->Service_model->getServiceById($explodedServiceIdItem); $time = $totalLength; $time2 = $currentService->service_time; $secs = strtotime($time2)-strtotime("00:00:00"); $addedTotal = date("H:i:s",strtotime($time)+$secs); $totalLength = $addedTotal; } } echo $totalLength; } } if(isset($_POST['action']) && $_POST['action'] == 'getAvailableTimeOptions' && isset($_POST['selectedDate'])){ $results = $this->Service_model->getAvailableTimes($_POST['worker_id'], $_POST['selectedDate'], $_POST['servicelength']); $rowIndex = 1; if(is_array($results)){ foreach($results as $resultIem){ ?> Service_model->getAvailableTimes($_POST['worker_id'], $_POST['selectedDate'], $_POST['servicelength']); $timeIsAvailable = 0; if(is_array($results)){ foreach($results as $resultIem){ if(date('H:i:s', strtotime($resultIem)) == $_POST['selectedTime']){ $timeIsAvailable = 1; } } echo $timeIsAvailable; } else{ echo 0; } } if(isset($_POST['action']) && $_POST['action'] == 'getAvailableTimes' && isset($_POST['selectedDate'])){ $results = $this->Service_model->getAvailableTimes($_POST['worker_id'], $_POST['selectedDate'], $_POST['servicelength'].':00'); $rowIndex = 1; if(!empty($results)){ foreach($results as $resultIem){ ?>
Service_model->getWorkerById($_POST['worker_id']); if(is_object($result)){ ?>
worker_name;?>
User_model->getUserById($_POST['user_id']); $userArray = array( 'is_enabled' => $_POST['newValue'] ); $this->User_model->updateUser($_POST['user_id'], $userArray); $this->Log_model->addLog('change_user_status', $data['currentUser']->username.' státusza változott - '.($_POST['newValue']?'aktív':'letiltva').' állapotra', $_POST['operator']); } if(isset($_POST['action']) && $_POST['action'] == 'checkUser'){ echo $this->User_model->isUsernameAvailable($_POST['username']); } if(isset($_POST['action']) && $_POST['action'] == 'refreshLogMonitor'){ $logInfoArray = $this->Log_model->getAllLoginfo(); $logrow = ''; foreach($logInfoArray as $logInfoItem){ $logDateTime = new datetime($logInfoItem->event_datetime); $logrow .= date_format($logDateTime,"Y-m-d H:i").'  '.$logInfoItem->username.'  '.$logInfoItem->event_content.' '; } echo $logrow; } $this->load->view('pages/ajax', $data); } public function booking_process(){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Service_model'); $data['pageTitle'] = ''; $data['subpage'] = ''; if(isset($_POST['sendBooking'])){ //calculate finish time $serviceStartTime = date("H:i:s", strtotime($_POST['booking_start_time'])); $serviceLengthTime = date("H:i:s", strtotime($_POST['servicelength'])); $secs = strtotime($serviceLengthTime)-strtotime("00:00:00"); $serviceFinishTime = date("H:i:s",strtotime($serviceStartTime)+$secs); $data['services'] = $this->Service_model->getAllServiceByServiceType($_POST['subpage'], $_POST['lang']); $data['workers'] = $this->Service_model->getAllWorkers(); $data['selectedLang'] = 'en'; $selectedServiceArray = array(); //find selected services if(is_array($data['services'])){ foreach($data['services'] as $serviceItem){ if(isset($_POST['service_'.$serviceItem->service_id])){ if($_POST['service_'.$serviceItem->service_id]){ $selectedServiceArray[] = $serviceItem->service_id; } } } } // 1. Build selected service array $selectedServiceArray = array(); $totalLengthSeconds = 0; foreach ($_POST as $key => $value) { if (strpos($key, 'service_') === 0 && $value == '1') { $serviceId = str_replace('service_', '', $key); $selectedServiceArray[] = $serviceId; $service = $this->Service_model->getServiceById($serviceId); if ($service) { $parts = explode(':', $service->service_time); $totalLengthSeconds += ($parts[0] * 3600) + ($parts[1] * 60); } } } // 2. Convert total time to H:i format $servicelength = gmdate('H:i:s', $totalLengthSeconds); // 3. Build booking array $bookingArray = array( 'guest_name' => $_POST['guest_name'], 'guest_email' => $_POST['guest_email'], 'guest_phone' => $_POST['guest_phone'], 'worker_id' => $_POST['worker_id'], 'booking_date' => $_POST['booking_date'], 'booking_start_time' => $_POST['booking_start_time'], 'booking_finish_time' => '', // optional 'service_ids' => serialize($selectedServiceArray), 'guest_confirmed' => '0', 'guest_confirm_code' => '1234', ); $bookingDate = $bookingArray['booking_date']; $bookingTime = $bookingArray['booking_start_time']; $weekday = date('w', strtotime($bookingDate)); $schedule = $this->Service_model->getWorkerScheduleByDay($bookingArray['worker_id'], $weekday); if (!$schedule) { $this->output ->set_status_header(403) ->set_content_type('application/json') ->set_output(json_encode(['error' => 'Worker is not available on this day.'])); return; } if ($bookingTime < $schedule->start_time || $bookingTime >= $schedule->end_time) { $this->output ->set_status_header(403) ->set_content_type('application/json') ->set_output(json_encode(['error' => 'Booking time is outside worker schedule.'])); return; } if (!$this->Service_model->isWorkerAvailableThisWeek($bookingArray['worker_id'], $bookingDate)) { $this->output ->set_status_header(403) ->set_content_type('application/json') ->set_output(json_encode(['error' => 'Worker only works every second week.'])); return; } // 4. Validate: available slot with correct length $available = $this->Service_model->getAvailableTimes( $bookingArray['worker_id'], $bookingArray['booking_date'], $servicelength ); if (!is_array($available) || !in_array($bookingArray['booking_start_time'], $available)) { $this->output ->set_status_header(409) ->set_content_type('application/json') ->set_output(json_encode([ 'error' => 'Conflict. Timeslot is taken or does not fit the service.' ])); return; } // 5. Validate: booking doesn't go past 18:00 $bookingStart = new DateTime($bookingArray['booking_start_time']); $bookingLength = new DateTime($servicelength); $bookingEnd = clone $bookingStart; $bookingEnd->add(new DateInterval('PT' . intval($bookingLength->format('H')) . 'H')); $bookingEnd->add(new DateInterval('PT' . intval($bookingLength->format('i')) . 'M')); $bookingArray['booking_finish_time'] = $bookingEnd->format('H:i:s'); $closingTime = new DateTime('18:00'); if ($bookingEnd > $closingTime) { $this->output ->set_status_header(403) ->set_content_type('application/json') ->set_output(json_encode([ 'error' => 'Selected time exceeds business hours.' ])); return; } // 6. Create booking $this->Service_model->createBooking($bookingArray); $worker = $this->Service_model->getWorkerById($bookingArray['worker_id']); $services = unserialize($bookingArray['service_ids']); $serviceArray = array(); $emailArray = array(); if(is_array($services)){ foreach($services as $serviceItem){ $selectedService = $this->Service_model->getServiceById($serviceItem); if(is_object($selectedService)){ $serviceArray[] = $selectedService; } } } $content = ''; switch($_POST['lang']){ case 'no': $content = 'Kjære gjest,
'; $content .= 'Takk for din bestilling!
'; $content .= '
'; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= '
Navn: '.$bookingArray['guest_name'].'
E-post: '.$bookingArray['guest_email'].'
Telefon: '.$bookingArray['guest_phone'].'
Arbeider: '.$worker->worker_name.'
Dato: '.$bookingArray['booking_date'].'
Tid: '.$bookingArray['booking_start_time'].' - '.$bookingArray['booking_finish_time'].'
Tjenester: '; $totalServicePrice = 0; foreach($serviceArray as $serviceArrayItem){ $totalServicePrice += $serviceArrayItem->service_price; $content .= ''; } $content .= '
'.$serviceArrayItem->service_name_no.''.$serviceArrayItem->service_price.' kr
Totalpris: '.$totalServicePrice.' kr
'; $content .= '
STUDIOBEVE'; break; case 'en': $content = 'Dear Guest,
'; $content .= 'Thank you for your booking!
'; $content .= '
'; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= '
Name: '.$bookingArray['guest_name'].'
Email: '.$bookingArray['guest_email'].'
Phone: '.$bookingArray['guest_phone'].'
Worker: '.$worker->worker_name.'
Date: '.$bookingArray['booking_date'].'
Time: '.$bookingArray['booking_start_time'].' - '.$bookingArray['booking_finish_time'].'
Services: '; $totalServicePrice = 0; foreach($serviceArray as $serviceArrayItem){ $totalServicePrice += $serviceArrayItem->service_price; $content .= ''; } $content .= '
'.$serviceArrayItem->service_name_en.''.$serviceArrayItem->service_price.' kr
Total price: '.$totalServicePrice.' kr
'; $content .= '
STUDIOBEVE'; break; case 'hu': $content = 'Kedves Vendégünk,
'; $content .= 'Köszönettel fogadtuk a foglalását!
'; $content .= '
'; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= ''; $content .= '
Név: '.$bookingArray['guest_name'].'
Email: '.$bookingArray['guest_email'].'
Telefon: '.$bookingArray['guest_phone'].'
Dolgozó: '.$worker->worker_name.'
Dátum: '.$bookingArray['booking_date'].'
Időpont: '.$bookingArray['booking_start_time'].' - '.$bookingArray['booking_finish_time'].'
Szolgáltatás(ok): '; $totalServicePrice = 0; foreach($serviceArray as $serviceArrayItem){ $totalServicePrice += $serviceArrayItem->service_price; $content .= ''; } $content .= '
'.$serviceArrayItem->service_name_hu.''.$serviceArrayItem->service_price.' kr
Összesen fizetendő: '.$totalServicePrice.' kr
'; $content .= '
STUDIOBEVE'; break; } $data['selectedLang'] = $_POST['lang']; $emailItem = array( 'addressee_email' => $bookingArray['guest_email'], 'addressee_name' => $bookingArray['guest_name'], 'subject' => '[studiobeve] Your booking has arrived', 'content' => $content, 'attachments' => array() ); $emailArray[] = $emailItem; header('Location:'.SITEURL.$_POST['lang'].'/booking-finished/'.$_POST['subpage']); } $this->User_model->sendEmail($emailArray, $_POST['lang'], $_POST['subpage']); $this->load->view('pages/booking-process', $data); } public function profile(){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Log_model'); $this->load->model('Module_model'); $data['message'] = ''; $data['message_class'] = ''; $data['fullname'] = ''; $data['password'] = ''; $data['profile_img_url'] = ''; if(isset($_SESSION['username'])){ $data['currentUser'] = $this->User_model->getUserByUsername($_SESSION['username']); $data['message'] = ''; $data['message_class'] = ''; $data['pageTitle'] = 'Profil szerkesztése'; if($this->User_model->is_user_admin($_SESSION['username'])){ $data['activeModules'] = $this->Module_model->getAllModule(); } else{ $data['activeModules'] = $this->Module_model->getUserModules($data['currentUser']->user_id); } if(isset($_POST["storeProfile"])) { if($_POST['fullname'] != $data['currentUser']->fullname){ $userArray = array( 'fullname' => $_POST['fullname'] ); $this->User_model->updateUser($data['currentUser']->user_id, $userArray); $this->Log_model->addLog('profile', 'A felhasználó módosította a teljes nevét: '.$data['currentUser']->fullname.' => '.$_POST['fullname'],$_SESSION['username']); } if($_POST['password'] != ''){ $userArray = array( 'password' => hash('sha256', $_POST['password']) ); $this->User_model->updateUser($data['currentUser']->user_id, $userArray); $this->Log_model->addLog('profile', 'A felhasználó módosította a jelszavát',$_SESSION['username']); } //upload profile image if($_FILES["profile_img"]["tmp_name"] != ''){ $target_dir = getcwd()."/assets/img/profiles/"; $target_file = $target_dir . str_replace('.','_', str_replace('@','_',$_SESSION['username'])); $imageFileType = strtolower(pathinfo(basename($_FILES["profile_img"]["name"]),PATHINFO_EXTENSION)); if (move_uploaded_file($_FILES["profile_img"]["tmp_name"], $target_file.'.'.$imageFileType)) { $data['message'] = 'A profilkép sikeresen feltöltve!'; $data['message_class'] = 'successMessage'; $data['profile_img_url'] = 'assets/img/profiles/'.str_replace('.','_', str_replace('@','_',$_SESSION['username'])).'.'.$imageFileType; $userArray = array( 'profile_img_url' => $data['profile_img_url'] ); $this->User_model->updateUser($data['currentUser']->user_id, $userArray); $this->Log_model->addLog('profile', 'A felhasználó lecserélte a profilképét ',$_SESSION['username']); } else { $data['message'] = 'Hiba a feltöltés közben!'; $data['message_class'] = 'errorMessage'; } } $data['message'] = 'A profil sikeresen módosítva!'; $data['message_class'] = 'successMessage'; } $data['currentUser'] = $this->User_model->getUserByUsername($_SESSION['username']); $this->load->view('pages/profile', $data); } else{ header("Location:".SITEURL."login"); } } public function log_monitor(){ $this->load->helper('url'); $this->load->model('User_model'); $this->load->model('Log_model'); $this->load->model('Module_model'); if(isset($_SESSION['username'])){ $data['currentUser'] = $this->User_model->getUserByUsername($_SESSION['username']); $data['message'] = ''; $data['message_class'] = ''; $data['pageTitle'] = 'Rendszermonitor'; $data['logInfoLink'] = ''; if($this->User_model->is_user_admin($_SESSION['username'])){ $data['activeModules'] = $this->Module_model->getAllModule(); } else{ $data['activeModules'] = $this->Module_model->getUserModules($data['currentUser']->user_id); } $selectedModule = $this->Module_model->getModuleBySlug('log-monitor'); if($this->Module_model->is_module_available($selectedModule->module_id, $data['currentUser']->user_id)){ if(isset($_POST['exportToFile'])){ $logInfoArray = $this->Log_model->getAllLoginfo(); $logrow = ''; $logTxt = fopen(getcwd()."/documents/loginfo.csv", "w") or die("Hiba a fájl mentésekor!"); $row = '"Esemény ideje";'.'"Esemény típusa";'.'"Felhasználónév";"Bejegyzés tartalma";'.PHP_EOL; $string_encoded = iconv( mb_detect_encoding( $row ), 'ISO-8859-2', $row ); fwrite($logTxt, $string_encoded); foreach($logInfoArray as $logInfoItem){ $logDateTime = new datetime($logInfoItem->event_datetime); $row = date_format($logDateTime,"Y-m-d H:i").';"'.$logInfoItem->event_type.'";"'.$logInfoItem->username.'";"'.$logInfoItem->event_content.'";'.PHP_EOL; $string_encoded = iconv( mb_detect_encoding( $row ), 'ISO-8859-2', $row ); fwrite($logTxt, $string_encoded); } fclose($logTxt); $data['logInfoLink'] = 'A loginfo.csv fájl letöltése'; } $this->load->view('log-monitor', $data); } else{ header("Location:".SITEURL."home"); } } else{ header("Location:".SITEURL."login"); } } }