← Torna ai documenti

VITTROSPLAT – API & Bootstrap Notes (v1)

> Stato: **work** | Data: 2025‑10‑02 | Ambito: vv_work

1) Architettura di base

**Entry‑point** (pagine e AJAX) includono **una sola volta** `lib/bootstrap.php`.

**Librerie** (in `inc/` o file "lib" non entry) **non** includono nulla: esportano funzioni/classi senza side‑effects.

Ordine di bootstrap (definitivo)

1. `config.php` (root) → sole **costanti** + log base + version info (nessuna funzione app)

2. `lib/db_utilities.php` → PDO & helper DB

3. `lib/helper.php` → utility pure (senza DB)

4. `lib/functions.php` → funzioni applicative (possono usare DB & helper)

5. `lib/config.php` → sessione/ruoli/utente, auto BASE_URL / VV_ENV, **current_user()**

Motivazione: `lib/config.php` dipende da `vv_app_meta()` e da funzioni app; perciò va **dopo** `functions.php`.

---

2) File e responsabilità

**Regola**: evitare doppioni. Le funzioni devono vivere in **un solo** file; altrove solo `if (!function_exists(...))` come guardia.

---

3) Costanti principali (root `config.php`)

> `VV_ENV` viene determinata da `lib/config.php` (auto in base allo slug: `_test`, `_work`, default `prod`).

---

4) Sessione & Utente (in `lib/config.php`)

**Helper ruoli consigliati** (unificati su `current_user()`):


function current_user_role(): string { return current_role(); }
function is_admin(): bool { return role_gte('admin'); }
function can_edit_post(array $post): bool {
  if (is_admin()) return true;
  $u = current_user();
  if (!$u) return false;
  return (int)($post['autore_id'] ?? -1) === (int)($u['id'] ?? -2);
}

> Collocazione: **`lib/config.php`** (non in `helpers.php`). Così c’è **una sola fonte di verità** per l’utente.

---

5) Utilities (in `lib/helper.php`)

> **Evita duplicati**: `h()` deve esistere in un solo file (qui) con guardia `if (!function_exists('h')) { ... }`.

---

6) Funzioni applicative (in `lib/functions.php`)

> Se una funzione usa il DB o meta app, sta **qui**. `helpers.php` resta “pure”.

---

7) Visibilità post (in `lib/config.php`)

---

8) Convenzioni di include

Controlli automatici consigliati:


grep -RInE 'lib/(db_utilities|functions)\.php' . | grep -vE 'bootstrap|\.bak'
# Nessuna lib deve includere questi file.

---

9) Best practices

```php

if (!function_exists('debug_log')) { function debug_log(...) { ... } }

```

---

10) Esempi d’uso

Recupero lista post (guest)


require_once __DIR__ . '/lib/bootstrap.php';
require_once __DIR__ . '/inc/diario_list_lib.php';

$params = [ 'q' => $_GET['q'] ?? '', 'limit' => 30, 'page' => 1 ];
$data = vv_fetch_posts($params);
foreach ($data['rows'] as $r) {
  vv_render_post_item($r);
}

Controllo permessi


require_once __DIR__ . '/lib/bootstrap.php';
require_role('editor');

Log applicativo


require_once __DIR__ . '/lib/bootstrap.php';
debug_log('azione: salva_post', ['post_id'=>$id, 'utente'=>current_user()]);

---

11) TODO / Pulizia tecnica

---

12) Checklist migrazione (sicura)

1) **Backup** (`tar -caf ... vittrosviaggi_work`).

2) Allinea `lib/bootstrap.php` all’ordine sopra.

3) Rimuovi include diretti di `lib/functions.php` / `lib/db_utilities.php` dagli entry‑point → usa solo `bootstrap.php`.

4) Rimuovi `bootstrap.php` da **librerie**.

5) Dedupe funzioni (h, vv_base_url, vv_enqueue_theme_css, debug_log) con guardie e posizione unica.

6) Smoke test: guest, `modifica_post.php`, `media_popup.php`, 2 AJAX core.

---

13) Standard di codice

---

_Questa pagina è pensata per essere allegata alle “Developing Notes” del progetto e pubblicata come README della piattaforma **VITTROSPLAT**._