From 29b13ccc70dcf4d04acaffb72262a8cbb3afbda6 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Sat, 25 Apr 2026 16:55:49 +0200 Subject: [PATCH] update --- .paul/PROJECT.md | 29 +++++++++++ .paul/ROADMAP.md | 23 ++++++++ .paul/STATE.md | 49 ++++++++++++++++++ .paul/config.md | 34 ++++++++++++ .paul/docs/API.md | 5 ++ .paul/docs/ARCHITECTURE.md | 5 ++ .paul/docs/DB_SCHEMA.md | 5 ++ .paul/docs/DECISIONS.md | 5 ++ .paul/docs/STACK.md | 5 ++ .paul/docs/TECH_CHANGELOG.md | 5 ++ .paul/docs/TODO.md | 5 ++ .vscode/ftp-kr.json | 3 +- CLAUDE.md | 33 ++++++++++++ .../front/factory/class.GlobelusAdverts.php | 36 +++++++++++-- autoload/front/factory/class.GlobelusCron.php | 8 +-- .../front/factory/class.GlobelusFirms.php | 12 ++--- .../s_cache_3af17bb640bbb102a77a6031d37e93bf | Bin 0 -> 9006 bytes .../s_cache_4b916ae533b4ded88ddc3edfe99de1be | Bin 0 -> 1647 bytes .../s_cache_df8e16882b112ce2c0739934bd19b578 | Bin 0 -> 34 bytes 19 files changed, 248 insertions(+), 14 deletions(-) create mode 100644 .paul/PROJECT.md create mode 100644 .paul/ROADMAP.md create mode 100644 .paul/STATE.md create mode 100644 .paul/config.md create mode 100644 .paul/docs/API.md create mode 100644 .paul/docs/ARCHITECTURE.md create mode 100644 .paul/docs/DB_SCHEMA.md create mode 100644 .paul/docs/DECISIONS.md create mode 100644 .paul/docs/STACK.md create mode 100644 .paul/docs/TECH_CHANGELOG.md create mode 100644 .paul/docs/TODO.md create mode 100644 CLAUDE.md create mode 100644 temp/3/a/s_cache_3af17bb640bbb102a77a6031d37e93bf create mode 100644 temp/4/b/s_cache_4b916ae533b4ded88ddc3edfe99de1be create mode 100644 temp/d/f/s_cache_df8e16882b112ce2c0739934bd19b578 diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md new file mode 100644 index 0000000..a4dd033 --- /dev/null +++ b/.paul/PROJECT.md @@ -0,0 +1,29 @@ +# Project: globelus.pl + +## Description +Portal ogloszeniowy do publikacji i wyszukiwania ofert pracy, z panelami dla kandydatow i pracodawcow oraz filtrowaniem ofert po wielu kryteriach. + +## Core Value +Kandydaci szybko znajduja dopasowane oferty pracy, a pracodawcy latwo docieraja do odpowiednich kandydatow. + +## Requirements + +### Must Have +- [To be defined during planning] + +### Should Have +- [To be defined during planning] + +### Nice to Have +- [To be defined during planning] + +## Constraints +- [To be identified during planning] + +## Success Criteria +- Kandydaci szybko znajduja dopasowane oferty pracy, a pracodawcy latwo docieraja do odpowiednich kandydatow. +- [To be refined during planning] + +--- +*Created: 2026-04-25 16:39* + diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md new file mode 100644 index 0000000..adc703e --- /dev/null +++ b/.paul/ROADMAP.md @@ -0,0 +1,23 @@ +# Roadmap: globelus.pl + +## Overview +Rozwoj projektu obejmuje stabilizacje kluczowych flow ofert pracy, poprawy jakosci danych i filtrowania, a nastepnie kolejne usprawnienia UX oraz procesu publikacji i aplikowania. + +## Current Milestone +**v0.1 Initial Release** (v0.1.0) +Status: Not started +Phases: 0 of TBD complete + +## Phases + +| Phase | Name | Plans | Status | Completed | +|-------|------|-------|--------|-----------| +| 1 | TBD | TBD | Not started | - | + +## Phase Details + +Phases will be defined during `$paul-plan`. + +--- +*Roadmap created: 2026-04-25 16:39* + diff --git a/.paul/STATE.md b/.paul/STATE.md new file mode 100644 index 0000000..8a3845c --- /dev/null +++ b/.paul/STATE.md @@ -0,0 +1,49 @@ +# Project State + +## Project Reference + +See: .paul/PROJECT.md (updated 2026-04-25 16:39) + +**Core value:** Kandydaci szybko znajduja dopasowane oferty pracy, a pracodawcy latwo docieraja do odpowiednich kandydatow. +**Current focus:** Project initialized - ready for planning + +## Current Position + +Milestone: v0.1 Initial Release +Phase: Not yet defined +Plan: None yet +Status: Ready to create roadmap and first PLAN +Last activity: 2026-04-25 16:39 - Project initialized + +Progress: +- Milestone: [----------] 0% + +## Loop Position + +Current loop state: +``` +PLAN --> APPLY --> UNIFY + o o o [Ready for first PLAN] +``` + +## Accumulated Context + +### Decisions +None yet. + +### Deferred Issues +None yet. + +### Blockers/Concerns +None yet. + +## Session Continuity + +Last session: 2026-04-25 16:39 +Stopped at: Project initialization complete +Next action: Run $paul-plan to define phases and first plan +Resume file: .paul/PROJECT.md + +--- +*STATE.md - Updated after every significant action* + diff --git a/.paul/config.md b/.paul/config.md new file mode 100644 index 0000000..e08fb22 --- /dev/null +++ b/.paul/config.md @@ -0,0 +1,34 @@ +# Project Config + +**Project:** globelus.pl +**Created:** 2026-04-25 16:39 + +## Project Settings + +```yaml +project: + name: globelus.pl + version: 0.0.0 +``` + +## Integrations + +### SonarQube + +```yaml +sonarqube: + enabled: false + reason: "Skipped during init" +``` + +## Preferences + +```yaml +preferences: + auto_commit: false + verbose_output: false +``` + +--- +*Config created: 2026-04-25 16:39* + diff --git a/.paul/docs/API.md b/.paul/docs/API.md new file mode 100644 index 0000000..f2728cf --- /dev/null +++ b/.paul/docs/API.md @@ -0,0 +1,5 @@ +# API + +> Endpointy, kontrakty request/response, autentykacja. +> Uzupelnij gdy projekt bedzie udostepnial API. + diff --git a/.paul/docs/ARCHITECTURE.md b/.paul/docs/ARCHITECTURE.md new file mode 100644 index 0000000..3aad0a0 --- /dev/null +++ b/.paul/docs/ARCHITECTURE.md @@ -0,0 +1,5 @@ +# Architecture + +> Struktura klas, modulow, przeplywow i zaleznosci w projekcie. +> Uzupelnij po pierwszej fazie implementacji. + diff --git a/.paul/docs/DB_SCHEMA.md b/.paul/docs/DB_SCHEMA.md new file mode 100644 index 0000000..f56c19d --- /dev/null +++ b/.paul/docs/DB_SCHEMA.md @@ -0,0 +1,5 @@ +# Database Schema + +> Schemat bazy danych - tabele, kolumny, FK, indeksy. +> Uzupelnij gdy projekt bedzie korzystac z bazy danych. + diff --git a/.paul/docs/DECISIONS.md b/.paul/docs/DECISIONS.md new file mode 100644 index 0000000..3b45667 --- /dev/null +++ b/.paul/docs/DECISIONS.md @@ -0,0 +1,5 @@ +# Architecture Decision Records + +> Kluczowe decyzje techniczne i ich uzasadnienia. +> Dodawaj wpisy recznie, gdy podejmujesz istotne decyzje architektoniczne. + diff --git a/.paul/docs/STACK.md b/.paul/docs/STACK.md new file mode 100644 index 0000000..a47e8de --- /dev/null +++ b/.paul/docs/STACK.md @@ -0,0 +1,5 @@ +# Stack + +> Stack technologiczny, wersje, zaleznosci, srodowisko. +> Uzupelnij po inicjalizacji projektu. + diff --git a/.paul/docs/TECH_CHANGELOG.md b/.paul/docs/TECH_CHANGELOG.md new file mode 100644 index 0000000..456be13 --- /dev/null +++ b/.paul/docs/TECH_CHANGELOG.md @@ -0,0 +1,5 @@ +# Tech Changelog + +> Chronologiczny log zmian technicznych - co i dlaczego. +> Aktualizowany automatycznie po kazdej fazie PAUL. + diff --git a/.paul/docs/TODO.md b/.paul/docs/TODO.md new file mode 100644 index 0000000..98cafed --- /dev/null +++ b/.paul/docs/TODO.md @@ -0,0 +1,5 @@ +# TODO + +> Luzny parking pomyslow, rzeczy do sprawdzenia i pomyslow na pozniej. +> Nie wymaga formalnosci. + diff --git a/.vscode/ftp-kr.json b/.vscode/ftp-kr.json index 9942ae6..b05c1ad 100644 --- a/.vscode/ftp-kr.json +++ b/.vscode/ftp-kr.json @@ -15,6 +15,7 @@ "/.vscode", "/.serena", "/.claude", - "CLAUDE.md" + "CLAUDE.md", + ".paul" ] } \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..3cc119f --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,33 @@ +# Projektowe zasady dla globelus.pl + +## Stack +- **Jezyk:** PHP +- **Framework:** Wlasny system MVC + szablony PHP +- **Wersja:** legacy/custom + +## Zasady kodu +- Stosuj PSR-12 dla formatowania kodu PHP. +- Nazewnictwo: PascalCase dla klas, camelCase dla metod, snake_case dla pol DB. +- Unikaj zagniezdzen > 3 poziomy; wydzielaj metody pomocnicze. +- Komentarze tylko gdy wyjasniaja "dlaczego", nie "co". + +## Baza danych +- Schemat dokumentowany w `.paul/docs/DB_SCHEMA.md`. +- Kazda zmiana schematu wymaga migracji lub udokumentowanej procedury SQL. +- Nie modyfikuj historycznych migracji/skryptow bez uzasadnienia. + +## Testy +- Ustal i udokumentuj komende testowa dla projektu (brak standardowej konfiguracji testow). + +## Dokumentacja +- Dokumentacja techniczna w `.paul/docs/`. +- Przy kazdej zmianie aktualizuj odpowiednie pliki docs. +- `TECH_CHANGELOG.md` aktualizowany po kazdej fazie. + +## Wdrazanie +- Ustal i dopisz procedure deploy dla produkcji/staging. + +## UI/Frontend +- Projekt korzysta z szablonow PHP i assets statycznych; utrzymuj spojnosc z istniejacym stylem. +- Zmiany UX w listingu ofert testuj na flow filtrowania i paginacji. + diff --git a/autoload/front/factory/class.GlobelusAdverts.php b/autoload/front/factory/class.GlobelusAdverts.php index 344f292..a6e6bfa 100644 --- a/autoload/front/factory/class.GlobelusAdverts.php +++ b/autoload/front/factory/class.GlobelusAdverts.php @@ -331,14 +331,24 @@ class GlobelusAdverts if ( $values['keyword'] ) $filtr .= 'AND ( ' . 'title_nopl LIKE :title_nopl ' + . 'OR ' + . 'title LIKE :title ' . 'OR ' . 'firm_name_profile_nopl LIKE :firm_name_profile_nopl ' + . 'OR ' + . 'firm_name_profile LIKE :firm_name_profile ' . 'OR ' . 'text_nopl LIKE :text_nopl ' + . 'OR ' + . 'text LIKE :text ' . 'OR ' . 'country_nopl LIKE :country_nopl ' + . 'OR ' + . 'country LIKE :country ' . 'OR ' . 'city_nopl LIKE :city_nopl ' + . 'OR ' + . 'city LIKE :city ' . ') '; if ( is_array( $values['countries'] ) and count( $values['countries'] ) == 1 and $values['countries'][0] == 75 ) @@ -453,7 +463,12 @@ class GlobelusAdverts ':title_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', ':text_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', ':country_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', - ':city_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%' + ':city_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', + ':title' => '%' . trim( (string)$values['keyword'] ) . '%', + ':firm_name_profile' => '%' . trim( (string)$values['keyword'] ) . '%', + ':text' => '%' . trim( (string)$values['keyword'] ) . '%', + ':country' => '%' . trim( (string)$values['keyword'] ) . '%', + ':city' => '%' . trim( (string)$values['keyword'] ) . '%' ] ) -> fetch(); } catch ( \Throwable $t ) @@ -493,14 +508,24 @@ class GlobelusAdverts if ( $values['keyword'] ) $filtr .= 'AND ( ' . 'title_nopl LIKE :title_nopl ' + . 'OR ' + . 'title LIKE :title ' . 'OR ' . 'firm_name_profile_nopl LIKE :firm_name_profile_nopl ' + . 'OR ' + . 'firm_name_profile LIKE :firm_name_profile ' . 'OR ' . 'text_nopl LIKE :text_nopl ' + . 'OR ' + . 'text LIKE :text ' . 'OR ' . 'country_nopl LIKE :country_nopl ' + . 'OR ' + . 'country LIKE :country ' . 'OR ' . 'city_nopl LIKE :city_nopl ' + . 'OR ' + . 'city LIKE :city ' . ') '; if ( is_array( $values['countries'] ) and count( $values['countries'] ) == 1 and $values['countries'][0] == 75 ) @@ -616,7 +641,12 @@ class GlobelusAdverts ':firm_name_profile_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', ':text_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', ':country_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', - 'city_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%' + ':city_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%', + ':title' => '%' . trim( (string)$values['keyword'] ) . '%', + ':firm_name_profile' => '%' . trim( (string)$values['keyword'] ) . '%', + ':text' => '%' . trim( (string)$values['keyword'] ) . '%', + ':country' => '%' . trim( (string)$values['keyword'] ) . '%', + ':city' => '%' . trim( (string)$values['keyword'] ) . '%' ] ) -> fetchAll( \PDO::FETCH_ASSOC ); } catch ( \Throwable $t ) @@ -654,4 +684,4 @@ class GlobelusAdverts global $mdb; return $mdb -> select( 'globelus_adverts_categories', [ 'id', 'name' ], [ 'ORDER' => [ 'name' => 'ASC' ] ] ); } -} \ No newline at end of file +} diff --git a/autoload/front/factory/class.GlobelusCron.php b/autoload/front/factory/class.GlobelusCron.php index c4e3686..b59348d 100644 --- a/autoload/front/factory/class.GlobelusCron.php +++ b/autoload/front/factory/class.GlobelusCron.php @@ -61,21 +61,21 @@ class GlobelusCron { global $mdb; - $results = $mdb -> query( 'SELECT id, title FROM globelus_adverts WHERE title_nopl IS NULL' ) -> fetchAll( \PDO::FETCH_ASSOC ); + $results = $mdb -> query( 'SELECT id, title FROM globelus_adverts WHERE title_nopl IS NULL OR title_nopl = \'\'' ) -> fetchAll( \PDO::FETCH_ASSOC ); if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) { $mdb -> update( 'globelus_adverts', [ 'title_nopl' => \S::seo( $row['title'], true ) ], [ 'id' => $row['id'] ] ); echo( '

Generuje wartość nopl - ogłoszenia.

' ); } - $results = $mdb -> query( 'SELECT id, firm_name_profile FROM globelus_firms_data WHERE firm_name_profile_nopl IS NULL' ) -> fetchAll( \PDO::FETCH_ASSOC ); + $results = $mdb -> query( 'SELECT id, firm_name_profile FROM globelus_firms_data WHERE firm_name_profile_nopl IS NULL OR firm_name_profile_nopl = \'\'' ) -> fetchAll( \PDO::FETCH_ASSOC ); if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) { $mdb -> update( 'globelus_firms_data', [ 'firm_name_profile_nopl' => \S::seo( $row['firm_name_profile'], true ) ], [ 'id' => $row['id'] ] ); echo( '

Generuje wartość nopl - firmy.

' ); } - $results = $mdb -> query( 'SELECT id, text FROM globelus_adverts WHERE text_nopl IS NULL' ) -> fetchAll( \PDO::FETCH_ASSOC ); + $results = $mdb -> query( 'SELECT id, text FROM globelus_adverts WHERE text_nopl IS NULL OR text_nopl = \'\'' ) -> fetchAll( \PDO::FETCH_ASSOC ); if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) { $mdb -> update( 'globelus_adverts', [ 'text_nopl' => \S::seo( $row['text'], true ) ], [ 'id' => $row['id'] ] ); @@ -89,7 +89,7 @@ class GlobelusCron echo( '

Generuje wartość nopl - kraje.

' ); } - $results = $mdb -> query( 'SELECT id, city FROM globelus_adverts WHERE city_nopl IS NULL' ) -> fetchAll( \PDO::FETCH_ASSOC ); + $results = $mdb -> query( 'SELECT id, city FROM globelus_adverts WHERE city_nopl IS NULL OR city_nopl = \'\'' ) -> fetchAll( \PDO::FETCH_ASSOC ); if ( is_array( $results ) and !empty( $results ) ) foreach ( $results as $row ) { $mdb -> update( 'globelus_adverts', [ 'city_nopl' => \S::seo( $row['city'], true ) ], [ 'id' => $row['id'] ] ); diff --git a/autoload/front/factory/class.GlobelusFirms.php b/autoload/front/factory/class.GlobelusFirms.php index f8c065b..bce12f2 100644 --- a/autoload/front/factory/class.GlobelusFirms.php +++ b/autoload/front/factory/class.GlobelusFirms.php @@ -1083,9 +1083,9 @@ class GlobelusFirms 'outside_ue' => $values['outside_ue'], 'without_driving_license' => $values['without_driving_license'], 'aplication_link' => $aplication_link ? $aplication_link : null, - 'title_nopl' => '', - 'city_nopl' => '', - 'text_nopl' => '' + 'title_nopl' => \S::seo($values['title'], true), + 'city_nopl' => \S::seo($values['city'], true), + 'text_nopl' => \S::seo(\S::clear_advert_text($values['text']), true) ]); $advert_id = $mdb->id(); } @@ -1120,9 +1120,9 @@ class GlobelusFirms 'outside_ue' => $values['outside_ue'], 'without_driving_license' => $values['without_driving_license'], 'aplication_link' => $aplication_link ? $aplication_link : null, - 'title_nopl' => '', - 'city_nopl' => '', - 'text_nopl' => '' + 'title_nopl' => \S::seo($values['title'], true), + 'city_nopl' => \S::seo($values['city'], true), + 'text_nopl' => \S::seo(\S::clear_advert_text($values['text']), true) ], [ 'AND' => [ 'user_id' => $values['user_id'], diff --git a/temp/3/a/s_cache_3af17bb640bbb102a77a6031d37e93bf b/temp/3/a/s_cache_3af17bb640bbb102a77a6031d37e93bf new file mode 100644 index 0000000000000000000000000000000000000000..58df3371dfe0a67fd5f704d6c80b8e1f3e38dfb2 GIT binary patch literal 9006 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�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 U*erI>VRtc1Z3;bt|Ni&?0gkvx9RL6T literal 0 HcmV?d00001 diff --git a/temp/4/b/s_cache_4b916ae533b4ded88ddc3edfe99de1be b/temp/4/b/s_cache_4b916ae533b4ded88ddc3edfe99de1be new file mode 100644 index 0000000000000000000000000000000000000000..75ca4d20c958e31b1c33868555118e20729de5aa GIT binary patch literal 1647 zcmV-#29WvHSKE%;HV}OekbfXlptgavEz5WL((ZQCpunPOk!*vuC=8mSC3-1RA*prb zWM2vd{f45yv-z(MWyzK{+sjKI>IYjI4rk8X$JqD$cg%NZ%+e zDB%=qiUNs*G$^8)8Ehyr5)q4l7?f%xg^&J~6CO3*+I)0?1)hh_^PNJ&%0kU)zSGNp z`=>K%)#XIUlE-w~BS?pwZxu;xatfr7CG`89I1A`4;~hawoi~vxrvMOdSmxQ`h|7?P zGQoDc-6skMMlOKUfn z(6y8|E6&7CHNimCXU9Y! zcO4yLWjM%x|Gv3N1+n$g3|i>jf$J74Bo{}f#gV1;4#^HqSSLw!)Wj-GV=9bp-JL~? zpc7K_jMJQQk-fsHR_JoSytBCQSNm_;2yH+!hB)7IC9fdR-Ofb_pLk*8&x7X_rrh)5vfj3?c zyfN{5)3H11VQ zcdNf(!Q%S7-Gdf7_1w{<-E)?oO3tHS#6G|VU*QbOe(@>k{d@HDAy8$^kyQkNKk__` z{p`-N=Uff&;2E-^yM)j-Th`3eAyn{&h1O4X!2g9ehQppaoR0oK-Z%oTd!v|s5wt#1 zA9W+&QF1MfK6Dyr0M{_g+TamkeDpkb(uFinpIkDHIhQ*hL8fmhG+s=$xJHNeCU;mc z`hYux*%LESqb8CwlilEUqOu(}LTbWl3^IW6b;ELb?Feg*t=TV`fd-lQs20jo7wzf; zL+5RL?5L;yxVoWP#dh!1JT=9NM9>L^mOO8U18ARSJoq8lZuj4Z7lvPNN3OW0udj?y zTwJ%~7q7xMZ}=5?Gx(7`D}0$I5K>wlI?(B1P*7fL%>V!bs-Z2%%sd=Xw+xH`D5)@1 zRj)w=3FgpMaE%NmLMqgHKS{O7d2&2@rBDU3)i zmH(MHow)0%v%Hiaf4%=e_I6o%e)Zzw+12&S&UaUKWjroN)pRe1`k`YLx!-k`ReG@< zfzs2GRP1#XARE|w+M4Ytge6BybXfa+a?d4rDAp{&D{s+QSlu zKmLkgF^BF(mF-oqm8V9=*koi6jpod5xSGY8b-rNtAK(j?+#r$QkO1HR)Q3;=NwpCAtokWCADLA4mjEp~oYcrVAfr&uG1Y|%epNzS?`xAeRFrNSb literal 0 HcmV?d00001 diff --git a/temp/d/f/s_cache_df8e16882b112ce2c0739934bd19b578 b/temp/d/f/s_cache_df8e16882b112ce2c0739934bd19b578 new file mode 100644 index 0000000000000000000000000000000000000000..5ff626474c3ccef0b8d17f22f0c662fcdd615c96 GIT binary patch literal 34 ocmea?Vzg=1xh+N;fY`*`+}y~-(9DRfa7}lkkr%6_*R`z-0RGYqJOBUy literal 0 HcmV?d00001