- Create migration for global settings table and add google_ads_customer_id and google_ads_start_date columns to clients table. - Add migration to include product_url column in products_data table. - Insert demo data for campaigns, products, and their history for client 'pomysloweprezenty.pl'. - Implement client management interface with modals for adding and editing clients, including Google Ads Customer ID and data retrieval start date.
281 lines
11 KiB
Markdown
281 lines
11 KiB
Markdown
# adsPRO - System Zarządzania Reklamami Google ADS & Facebook ADS
|
|
|
|
## Opis projektu
|
|
adsPRO to narzędzie webowe (PHP) do zarządzania i automatyzacji kampanii reklamowych Google ADS (priorytet) oraz Facebook ADS (planowane). System umożliwia monitorowanie kampanii, zarządzanie produktami, analizę wydajności (ROAS, CTR, CPC) oraz automatyczne etykietowanie produktów (bestsellery, zombie itp.).
|
|
|
|
**URL:** https://adspro.projectpro.pl
|
|
**Hosting:** Hostido (shared hosting)
|
|
|
|
## Stack technologiczny
|
|
- **PHP 8.x** - czyste PHP z własną strukturą MVC (bez frameworka)
|
|
- **MySQL/MariaDB** - baza danych (Medoo ORM)
|
|
- **Google ADS API** - pobieranie danych kampanii i produktów (CRON)
|
|
- **Facebook ADS API** - planowane w przyszłości
|
|
- **CRON** - automatyczna synchronizacja danych
|
|
- **SCSS** - stylowanie (kompilacja do CSS)
|
|
- **jQuery 3.6** - interaktywność frontend
|
|
- **DataTables 2.1.7** - tabele z sortowaniem, filtrowaniem, paginacją
|
|
- **Highcharts** - wykresy wydajności
|
|
- **Select2** - zaawansowane selecty
|
|
- **Font Awesome** - ikony
|
|
|
|
## Struktura katalogów (nowa)
|
|
|
|
```
|
|
public_html/
|
|
├── index.php # Front controller + nowy router
|
|
├── .htaccess # Rewrite rules
|
|
├── .env # Konfiguracja (przyszłość - migracja z config.php)
|
|
├── config.php # Konfiguracja DB (obecna)
|
|
├── ajax.php # Ajax handler
|
|
├── api.php # API handler (Google ADS webhook)
|
|
├── cron.php # CRON handler
|
|
├── robots.txt
|
|
├── layout/
|
|
│ ├── favicon.png
|
|
│ ├── style.scss # Główne style (SCSS)
|
|
│ └── style.css # Skompilowane style
|
|
├── libraries/ # Biblioteki zewnętrzne
|
|
│ ├── medoo/
|
|
│ ├── phpmailer/
|
|
│ ├── select2/
|
|
│ ├── jquery-confirm/
|
|
│ ├── functions.js # Globalne funkcje JS
|
|
│ └── framework/ # Framework UI (skin, pluginy)
|
|
├── autoload/ # Kod PHP (MVC)
|
|
│ ├── class.S.php # Helper: sesje, requesty, narzędzia
|
|
│ ├── class.Tpl.php # Template engine
|
|
│ ├── class.Cache.php # Cache
|
|
│ ├── class.DbModel.php # Bazowy model DB
|
|
│ ├── class.Html.php # HTML helper
|
|
│ ├── controls/ # Kontrolery
|
|
│ │ ├── class.Site.php # Router (do przebudowy)
|
|
│ │ ├── class.Users.php # Logowanie, ustawienia
|
|
│ │ ├── class.Dashboard.php # NOWY - Dashboard główny
|
|
│ │ ├── class.Campaigns.php # Kampanie Google ADS
|
|
│ │ ├── class.Products.php # Produkty
|
|
│ │ ├── class.Allegro.php # Import Allegro
|
|
│ │ ├── class.Reports.php # NOWY - Raporty i analityka
|
|
│ │ ├── class.Api.php # Endpointy API
|
|
│ │ └── class.Cron.php # CRON joby
|
|
│ ├── factory/ # Modele danych (DB queries)
|
|
│ │ ├── class.Users.php
|
|
│ │ ├── class.Campaigns.php
|
|
│ │ ├── class.Products.php
|
|
│ │ └── class.Cron.php
|
|
│ └── view/ # View helpers
|
|
│ ├── class.Site.php # Renderer layoutu
|
|
│ ├── class.Users.php
|
|
│ └── class.Cron.php
|
|
├── templates/ # Szablony PHP
|
|
│ ├── site/
|
|
│ │ ├── layout-logged.php # Layout z sidebar (PRZEBUDOWA)
|
|
│ │ └── layout-unlogged.php # Layout logowania (PRZEBUDOWA)
|
|
│ ├── auth/
|
|
│ │ └── login.php # NOWY ekran logowania
|
|
│ ├── dashboard/
|
|
│ │ └── index.php # NOWY dashboard
|
|
│ ├── campaigns/
|
|
│ │ └── main_view.php # Widok kampanii
|
|
│ ├── products/
|
|
│ │ ├── main_view.php # Lista produktów
|
|
│ │ └── product_history.php # Historia produktu
|
|
│ ├── allegro/
|
|
│ │ └── main_view.php # Import Allegro
|
|
│ ├── reports/ # NOWE
|
|
│ │ └── index.php # Raporty
|
|
│ ├── users/
|
|
│ │ ├── login-form.php # Stary login (do usunięcia)
|
|
│ │ └── settings.php # Ustawienia użytkownika
|
|
│ └── html/ # Komponenty HTML
|
|
│ ├── button.php
|
|
│ ├── input.php
|
|
│ ├── select.php
|
|
│ └── ...
|
|
├── tools/
|
|
│ └── google-taxonomy.php
|
|
├── tmp/
|
|
└── docs/
|
|
└── PLAN.md
|
|
```
|
|
|
|
## Nowy system routingu
|
|
|
|
### Zasada działania
|
|
Zamiast obecnego `?module=X&action=Y` → czyste URLe obsługiwane przez `.htaccess` + nowy router w `class.Site.php`.
|
|
|
|
### Mapa URL
|
|
|
|
| URL | Kontroler | Metoda | Opis |
|
|
|-----|-----------|--------|------|
|
|
| `/login` | Users | login_form | Ekran logowania |
|
|
| `/logout` | Users | logout | Wylogowanie |
|
|
| `/` | Dashboard | index | Dashboard główny |
|
|
| `/campaigns` | Campaigns | main_view | Lista kampanii |
|
|
| `/campaigns/history/{id}` | Campaigns | history | Historia kampanii |
|
|
| `/products` | Products | main_view | Lista produktów |
|
|
| `/products/history/{id}` | Products | product_history | Historia produktu |
|
|
| `/allegro` | Allegro | main_view | Import Allegro |
|
|
| `/reports` | Reports | index | Raporty |
|
|
| `/settings` | Users | settings | Ustawienia konta |
|
|
| `/api/*` | Api | * | Endpointy API |
|
|
| `/cron/*` | Cron | * | CRON joby |
|
|
|
|
### Nowy .htaccess
|
|
```apache
|
|
RewriteEngine On
|
|
RewriteBase /
|
|
|
|
# Statyczne zasoby - pomijaj
|
|
RewriteCond %{REQUEST_URI} ^/(libraries|layout|upload|temp)/ [NC]
|
|
RewriteRule ^ - [L]
|
|
|
|
# Wszystko inne → index.php
|
|
RewriteCond %{REQUEST_FILENAME} !-f
|
|
RewriteCond %{REQUEST_FILENAME} !-d
|
|
RewriteRule ^(.*)$ index.php [L,QSA]
|
|
```
|
|
|
|
### Nowy router (class.Site.php)
|
|
```php
|
|
// Parsowanie URL z $_SERVER['REQUEST_URI']
|
|
// Mapowanie: /segment1/segment2/segment3 → kontroler/akcja/parametry
|
|
// Fallback na dashboard dla zalogowanych, login dla niezalogowanych
|
|
```
|
|
|
|
## Główne funkcje
|
|
|
|
### 1. Nowy ekran logowania
|
|
- Nowoczesny design: podzielony ekran (lewa strona - branding/grafika, prawa - formularz)
|
|
- Logo "adsPRO" z subtitlem
|
|
- Pola: email + hasło
|
|
- Checkbox "Zapamiętaj mnie"
|
|
- Walidacja AJAX
|
|
- Animacje przejścia
|
|
- Responsywność (mobile: tylko formularz)
|
|
|
|
### 2. Nowy layout z menu bocznym (sidebar)
|
|
- **Sidebar (lewa strona, 260px):**
|
|
- Logo "adsPRO" na górze
|
|
- Menu nawigacyjne z ikonami Font Awesome:
|
|
- 📊 Dashboard (`/`)
|
|
- 📢 Kampanie (`/campaigns`)
|
|
- 📦 Produkty (`/products`)
|
|
- 📥 Allegro import (`/allegro`)
|
|
- 📈 Raporty (`/reports`)
|
|
- ⚙️ Ustawienia (`/settings`)
|
|
- Aktywny element podświetlony
|
|
- Możliwość zwijania sidebar (collapsed → same ikony, 60px)
|
|
- Na dole: info o zalogowanym użytkowniku + przycisk wylogowania
|
|
- **Top bar (nad contentem):**
|
|
- Przycisk hamburger (toggle sidebar)
|
|
- Breadcrumbs (ścieżka nawigacji)
|
|
- Szybkie akcje / notyfikacje (przyszłość)
|
|
- **Content area:**
|
|
- Pełna szerokość minus sidebar
|
|
- Padding 25px
|
|
- Tło #F4F6F9 (jaśniejsze od obecnego)
|
|
|
|
### 3. Dashboard (NOWY)
|
|
- Kafelki podsumowujące (karty):
|
|
- Łączna liczba kampanii
|
|
- Łączna liczba produktów
|
|
- Średni ROAS (30 dni)
|
|
- Łączne wydatki (30 dni)
|
|
- Wykres trendu ROAS (ostatnie 30 dni)
|
|
- Lista ostatnio zmodyfikowanych kampanii
|
|
- Produkty wymagające uwagi (niski ROAS, zombie)
|
|
|
|
### 4. Zarządzanie kampaniami Google ADS
|
|
- Wybór klienta (select)
|
|
- Lista kampanii z metrykami (DataTables)
|
|
- Historia kampanii z wykresem Highcharts
|
|
- Metryki: ROAS, budżet, wydatki, wartość konwersji, strategia bidding
|
|
- Usuwanie kampanii i wpisów historii
|
|
- Komentarze do kampanii
|
|
|
|
### 5. Zarządzanie produktami
|
|
- Wybór klienta
|
|
- Konfiguracja min. ROAS dla bestsellerów
|
|
- Tabela produktów z metrykami:
|
|
- Wyświetlenia, kliknięcia, CTR, koszt, CPC
|
|
- Konwersje, wartość konwersji, ROAS
|
|
- Custom labels (bestseller/zombie/deleted/pla/paused)
|
|
- Edycja inline (min_roas, custom_label)
|
|
- Edycja produktu w modalu (tytuł, opis, kategoria Google)
|
|
- Historia produktu z wykresem
|
|
- Bulk delete zaznaczonych produktów
|
|
|
|
### 6. Import Allegro
|
|
- Upload pliku CSV
|
|
- Automatyczne mapowanie ofert
|
|
- Raport importu (dodane, zaktualizowane)
|
|
|
|
### 7. Raporty (NOWY - przyszłość)
|
|
- Raport wydajności kampanii
|
|
- Raport produktów (bestsellery vs zombie)
|
|
- Eksport do Excel
|
|
- Porównanie okresów
|
|
|
|
### 8. Ustawienia
|
|
- Dane konta (email)
|
|
- Zmiana hasła
|
|
- Konfiguracja Pushover (powiadomienia)
|
|
- Klucze API (przyszłość: Google ADS, Facebook ADS)
|
|
|
|
### 9. CRON - synchronizacja danych
|
|
- `cron_products` - synchronizacja produktów z Google ADS
|
|
- `cron_products_history_30` - historia 30-dniowa produktów
|
|
- `cron_xml` - generowanie XML
|
|
- `cron_phrases` - synchronizacja fraz
|
|
- `cron_phrases_history_30` - historia 30-dniowa fraz
|
|
|
|
## Plan implementacji
|
|
|
|
| Etap | Zakres | Priorytet | Pliki |
|
|
|------|--------|-----------|-------|
|
|
| **1. Nowy routing** | Przebudowa routera, nowy .htaccess, parsowanie czystych URL | 🔴 Wysoki | `.htaccess`, `index.php`, `controls/class.Site.php` |
|
|
| **2. Nowy layout (sidebar)** | Layout z bocznym menu, top bar, responsywność | 🔴 Wysoki | `templates/site/layout-logged.php`, `layout/style.scss` |
|
|
| **3. Nowy ekran logowania** | Nowoczesny split-screen login, nowy layout-unlogged | 🔴 Wysoki | `templates/site/layout-unlogged.php`, `templates/auth/login.php`, `layout/style.scss` |
|
|
| **4. Dashboard** | Nowa strona startowa z podsumowaniem | 🟡 Średni | `controls/class.Dashboard.php`, `templates/dashboard/index.php` |
|
|
| **5. Migracja kampanii** | Dostosowanie widoku kampanii do nowego routingu | 🟡 Średni | `controls/class.Campaigns.php`, `templates/campaigns/*` |
|
|
| **6. Migracja produktów** | Dostosowanie widoku produktów do nowego routingu | 🟡 Średni | `controls/class.Products.php`, `templates/products/*` |
|
|
| **7. Migracja Allegro** | Dostosowanie importu Allegro | 🟢 Niski | `controls/class.Allegro.php`, `templates/allegro/*` |
|
|
| **8. Moduł raportów** | Nowy moduł analityczny | 🟢 Niski | `controls/class.Reports.php`, `templates/reports/*` |
|
|
| **9. Facebook ADS** | Integracja z Facebook ADS API | 🔵 Przyszłość | Nowe kontrolery, factory, szablony |
|
|
|
|
## Kolorystyka i design
|
|
|
|
### Paleta kolorów
|
|
- **Primary (akcent):** `#6690F4` (niebieski - obecny)
|
|
- **Sidebar tło:** `#1E2A3A` (ciemny granat)
|
|
- **Sidebar tekst:** `#A8B7C7` (jasny szary)
|
|
- **Sidebar active:** `#6690F4` (primary)
|
|
- **Content tło:** `#F4F6F9` (jasnoszary)
|
|
- **Karty:** `#FFFFFF`
|
|
- **Tekst:** `#4E5E6A` (obecny)
|
|
- **Success:** `#57B951`
|
|
- **Danger:** `#CC0000`
|
|
- **Warning:** `#FF8C00`
|
|
|
|
### Typografia
|
|
- Font: Open Sans (obecny - zachowany)
|
|
- Rozmiar bazowy: 14px (sidebar), 15px (content)
|
|
|
|
## Bezpieczeństwo
|
|
- Hasła hashowane MD5 (obecne) → **TODO: migracja na bcrypt**
|
|
- Sesje PHP + cookie "zapamiętaj mnie"
|
|
- Prepared statements (Medoo ORM)
|
|
- htmlspecialchars() w szablonach
|
|
- **TODO: CSRF tokeny w formularzach**
|
|
- **TODO: migracja config.php → .env (z .htaccess deny)**
|
|
|
|
## Przyszłe rozszerzenia
|
|
- Facebook ADS API - zarządzanie kampaniami FB
|
|
- System powiadomień (Pushover + in-app)
|
|
- Wielojęzyczność (PL/EN)
|
|
- Role użytkowników (admin, manager, viewer)
|
|
- Automatyczne reguły (np. "jeśli ROAS < X → zmień label na zombie")
|
|
- Integracja z Google Merchant Center
|
|
- API REST do integracji z innymi systemami
|