Tento projekt je webova aplikacia o slovenskych olympionikoch. Aplikacia ma:
Na verejnej casti sa zobrazuje tabulka olympionikov. V privatnej casti sa nachadza:
Funkcne nasadenie:
Projekt sme robili postupne, po logickych castiach.
Najprv sme vytvorili databazovu schemu podla suboru oh_v2.xlsx.
Databaza je rozdelena do viacerych tabuliek:
countriescitiesdisciplinesolympicsathletesresultsuserslogin_historytrusted_devicesTabulky su navzajom prepojene pomocou cudzich klucov. Databaza teda nie je postavena na jednej tabulke.
Subory suvisiace s databazou:
sql/table.sqlsql/webte2_z1_dump.sqlsql/users.sqlsql/login_history.sqlsql/trusted_devices.sqlFinalny SQL dump na odovzdanie:
sql/webte2_z1_dump.sqlHlavny vstupny bod aplikacie je:
public/index.phpTento subor funguje ako jednoduchy router. Podla parametra page z URL nacita prislusnu cast aplikacie.
Pouzivane include subory su hlavne v adresari:
includes/Na pracu s databazou pouzivame PDO.
Pripojenie riesi:
src/Database.phpKonfiguracia sa nachadza v:
config/config.phpDatabaza sa nenaplnala rucne. Naplnenie je riesene dynamicky nacitanim suboru a jeho spracovanim na strane servera.
Formular pre import je v:
includes/admin_zone.phpServerove spracovanie importu je v:
src/ExcelImporter.phpPouzivatel po prihlaseni nahra .xlsx subor a aplikacia ulozi data do databazy.
Verejna cast zobrazuje tabulku olympionikov.
Subory:
includes/public_table.phpincludes/olympian_detail.phpVo verejnej casti je:
Implementovali sme dve moznosti prihlasenia:
Subory:
public/login.phpsrc/GoogleOAuthService.phpincludes/google_oauth_callback.phpPouzivatel sa moze zaregistrovat pomocou:
Hesla sa ukladaju iba hashovane pomocou:
password_hash()password_verify()Pouzivatelia su ulozeni v tabulke:
usersPre lokalne konto je implementovane dvojfaktorove overenie cez Google Authenticator.
Subory:
src/TwoFactorService.phpsrc/TwoFactorToDatabase.phpsrc/TwoFactorQrService.phpsrc/TrustedDeviceService.phpVo profile sa da:
Kazde prihlasenie sa uklada do:
login_historyUkladane udaje:
user_idPouzivane hodnoty login_type:
locallocal+2falocal+remembered-devicelocal+2fa+remembered-devicegoogleSubor:
includes/profile.phpPrihlaseny pouzivatel moze:
Cookies notice je rieseny cez:
includes/footer.phppublic/assets/js/ui-effects.jsJednoduche preklady su riesene cez:
src/I18n.phpJazyky:
Vzhlad aplikacie je rieseny vlastnym CSS a JavaScriptom.
Subory:
public/assets/css/header_style.csspublic/assets/css/main_style.csspublic/assets/css/fonts.csspublic/assets/js/ui-effects.jsPouzite web fonty:
FrauncesManropeAplikacia je responzivna a obsahuje:
Najdolezitejsie adresare:
public/ - vstupne PHP subory a assetsincludes/ - casti stranok a sablonysrc/ - logika aplikaciesql/ - SQL suboryconfig/ - konfiguracianginx/ - konfiguracia pre NginxPouzili sme Composer a tieto PHP kniznice:
phpoffice/phpspreadsheet - citanie Excel suborovgoogle/apiclient - Google OAuth2pragmarx/google2fa - 2FA / TOTPendroid/qr-code - generovanie QR kodovKonfiguracny subor:
composer.jsonAdresar vendor/ sa do odovzdavaneho ZIP archivu nepridava.
Vo formularoch je implementovana:
Validovane su hlavne:
Nepouzivame:
alert()confirm()Pouzivame vlastne stavove hlasky a validacne spravy v rozhrani.
Projekt sa lokalne spusta cez PHP built-in server:
php -S localhost:8000 -t public
Potom je aplikacia dostupna na:
Projekt je nasadeny do podadresara:
/var/www/example.com/webte_pro1/Funkcny odkaz:
Konfiguracny subor pre Nginx:
nginx/example-webte-pro1.confPri nasadeni bolo potrebne:
/webte_pro1/ v Nginxpublic/ ako web root cez aliasphp8.4-fpmconfig/config.phpNa serveri bolo potrebne:
/webte_pro1/php8.4-fpmPouzite systemove casti servera:
nginxphp8.4-fpmmariadbAk je potrebne doinstalovat zavislosti na serveri, pouzije sa:
composer install
Aplikacia ocakava databazu:
webte2_z1Na vytvorenie aktualnej schemy odporucame pouzit:
sql/webte2_z1_dump.sqlV Google Cloud Console bolo potrebne vytvorit OAuth klienta a nastavit redirect URI:
http://localhost:8000/index.php?page=google-callbackhttps://example.com/webte_pro1/index.php?page=google-callbackDo config/config.php sa doplnaju:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_REDIRECT_URIOdporucany postup:
config/config.phpnginxphp8.4-fpmvendorsql/webte2_z1_dump.sqlDo ZIP archivu odporucame dat:
composer.jsoncomposer.locksql/webte2_z1_dump.sqlnginx/example-webte-pro1.confREADME.mdDo ZIP archivu sa nema davat:
vendor/.git/.idea/Projekt je vytvoreny v cistom PHP bez frameworku. Obsahuje:
Projekt bol vyvijany lokalne a nasledne nasadeny na skolsky server. Public portfolio verzia pouziva anonymizovane deployment priklady.