UNIVERSITÀ DEGLI STUDI DI PADOVA
Facoltà di Scienze MM.FF.NN.
Corso di Laurea in
Informatica
il tuo ricettario online
Relatore:
Dott.ssa Ombretta Gaggi
Laureando:
Emanuele Bottos
matricola: 525804
Indice
1 Introduzione
1.1 Funzionalità del software Magikchef
1.2 Obiettivi . . . . . . . . . . . . . . . .
1.3 Analisi di siti competitor . . . . . . .
1.3.1 GialloZafferano.it . . . . . . .
1.3.2 Tastespotting.com . . . . . .
1.3.3 BigOven.com . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
8
9
10
10
11
12
2 Analisi dei requisiti
2.1 Requisiti Utente . . . . . .
2.2 Descrizione dei prodotti . .
2.2.1 Ingredienti . . . . .
2.2.2 Vini . . . . . . . . .
2.2.3 Ricette . . . . . . .
2.2.4 Basi di preparazione
2.3 Struttura del portale . . . .
2.3.1 Lato Amministrativo
2.3.2 Lato Pubblico . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
24
24
25
26
27
28
28
31
.
.
.
.
.
.
.
.
.
.
.
.
.
33
33
35
37
40
42
44
47
47
48
49
51
51
52
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Progettazione
3.1 Struttura del database . . . . . . . . .
3.1.1 Ingredienti . . . . . . . . . . .
3.1.2 Ricette . . . . . . . . . . . . .
3.1.3 Dipendenze ingredienti e ricette
3.1.4 Supporto al social networking .
3.2 Gestione degli inviti . . . . . . . . . .
3.3 Gestione dei prodotti . . . . . . . . . .
3.3.1 Ricerca . . . . . . . . . . . . .
3.3.2 Ricerca avanzata . . . . . . . .
3.3.3 Inserimento . . . . . . . . . . .
3.3.4 Modifica . . . . . . . . . . . . .
3.3.5 Eliminazione . . . . . . . . . .
3.3.6 Approvazione . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
INDICE
3.4
3.3.7 Associazione a sponsor . . . . . . . .
Gestione commenti, voti e prodotti favoriti
3.4.1 Visualizzazione utenti . . . . . . . .
3.4.2 Gestione profilo . . . . . . . . . . . .
3.4.3 Votazione . . . . . . . . . . . . . . .
3.4.4 Preferiti . . . . . . . . . . . . . . . .
3.4.5 Inserimento commento . . . . . . . .
3.4.6 Eliminazione commento . . . . . . .
3.4.7 Lista della spesa . . . . . . . . . . .
3.4.8 Attivazione utente . . . . . . . . . .
3.4.9 Eliminazione utente . . . . . . . . .
4 Sviluppo
4.1 Scelte tecnologiche . . . . . .
4.1.1 PHP . . . . . . . . . .
4.1.2 MySQL . . . . . . . .
4.1.3 AJAX . . . . . . . . .
4.1.4 JQuery . . . . . . . .
4.1.5 Smarty . . . . . . . .
4.2 Pattern MVC . . . . . . . . .
4.3 Descrizione delle classi . . . .
4.3.1 Parte Amministrativa
4.3.2 Parte Pubblica . . . .
5 Test
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
52
55
55
56
56
57
57
58
58
59
60
.
.
.
.
.
.
.
.
.
.
61
61
61
62
62
62
63
64
66
66
80
89
6 Conclusioni
91
6.1 Sviluppi Futuri . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Elenco delle figure
1.1
Screenshot software MagikChef . . . . . . . . . . . . . . . . .
8
2.1
2.2
Struttura lato Amministrativo MagikChef . . . . . . . . . . .
Struttura lato Pubblico MagikChef . . . . . . . . . . . . . . .
29
31
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
Esempio di internazionalizzazione del database . . . .
Struttura database - ingredienti . . . . . . . . . . . . .
Struttura database - ricette - parte 1/2 . . . . . . . . .
Struttura database - ricette - parte 2/2 . . . . . . . . .
Struttura database - dipendenze ingredienti e ricette .
Struttura database - parte sociale . . . . . . . . . . . .
Diagramma degli stati degli inviti . . . . . . . . . . . .
Screenshot Gestione inviti amministrativo MagikChef
Use Case - Gestione ricette . . . . . . . . . . . . . . .
Flow Chart - Inserimento nuova ricetta . . . . . . . . .
Screenshot modifica di una ricetta . . . . . . . . . . .
Use Case - Gestione parte social del portale . . . . . .
Screenshot Visualizzazione profilo utente . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
33
35
37
38
40
42
44
46
47
50
54
55
60
4.1
Schema Pattern MVC . . . . . . . . . . . . . . . . . . . . . .
64
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
ELENCO DELLE FIGURE
Capitolo 1
Introduzione
MagikChef è un software offine, distribuito su cd-rom per piattaforma Windows, creato per cuochi, pasticcieri, food and beverage manager, insegnanti
ed in generale tutti i settori di ristorazione. Un applicativo completo per la
gestione del ricettario di cucina, che offre la possibilità di consultare ricette
ideate da Etoile ma anche di gestire, modificare e archiviare le ricette personali in modo professionale.
Il committente, Boscolo Etoile Academy, ha richiesto lo sviluppo dell’applicativo in versione web in sostituzione della versione cdrom e soprattutto
semplificato nel suo utilizzo, in modo da potersi rivolgere non solo al settore
professionale ma anche agli appassionati di cucina.
L’applicativo web è stato sviluppato in modo da diventare un vero e proprio social network, dove, oltre a gestire le proprie ricette, gli utenti possano
condividere, commentare e valutare ricette, consigli ed osservazioni di tutti
gli altri utilizzatori.
In prospettiva, infine, il progetto dovrà essere integrato con il sito e-commerce
Boscolo Etoile Academy in modo che da ogni singola scheda del ricettario
possa essere suggerito ed effettuabile un acquisto.
Tale progetto è stato sviluppato durante l’attività di stage presso l’azienda
ospitante Aleaweb di Maniago (PN) che da 10 anni opera nel mondo del
web e nelle soluzioni professionali per la vendita ed il commercio online oltre
che in numerosi altri servizi riguardanti l’informatica. Essa è composta di
una squadra completa di consulenti, programmatori, grafici, editor testuali
e commerciali ed è stata d’appoggio nello sviluppo di tale progetto durante
la fase di analisi e d’aiuto per le scelte progettuali e la fornitura di materiale
per lo studio e lo sviluppo dell’applicazione.
8
Introduzione
1.1
Funzionalità del software Magikchef
Il programma è stato realizzato nei primi anni 2000 ed è stato sviluppato
attraverso il linguaggio di programmazione Delphi.
Si presenta come un normale software gestionale, dove tabelle e menù a
tendina primeggiano nell’intera struttura grafica del programma. Il primo
impatto non è dei più rassicuranti dovuto alla grafica per niente intuitiva
ed all’enorme quantità di azioni possibili strutturate in modo disordinato
e difficilmente comprensibile. I termini utilizzati sono strettamente tecnici,
questo restringe il campo dell’utente medio al solo professionista nel campo
della ristorazione.
Fig. 1.1: Screenshot software MagikChef
Le principali funzionalità del software sono:
• consultazione di circa 3000 ingredienti, 1500 ricette e 500 vini
• inserimento, modifica e archivio di ricette, ingredienti e vini
• calcolo ed analisi di valori nutrizionali e costi delle ricette
• motore di ricerca avanzata per ricette secondo svariati parametri
• realizzazione di menù personalizzati
Obiettivi
9
• calcolo ed analisi per le attrezzature necessarie per banchetti e catering
• report di stampa per ricette, menù e liste di spesa globali e di settore
• possibilità di importazione ed esportazione delle ricette
L’applicativo Magikchef permette all’utente di modificare la gran parte delle
impostazioni, quasi nulla è vincolato. É possibile infatti modificare tutti i
tipi di categorizzazione delle ricette, questa opzione poteva sembrare vantaggiosa nell’utilizzo in modo strettamente privato per un singolo utente,
ma, avendo voluto creare un ricettario con l’aiuto di svariati professionisti,
importando quindi in un unico database tutte le ricette con relative personalizzazioni, il risultato finale è stata la perdita di informazioni riguardo alle
categorie delle ricette.
Il database, inoltre, è stato progettato senza alcun vincolo di integrità,
ottendo quindi multeplici dati corrotti, incoerenti e duplicati.
1.2
Obiettivi
Dopo un attenta analisi del software MagikChef ed incontri con il proponente
è stato scelto, in accordo con l’azienda ospitante lo stage, di stabilire come
obiettivi principali i seguenti punti:
• Riprogettazione di un database normalizzato
creazione e sviluppo di un database normalizzato in modo da garantire integrità e coerenza dei dati. La progettazione del database dovrà
prevedere l’obbligo di importazione della maggiorparte dei dati presenti del vecchio sistema. Inoltre il database, dovrà rispettare le norme
di progetto stabilite dall’azienda ospitante ed essere corredato da una
buona documentazione in modo da poter garantire un più semplice
sviluppo futuro da parte di terze persone.
• Sviluppo di un BackOffice personalizzato
creazione di un amministrativo al fine di poter gestire non solo i dati
inseriti dagli utenti, ma utile a riorganizzare l’archivio presente. Dovranno quindi essere integrate delle funzionalità specifiche per aiutare
l’amministratore a controllare e migliorare la qualità e la correttezza
dei numerosi dati corrotti e incoerenti presenti nel vecchio sistema.
L’amministrativo dovrà inoltre integrarsi con il già presente sistema
backoffice dell’azienda Aleaweb, dovrà quindi essere strutturato come
un modulo del backoffice generale.
• Semplificazione delle funzionalità
progettazione dell’applicativo in modo da garantire un’ottima usabilità anche da parte di utenti non esperti (sia per quanto riguardo la
ristorazione, sia per quanto riguarda l’informatica). Verranno quindi
10
Introduzione
inizialmente tralasciate alcune funzionalità del vecchio sistema offline
(come la creazione di menù o la gestione dei costi per le risorse per
banchetti e catering) in modo da poter garantire un maggiore facilità
di utilizzo sia dal lato amministrativo che da quello pubblico.
• Sviluppo di un sistema di inviti
inizialmente il portale web, sarà accessibile esclusivamente attraverso
un invito elettronico, indirizzato principalmente verso i partecipanti
alla scuola di cucina professionale Boscolo Etoile Academy. Questa
scelta è stata decisa per aver un primo impatto da una fascia di utenti
esperti nel settore della ristorazione, in modo da poter verificare ed
analizzare le varie reazioni ed apportare le relative modifiche prima di
una prematura presentazione al grande pubblico. Dovrà quindi essere
costrutito un sistema per la generazione automatica di inviti, possibili
promozioni e una gestione per gli utenti invitati e richiedenti.
• Sviluppo dell’applicazione lato pubblico
creazione di una parte pubblica, ossia della zona accessibile a tutti
gli utenti. Questa sezione dovrà permettere all’utente di inserire, modificare ed archiviare ricette ed ingredienti personali. Inoltre dovrà
contenere le principali funzionalità di un social network quali la possibilità di commentare, votare ed visualizzare ricette, ingredienti e profili
degli altri utenti iscritti al portale.
• Progettazione per una futura gestione di sponsors
sviluppo di un sistema di base per poter associare i prodotti dell’applicazione web (ricette, vini e ingredienti) ad uno o più sponsor, in modo
da poter creare in un futuro un applicazione collegata con l’attuale sito e-commerce Boscolo Etoile Academy, partendo già da un prodotto
strutturato verso quell’obbiettivo.
1.3
Analisi di siti competitor
Oltre ad analizzare il software offline MagikChef si è deciso di studiare le
soluzioni adottate da siti web operanti nel settore gastronomico.
Tra i numerosi portali di cucina presenti nel web sono stati approfonditi maggiormente tre possibili competitor scelti per l’utilizzo della lingua
italiana (GialloZafferano.it), per il maggior numero di visite giornaliere
(tastespotting.com) e per le migliori soluzioni adottate (bigoven.com).
1.3.1
GialloZafferano.it
• Descrizione:
Nato nel 2006, dalla passione per la cucina dei soci fondatori, Giallozafferano è diventato in breve tempo il più autorevole e seguito portale
Analisi di siti competitor
11
italiano di gastronomia con oltre 600.000 utenti unici e più di 3.000.000
pagine visitate mensilmente.
Non sono solo le ricette, anzi le foto-ricette, a caratterizzare Giallozafferano ma, anche, notizie e novità dal mondo gastronomico, e una
delle comunità online più attiva del settore.
Ogni ricetta è fotografata passa per passo, la scuola di cucina segue
l’aspirante cuoco in ogni passaggio delle preparazioni, il blog pubblica
notizie, curiosità e informazioni, le guide sempre aggiornate offrono innumerevoli spunti e idee, e ovviamente la community, con il suo forum
e la chat, sono diventati la casa di tantissimi appassionati gastronomi.
• Fattori Positivi:
– Permette a ciascun utente di crearsi il proprio blog di cucina.
– Dispone di un buon archivio di ricette ben strutturato, corredato
anche di una sezione video.
• Fattori Negativi:
– La community è vincolata al solo commento delle ricette o nella
pubblicazione di messaggi nel forum, l’inserimento delle ricette e
limitato nel proprio blog, godendo quindi di scarsa visibilità.
1.3.2
Tastespotting.com
• Descrizione:
Immagini, ricette, articoli e link come post-it su una parete della vostra cucina: questa è l’immagine che vogliono dare del loro servizio
i creatori di Tastespotting, una sorta di social network come Digg in
cui i voti espressi dagli utenti fanno salire o scendere in classifica le
segnalazioni di altri utenti.
Tastespotting è quindi un succulento aggregatore di food blogs, che
non mancherà di suggerire qualche peccato di gola.
12
Introduzione
• Fattori Positivi:
– Sito semplice ed accativante, induce l’utente ad esplorarlo.
– Enorme archivio di ricette.
• Fattori Negativi:
– Scarsa categorizzazione delle ricette.
– Le ricette provengono da blog differenti e non possono essere
gestite.
– Scarsa possibilità di comunicare con il proprietario della ricetta.
1.3.3
BigOven.com
• Descrizione:
Ogni utente iscritto su BigOven può creare le proprie ricette, condividerle con gli altri, apprendere da altri utenti i segreti dei fornelli,
scoprire nuovi piatti, e scambiarsi opinioni, trucchi ed ovviamente ricette.
E poi, un sito con ben oltre 170.000 ricette da sfogliare, tutte ben
catalogate per categoria e corredate di foto e video, si fa ben piacere
anche senza prendere in considerazione il suo lato sociale.
Da questo punto di vista poi offre gli stessi strumenti sociali degli altri social network tipo Facebook, come ad esempio la condivisione, i
commenti, e la partecipazione a gruppi tematici.
• Fattori Positivi:
– Ottima categorizzazione di ricette.
– Ottima gestione della componente sociale con numerose interazioni con i principali social network, quali facebook e twitter.
– Sezione video delle ricette.
• Fattori Negativi:
– Nessuna informazioni negativa è sicuramente il portale web migliore nel settore.
Capitolo 2
Analisi dei requisiti
2.1
Requisiti Utente
I requisiti di seguito descritti sono emersi tramite gli incontri con il proponente, l’analisi della struttura e delle funzionalità del vecchio software
MagikChef ed il confronto con i siti competitor.
Di tutti i requisiti raccolti sono stati preferiti quelli riguardanti la parte di
gestione delle ricette ed ingredienti, tralasciando inizialmente la componente
sociale del portale. Questa scelta è stata presa, in accordo con il proponente,
a causa della corposa quantità di lavoro ed il limitato tempo a disposizione.
Si definisce requisito una condizione o una capacità richiesta da un utente
per risolvere un problema. Per ciascun requisito è stato attribuito un tipo
(funzionale, qualità o vincolo) ed una priorità (obbligatoria o facoltativa).
I requisiti funzionali determinano quali funzioni deve fornire il sistema per
soddisfare determinati bisogni degli utenti utilizzatori, mentre i requisiti non
funzionali riguardano aspetti di qualità come affidabilità, usabilità, accessibilità ed efficienza.
Per requisito obbligatorio si intende una richiesta che deve essere assolutamente soddisfatta, irrinunciabile, per facoltativo un requisito non strettamente necessario ma che dà un valore aggiunto al prodotto finale.
Req 1 - Gestione degli ingredienti (lato amministrativo)
• Req 1.1 - Ricerca
Descrizione: Visualizzazione degli ingredienti tramite una lista ordinabile con la possibilità di filtrarli per nome, tipologia, sponsor e stato
di attivazione tramite una ricerca.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 1.2 - Visualizzazione
Descrizione: Visualizzazione dell’ingrediente selezionato ed i suoi re-
14
Analisi dei requisiti
lativi attributi.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 1.3 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di un ingrediente
ed i suoi relativi attributi.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 1.4 - Associazione a sponsor
Descrizione: Associazione e deassociazione di un ingrediente ad uno o
più sponsor.
Tipo: Funzionale.
Priorità: Obbligatorio.
Req 2 - Gestione delle categorie degli ingredienti (lato
amministrativo)
• Req 2.1 - Ricerca
Descrizione: Visualizzazione delle categorie degli ingredienti in una
lista ordinabile con la possibilità di filtrarli per nome.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 2.2 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di un attributo di
una categoria relativa agli ingredienti.
Tipo: Funzionale.
Priorità: Obbligatorio.
Req 3 - Gestione report degli ingredienti (lato amministrativo)
• Req 3.1 - Ricerca
Descrizione: Visualizzazione in una lista ordinabile degli ingredienti
suggeriti/inseriti dagli utenti, con la possibilità di filtrarli per nome.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 3.2 - Approvazione
Descrizione: Approvazione o ignoramento di un ingrediente inserito
dall’utente. Nel primo caso l’amministratore dovrà verificare la correttezza degli attributi del relativo prodotto.
Tipo: Funzionale.
Priorità: Obbligatorio.
Requisiti Utente
15
Req 4 - Gestione dei vini (lato amministrativo)
• Req 4.1 - Ricerca
Descrizione: Visualizzazione in una lista ordinabile dei vini con la
possibilità di filtrarli per nome, per sponsor e per stato di attivazione.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 4.2 - Visualizzazione
Descrizione: Visualizzazione del vino selezionato ed i suoi relativi attributi.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 4.3 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di un vino ed i suoi
relativi attributi.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 4.4 - Associazione a sponsor
Descrizione: Associazione e de associazione di un vino ad uno o più
sponsor.
Tipo: Funzionale.
Priorità: Obbligatorio.
Req 5 - Gestione delle ricette (lato amministrativo)
• Req 5.1 - Ricerca
Descrizione: Visualizzazione in una lista ordinabile dei ricette con
la possibilità di filtrarle per nome, tipologia, sponsor e per stato di
attivazione.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 5.2 - Ricerca Avanzata
Descrizione: ricerca avanzata delle ricette con la possibilità di applicare i seguenti filtri: nome, categoria(tipologia, tipo di portata, specifica
di portata), ingredienti presenti (o meno) nella ricetta, numero di porzioni, difficoltà, tempo di cottura, stagione, paternità, vino, tag.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 5.3 - Visualizzazione
Descrizione: Visualizzazione della ricetta selezionata ed i suoi relativi
attributi.
16
Analisi dei requisiti
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 5.4 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di una ricetta ed i
suoi relativi attributi.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 5.5 - Associazione a sponsor
Descrizione: Associazione e de associazione di una ricetta ad uno o
più sponsor.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 5.6 - Photogallery
Descrizione: Creazione e gestione (inserimento, eliminazione e ordinamento immagini) di una photogallery relativa alla ricetta.
Tipo: Funzionale.
Priorità: Obbligatorio
Req 6 - Gestione delle categorie delle ricette(lato
amministrativo)
• Req 6.1 - Ricerca
Descrizione: Visualizzazione delle categorie delle ricette in una lista
ordinabile con la possibilità di filtrarli per nome.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 6.2 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di un attributo di
una categoria relativa alle ricette.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 6.3 - Gestione Relazioni
Descrizione: Gestione delle relazioni padre/figlio per le categorie (tipologia, tipo di portata e specifica di portata).
Tipo: Funzionale.
Priorità: Facoltativo.
Req 7 - Gestione delle Basi di Preparazione (lato amministrativo)
• Req 7.1 - Ricerca
Descrizione: Visualizzazione delle basi di preparazione, in una lista
Requisiti Utente
17
ordinabile con la possibilità di filtrarle per nome, tipologia ricetta e
tipologia ingrediente.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 7.2 - Visualizzazione
Descrizione: Visualizzazione della base di preparazione con gli attributi come ingrediente o ricetta.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 7.3 - Inserimento ed eliminazione
Descrizione: Inserimento di una nuova base di preparazione da un
ingrediente o ricetta preesistente ( associandone i relativi attributi
mancanti) verrà creata una associazione ricetta/ingrediente. Nel caso
dell’eliminazione verrà cancellata solamente l’associazione ricetta/ingrediente.
Tipo: Funzionale.
Priorità: Obbligatorio.
Req 8 - Gestione degli sponsors (lato amministrativo)
• Req 8.1 - Ricerca
Descrizione: Visualizzazione degli sponsors, in una lista ordinabile con
la possibilità di filtrarli per nome.
Tipo: Funzionale.
Priorità: Facoltativo.
• Req 8.2 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di uno sponsor.
Tipo: Funzionale.
Priorità: Facoltativo.
Req 9 - Gestione degli inviti (lato amministrativo)
• Req 9.1 - Visualizzazione utenti
Descrizione: Visualizzazione degli utenti non attivi tramite una lista
ordinabile con la possibilità di filtrarli per nome e stato.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 9.2 - Modifica ed eliminazione utente
Descrizione: Modifica dello stato ed eliminazione di un utente non
attivo.
Tipo: Funzionale.
Priorità: Obbligatorio.
18
Analisi dei requisiti
• Req 9.3 - Spedizione inviti
Descrizione: Spedizione degli inviti ad uno o più indirizzi e-mail inseriti dall’amministratore.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 9.4 - Gestione Promozioni
Descrizione: Creazione, attivazione e disattivazione di una o più promozioni.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 9.5 - Gestione testo email
Descrizione: Possibilità di modificare oggetto e testo delle mail relative
agli inviti ed alle promozioni.
Tipo: Funzionale.
Priorità: Facoltativo.
Req 10 - Registrazione e Login (lato pubblico)
• Req 10.1 - Login
Descrizione: Accesso al portale tramite l’inserimento di username e
password.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 10.2 - Invito
Descrizione: Accesso al portale tramite le credenziali ricevute attraverso un invito via posta elettronica.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 10.3 - Promozione
Descrizione: Accesso al portale tramite il codice promozionale.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 10.3 - Richiesta d’invito
Descrizione: Gestione di un form per la richiesta di invito al portale
tramite l’inserimento dei propri dati.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 10.4 - Registrazione
Descrizione: Registrazione al portale tramite l’inserimento delle proprie credenziali dopo aver effettuato l’accesso tramite invito o codice
Requisiti Utente
19
promozionale.
Tipo: Funzionale.
Priorità: Obbligatorio.
Req 11 - Gestione Profilo (lato pubblico)
• Req 11.1 - Modifica credenziali
Descrizione: Modifica delle proprie credenziali quali nome, email, password ecc...
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 11.2 - Upload foto
Descrizione: Upload e modifica di una immagine da utilizzare come
foto profilo.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 11.3 - Visualizzazione utenti
Descrizione: Visualizzazione dei profili degli utenti con relative informazioni riguardanti le ricette personali, preferite ed ingredienti privati.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 11.4 - Riassunto attività personali
Descrizione: Pannello con l’elenco delle proprie ricette ed ingredienti
personali e preferiti con la possibilità modificare tali attributi e filtrarli
per nome.
Tipo: Funzionale.
Priorità: Obbligatorio.
Req 12 - Gestione ingredienti (lato pubblico)
• Req 12.1 - Ricerca
Descrizione: Visualizzazione degli ingredienti (propri ed approvati)
con la possibilità di filtrarli per nome.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 12.2 - Visualizzazione
Descrizione: Visualizzazione dell’ingrediente selezionato ed i suoi relativi attributi. Tipo: Funzionale. Priorità: Obbligatorio.
• Req 12.3 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di un ingrediente
personale ed i suoi relativi attributi.
Tipo: Funzionale
Priorità: Obbligatorio.
20
Analisi dei requisiti
• Req 12.4 - Inserimento veloce
Descrizione: Inserimento di un proprio ingrediente durante la compilazione della lista degli ingredienti di una propria ricetta.
Tipo: Funzionale.
Priorità: Obbligatorio.
Req 13 - Gestione delle ricette (lato pubblico)
• Req 13.1 - Ricerca
Descrizione: Visualizzazione delle ricette con la possibilità di filtrarle
per nome.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 13.2 - Ricerca Avanzata
Descrizione: Ricerca avanzata delle ricette con la possibilità di applicare i seguenti filtri: nome, categoria(tipologia, tipo di portata, specifica di portata), ingredienti presenti (o meno) nella ricetta, numero di
porzioni, difficoltà, tempo di cottura, stagione, vino.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 13.3 - Visualizzazione
Descrizione: Visualizzazione della ricetta selezionata ed i suoi relativi
attributi.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 13.4 - Inserimento, modifica ed eliminazione
Descrizione: Inserimento, modifica ed eliminazione di una ricetta personale ed i suoi relativi attributi.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 13.5 - Preferiti
Descrizione: Inserimento ed eliminazione di una ricetta tra le proprie
preferite.
Tipo: Funzionale.
Priorità: Obbligatorio.
• Req 13.6 - Lista della spesa
Descrizione: Inserimento ed eliminazione di una ricetta dalla propria
lista della spesa.
Tipo: Funzionale.
Priorità: Facoltativo.
Requisiti Utente
21
• Req 13.7 - Commenti
Descrizione: Inserimento ed eliminazione di un proprio commento relativo ad una ricetta. Nel caso la ricetta appartenga all’utente, il
permesso di cancellazione si estende per tutti i commenti.
Tipo: Funzionale.
Priorità: Facoltativo.
• Req 13.8 - Votazione
Descrizione: Possibilità di assegnazione giornaliera di un voto ad ogni
ricetta.
Tipo: Funzionale. Priorità: Facoltativo.
• Req 13.9 - Visualizzazione Migliori Ricette
Descrizione: Visualizzazione delle ricette con votazione più alta in
homepage.
Tipo: Funzionale.
Priorità: Facoltativo.
Req 14 - Gestione della lista della spesa (lato pubblico)
• Req 14.1 - Visualizzazione
Descrizione: Visualizzazione delle ricette presenti nella lista della spesa personale, da tale lista è possibile eliminare una o più ricette presenti.
Tipo: Funzionale.
Priorità: Facoltativo.
• Req 14.2 - Calcolo della lista
Descrizione: Calcolo degli ingredienti (quantità e prezzo) necessari per
le ricette inserite nella lista della spesa personale.
Tipo: Funzionale.
Priorità: Facoltativo.
• Req 14.3 - Gestione Portate
Descrizione: Possibilità di decidere il numero delle portate per le ricette scelte nella lista della spesa e ricalcolarne quindi prezzo e quantità
degli ingredienti necessari.
Tipo: Funzionale.
Priorità: Facoltativo.
Req 15 - Sicurezza del portale
Descrizione: Il portale, sia nella parte amministrativa che in quella
pubblica, deve prevenire possibili attacchi esterni (prevalentemente
tramite SQL injection) ed essere privo di bug che possano rendere
accessibili dati sensibili.
Tipo: Qualità.
Priorità: Obbligatorio.
22
Analisi dei requisiti
Req 16 - Modularità della parte amministrativa
Descrizione: La parte amministrativa del portale deve essere integrata con il preesistente amministrativo e deve quindi rispettarne le
condizioni per preservarne l’integrità ed aver accesso alle funzionalità
integrate.
Tipo: Qualità.
Priorità: Obbligatorio.
Req 17 - Efficacia ed efficienza del portale
Descrizione: Il portale deve essere progettato in modo che gli utenti possano raggiungere facilmente tutte le informazioni, cercando di
spendere meno risorse possibili.
Tipo: Qualità.
Priorità: Obbligatorio.
Req 18 - Facilità di apprendimento
Descrizione: Il portale deve essere progettato in modo che l’utente medio possa apprenderne tutte le funzionalità in modo veloce ed
intuitivo.
Tipo: Qualità.
Priorità: Facoltativo.
Req 19 - Supporto ad un elevato carico di informazioni
Descrizione: Le query deve essere ottimizzate perché il sistema possa essere reattivo anche nel caso di un elevato numero di record da
analizzare.
Tipo: Qualità.
Priorità: Facoltativo.
Req 20 - PHP v5.0
Descrizione: Utilizzo del linguaggio di scripting interpretato PHP
versione 5.0.
Tipo: Vincolo.
Priorità: Obbligatorio.
Req 21 - JQuery v1.8.6
Descrizione: Utilizzo del framework per javascript JQuery versione
1.8.
Tipo: Vincolo.
Priorità: Obbligatorio.
Requisiti Utente
23
Req 22 - Smarty v3.0
Descrizione: Utilizzo del web template Smarty versione 3.0 basato su
PHP.
Tipo: Vincolo.
Priorità: Obbligatorio.
Req 23 - MYSQL v5.0
Descrizione: Utilizzo del sistema per basi di dati MYSQL versione
5.0.
Tipo: Vincolo.
Priorità: Obbligatorio.
24
Analisi dei requisiti
2.2
2.2.1
Descrizione dei prodotti
Ingredienti
Si chiama comunemente ingrediente ciascuna delle sostanze od oggetti che
vanno mescolati o aggiunti seguendo un determinato ordine al fine di ottenere
una miscela unica, ossia una ricetta. Ad essi, nell’applicativo Magikchef,
vengono attribuite le seguenti caratteristiche:
• Nome:
nome, unico, attribuito per identificare l’ingrediente.
• Tipologia:
categoria principale per caratterizzare l’ingrediente (ad esempio: Bevanda, Frutta, Latticino, Pesce, etc...).
• Unità di misura:
valore con il quale si intende quantificare l’ingrediente. Nel caso in cui
venga assegnato un valore diverso da grammi dovrà essere abbinato
un quantitativo in grammi dell’opzione scelta, ciò è indispensabile per
un corretto calcolo del prezzo, dei valori nutrizionali e del peso netto.
Ad esempio: ingrediente: Olio unità di misura: cucchiaio grammi: 20
gr (indica il peso di un cucchiaio d’olio).
Ad ogni ingrediente è possibile associare più unità di misura. Tenendo l’esempio dell’olio, oltre all’unità di misura cucchiaio è utile avere
l’unità di misura litro. Infatti, nel caso la ricetta sia la pasta al pomodoro, si richiederanno 2 cucchiai d’olio nel sugo, nel caso delle patatine
fritte si utilizzerà mezzo litro d’olio.
• Prezzo:
costo riferito ad un quantitativo di 100 grammi dell’ingrediente, esso
viene corredato da una data che si aggiorna automaticamente ogni
qual volta viene aggiornato tale valore.
• Valori Nutrizionali:
valori nutrizionali quali lipidi, glucidi, proteine e chilocalorie presenti
in un quantitativo di 100 grammi dell’ingrediente.
• Peso Netto:
valori in percentuale riferiti allo scarto per la pulizia ed al possibile
decremento o incremento di peso dovuto alla cottura. Queste percentuali applicate al quantitativo scelto dall’utente permettono il calcolo
del peso netto dell’ingrediente.
• Adattabilità:
ulteriore caratteristica relativa all’ingrediente, essa indica se questo è
adatto al tipo di utente indicato nel valore di adattabilità. Le tipologie
Descrizione dei prodotti
25
di utente sono, ad esempio: vegano, vegetariano, celiaco, intollerante
al latte ecc...
2.2.2
Vini
L’applicativo MagikChef dispone di un ottimo archivio di vini (circa 500).
Principalmente la loro funzionalità è quella di essere associati ad una ricetta
ma possono essere anche visualizzati singolarmente perchè accompagnati da
una buona descrizione e da un discreto numero di attributi:
• Nome:
nome, unico, attribuito per identificare il vino.
• Tipologia:
categoria principale per caratterizzare il vino (ad esempio: rosso, bianco, frizzantino, spumante, ecc...).
• Produttore:
nome del principale o del più conosciuto produttore del vino in dettaglio.
• Nozioni:
descrizione generale del vino.
• Vitigno:
nome del vigneto dal quale proviene il vino.
• Vitigno:
provincia dove viene prodotto il vino.
• Invecchiamento:
anni di invecchiamento, ovvero il periodo necessario per la corretta
fermentazione del vino. Se necessario viene specificato anche con quale modalità (tipo di contenitore, temperatura, ...) è consigliabile far
fermentare tale prodotto.
• Profumo, sapore e gradazione alcolica:
ulteriori caratterizzazioni del vino, spesso accompagnate da una breve
descrizione.
• Temperatura di servizio:
temperatura del vino con la quale è consigliabile servire tale prodotto.
• Prezzo:
costo riferito ad una normale bottiglia di vino (75 cl), esso viene corredato da una data che si aggiorna automaticamente ogni qual volta
viene aggiornato tale valore.
26
Analisi dei requisiti
2.2.3
Ricette
Una ricetta indica una lista di ingredienti con le relative dosi accompagnati
da un dettagliato procedimento e talvolta anche da delle immagini. Per
poter categorizzare le ricette in modo da permettere una ricerca in modo
più efficente, nell’applicativo MagikChef ad una ricetta vengono associate le
seguenti caratteristiche:
• Nome:
nome, unico, attribuito per identificare la ricetta.
• Categoria:
categoria della ricetta, questa caratteristica e composta da tre componenti che rappresentano rispettivamente la tipologia della ricetta (ad
esempio: pasticceria, cucina, frutta, ...) , il tipo della portata (antipasto, primo, secondo, ...) e la specifica della portata (affettato, vegetale,
al cioccolato, ...).
• Descrizione:
descrizione della ricetta (storia, provenienza, curiosità, ...)
• Procedimento:
descrizione dettagliata della procedura da seguire per la corretta realizzazione della ricetta.
• Porzioni:
numero delle portate relative alla quantità degli ingredienti scelta.
• Tempo cottura:
tempo, espresso in minuti, necessario alla cottura, se necessaria, della
ricetta.
• Lista degli ingredienti:
elenco degli ingredienti con relative dosi e un’opzionale descrizione.
• Photogallery:
ad ogni ricetta è possibile associare una o più foto rappresentanti la
ricetta completata o in fase di preparazione.
• Dati aggiuntivi:
ad ogni ricetta è possibile aggiungere dei dati opzionali quali: un vino
da abbinare, una stagione od una occasione nella quale è preferibile
preparare tale ricetta, il grado di difficoltà nella preparazione della
ricetta, la temperatura di cottura, le azioni da effettuare dopo una
probabile cottura ed un prezzo da associare al prodotto finito (al kg o
per porzione).
Descrizione dei prodotti
27
• Dati relativi al software MagikChef :
per preservare un’integrità con il vecchio software MagikChef, solo per
la parte amministrativa, rimangono visibili due ulteriori caratteristiche quali la paternità della ricetta e il gruppo di appartenza. Questi
valori sono strettamente legati alla scuola di cucina professionale Boscolo Etoile Academy, essi infatti rappresentano rispettivamente i cuochi/professori della scuola e le pubblicazioni cartacee ed informatiche
dell’accademia.
2.2.4
Basi di preparazione
Un base di preparazione non è nientaltro che un prodotto che è sia ricetta
che ingrediente. Esso conterrà tutti gli attributi, sia quelli riferiti ad una
ricetta, sia quelli relativi ad un ingrediente. Avrà, in aggiunta degli altri
prodotti, una relazione tra ingrediente e ricetta, in modo che l’utente possa
decidere se visualizzare tale prodotto come ingrediente o come ricetta.
Un semplice esempio per questo particolare tipo di prodotto è la besciamella essa infatti può essere inteso come ricetta, ossia un preparato di burro,
farina, latte, noce moscata e sale oppure come un semplice ingrediente per
la preparazione delle lasagne alla bolognese.
Tutti i prodotti qui descritti avranno inoltre le seguenti caratteristiche:
• Paternità Utente:
indica a quale utente (o amministratore) appartiene tale prodotto.
• Verificato:
è un attributo visibile solamente dall’amministratore, verrà utilizzato
solamente nella fase iniziale dello sviluppo del progetto, tale valore
indica infatti se il prodotto è stato controllato dall’amministratore,
questa scelta è dovuta al fatto di facilitare l’amministratore nel lavoro
di correzione dei record del database come spiegato negli obiettivi del
progetto.
• Approvato:
i prodotti inseriti dagli utenti potranno essere valutati dall’amministratori, nel caso in cui il prodotto sia ritenuto valido l’amministratore
potrà decidere di approvarlo. Un ingrediente, un vino o una base di
preparazione approvata è visibile a tutti gli utenti altrimenti rimane
visibile ed utilizzabile solamente all’utente proprietario. Nel caso di
una ricetta questo valore indicherà una futura possibilità di diventare
un prodotto a pagamento.
28
Analisi dei requisiti
2.3
2.3.1
Struttura del portale
Lato Amministrativo
Come già introdotto negli obbiettivi del progetto, l’applicativo MagikChef
dovrà, per quanto riguarda la parte amministrativa, essere integrato con il
backoffice dell’azienda Aleaweb.
L’amministrativo in questione è un CMS (content management system), ossia un sistema di gestione dei contenuti, interamente sviluppato all’interno
dell’azienda con lo scopo di facilitare la gestione dei contenuti dei siti web,
svincolando l’amministratore da conoscenze tecniche di programmazione.
Questo sistema è stato sviluppato tramite il linguaggio PHP con una programmazione orientata agli oggetti, cercando di seguire le regole del pattern
MVC, norme comunemente seguite dai maggiori framework per PHP.
Il CMS sviluppato dall’azienda è strutturato in modo da ospitare svariati
moduli gestiti da un core principale. L’applicazione MagikChef dovrà quindi
figurare in questo sistema come un semplice modulo, non dovrà quindi andare ad interferire con il core o con moduli esterni. Per lo sviluppo dell’intero
portale verranno utilizzati due moduli comuni, già sviluppati dall’azienda
Aleaweb di seguito brevemente descritti:
• Gestione Utenti:
attraverso questo modulo è possibile inserire, modificare o eliminare
tutti gli utenti e gli amministratori registrati al portale, è inoltre possibile creare dei gruppi ai quali definire determinati permessi ed associarne gli utenti desiderati. Ogni utente può essere caratterizzato con
i relativi dati anagrafici ed è possibile inoltre inserire dinamicamente
campi personalizzabili per una maggiore flessibilità del sistema.
• File Manager:
questo modulo è stato creato per poter salvare nel server web qualunque tipo di file ed organizzare tali allegati per cartelle. Contiene un
sistema di upload multiplo e grazie ad un efficiente sistema di drag &
drop è possibile, con molta facilità, ordinare i vari file ed organizzarli
nelle cartelle create. Questo archivio viene poi riutilizzato da tutti gli
altri moduli che necessitano di file esterni come ad esempio nella creazione di una fotogallery per una determinata ricetta. Se l’amministratore aveva già proveduto ad uploadare le immagini dovrà solamente
selezionarle dalla cartella del filemanager da lui creata ed associarle
quindi alla ricetta desiderata, in caso contrario opterà per un normale
upload delle foto.
Come raffigurato nell’immagine, il modulo MagikChef dell’amministrativo
verrà strutturato dividendolo per le varie tipologie di prodotto e per le funzionalità riguardanti gli sponsor e la gestione degli inviti.
Struttura del portale
29
Fig. 2.1: Struttura lato Amministrativo MagikChef
Attraverso il seguente flow chart è possibile inoltre avere una prima inquadratura di come saranno organizzate le pagine ed i relativi livelli di
profondità.
• Ingredienti:
Archivio: sezione dove è possibile visualizzare, inserire, modificare od
eliminare un ingrediente.
Categorie: sezione dove è possibile visualizzare, inserire, modificare od
eliminare una delle categorie relative agli ingredienti.
Report: sezione che raccoglie l’archivio degli ingredienti inseriti dagli
utenti, attraverso una lista ordinata e filtrabile per nome, l’amministratore avrà accesso a tutti gli ingredienti (non presenti nell’attuale
database) proposti dagli utenti e tramite delle semplici azioni potrà decidere se ignorare il suggerimento o approvare il prodotto rendendolo
cosı̀ pubblico a tutti gli utenti del portale.
• Vini:
sezione dove è possibile visualizzare, inserire, modificare od eliminare
un ingrediente.
• Basi di Preparazione:
sezione dove è possibile visualizzare, inserire, modificare od eliminare
una base di preparazione.
30
Analisi dei requisiti
• Ricette:
Archivio: sezione dove è possibile visualizzare, inserire, modificare od
eliminare una ricetta.
Categorie: sezione dove è possibile visualizzare, inserire, modificare
od eliminare una delle categorie relative alle ricette. Nel caso delle
categorie tipologia, portata e specifica di portata è possibile gestirne
le relazioni padre/figlio.
• Sponsors:
sezione dove è possibile visualizzare, inserire, modificare od eliminare
uno sponsor e dove inoltre è possibile visualizzare e gestire tutti i
prodotti ai quali è stato associato uno o più sponsor.
• Inviti:
Inviti : sezione dove è possibile invitare persone attraverso la spedizione di una e-mail contenente le credenziali per l’accesso al portale. É
inoltre possibile modificare il messaggio delle e-mail.
Promozioni : una promozione è un codice attraverso il quale una persona si può prenotare con una priorità maggiore per l’utilizzo del portale
(se non invitata tramite e-mail), tramite questa sezione è possibile gestire l’attivazione o disattivazione di una o più promozioni.
Struttura del portale
2.3.2
31
Lato Pubblico
La parte pubblica dell’applicativo MagikChef sarà accessibile nella sua integrità solamente dagli utenti con le corrette credenziali, in caso contrario
il visitatore sarà vincolato alla pagina iniziale nella quale potrà esclusivamente inserire un codice promozionale o richiedere un invito tramite il form
apposito.
Fig. 2.2: Struttura lato Pubblico MagikChef
• Login:
sezione attraverso la quale un utente può accedere al portale MagikChef. Questa sezione offre inoltre la funzionalità di accesso tramite
le credenziali ricevute attraverso un invito elettronico, ciò comporterà una successiva registrazione, e la possibilità di prenotare un futuro
accesso tramite l’inserimento di un codice promozionale o richiedendo
un invito compilando il form apposito.
• My MagikChef :
sezione personale dell’utente, attraverso questa il visitatore potrà gestire il proprio profilo (dati anagrafici e foto) e controllare il proprio archivio di ricette ed ingredienti con la possibilità di visualizzare, inserire
modificare ed eliminare i propri prodotti.
• Ingredienti:
sezione nella quale è possibile visualizzare tutti gli ingredienti (filtrabili
per nome) presenti nel database ed analizzare i relativi attributi
• Ricette:
sezione nella quale è possibile visualizzare tute le ricette (filtrabili per
32
Analisi dei requisiti
nome) presenti nel database ed analizzarle nel dettaglio. Questa sezione è corredata di una ricerca avanzata dove è possibile filtrare le ricette
attraverso svariate caratteristiche quali: nome, categoria, ingredienti
presenti o meno nella ricetta, numero di porzioni, difficoltà, tempo di
cottura, stagione e vino.
• Lista della Spesa:
ogni utente registrato ha la possibilità di selezionare una o più ricette
da inserire nella propria lista della spesa. Questa sezione si occupa di
organizzare le ricette selezionate e di generare una lista degli ingredienti (calcolandone le relative quantità) per la realizzazione delle ricette
selezionate. Sarà inoltre possibile determinare il numero di portate per
ciascuna ricetta e ricalcolare le corrette quantità di ogni ingrediente
nella relativa lista della spesa.
Capitolo 3
Progettazione
3.1
Struttura del database
Tra gli obiettivi non è mai emersa la possibilità di avere un portale multilingua, ma mettendo in previsione una probabile richiesta di questo genere
è stato preferibile progettare un database che la potesse sopportare.
Tra le svariate soluzioni proposte nella rete o nei più comuni libri specifici del settore, la soluzione adottata è stata quella che permetteva di poter
lavorare sul numero di lingue e sul numero di campi che possono essere
internazionalizzati senza dover lavorare eccessivamente sulla struttura del
database.
Fig. 3.1: Esempio di internazionalizzazione del database
Come raffigurato nell’immagine, l’idea di base è stata quella di creare una
tabella principale (per ogni oggetto del database sensibile all’i18n1 ) contentente tutti i dati che certamente non avrebbero cambiato il loro valore a
seconda della lingua (come una chiave principale numerica e le relative chiavi esterne) ed una tabella internazionalizzata (i18n) contentente, la chiave
esterna relativa all’oggetto principale, la lingua e i dati relativi alla lingua
scelta.
Nell’esempio:
1
Il termine inglese Internationalization viene spesso abbreviato come i18n dove il
numero 18 fa riferimento al numero di lettere omesse
34
Progettazione
• product: tabella di prodotti generici, contiene la propria chiave primaria e opzionali chiavi secondarie.
• product i18n: tabella internazionalizzata, contiene i valori dei generici prodotti nelle varie lingue, la chiave esterna lang id definisce la
lingua, product id definisce l’oggetto generico.
• lang: tabella che contiene tutte le lingue disponibili nel database con
eventuali attributi aggiuntivi.
Il database è stato progettato seguendo delle norme sui nomi consigliate
dall’azienda Aleaweb, cosı̀ da renderne più leggibile la lettura all’interno del
database più esteso che compone il sistema BackOffice di Aleaweb.
Queste regole richiedono che:
• tutti i nomi devono essere in inglese e non devono contenere lettere
maiuscole.
• il nome delle tabelle deve essere composto di un codice di tre cifre
indicante il modulo dell’amministrativo (in questo caso mgk), il carattere di underscore, il nome scelto della tabella e nel caso di una
tabella internazionalizzata deve essere aggiunto i18n. Ad esempio
mgk ingredients i18n.
• le chiavi primarie sono indicate da id, il carattere di underscore ed il
nome della tabella (id mgk ingredients i18n).
• le chiavi esterne sono indicate dal nome della tabella (a cui si riferiscono), il carattere di underscore e id (mgk ingredients i18n id).
Per comodità di lettura si è scelto di di suddividere l’intero database in
quattro macroaree.
Struttura del database
3.1.1
35
Ingredienti
mgk ingredients è la tabella contente tutti gli ingredienti del sistema, essa
(come spiegato in precedenza) è accompagnata dalla sua tabella di internazionalizzazione mgk ingredients i18n contente gli attributi degli ingredienti
nelle varie lingue.
Ad ogni ingrediente viene associata una singola categoria, definita dalla chiave esterna mgk in typologies id, ed un singolo proprietario, chiave esterna
glo users id.
Sono presenti inoltre due associazioni molti a molti definite tramite le tabelle mgk in2ct e mgk um2in ed indicano rispettivamente le relazioni tra gli
ingredienti e le caratteristiche di adattabilità e tra gli ingredienti e le unità
di misura.
Fig. 3.2: Struttura database - ingredienti
36
Progettazione
Le tabelle che gestiscono gli ingredienti sono:
nome tabella
descrizione
mgk
mgk
mgk
mgk
mgk
mgk
ingredienti (con i18n relativa)
tipologie degli ingredienti (con i18n relativa)
adattabilità degli ingredienti (con i18n relativa)
associazione ingredienti - adattabilità
unità di misura (con i18n relativa)
associazione unità di misura - ingredienti
ingredients
in typologies
in categories
in2ct
um
um2in
Nella query che segue viene calcolato il prezzo, peso netto e calorie relativi
agli ingredienti della ricetta XYZ:
SELECT ing18 . ingredient AS nome ,
ROUND (( r2i18 . quantity * u2i . gram * ing18 . cost / 100
) , 2) AS prezzosingolo ,
ROUND ((( r2i18 . quantity * u2i . gram ) * (1 - (( ing18 .
clean_discard / 100) + ( ing18 . cook_discard / 100)
) ) * (1 + ( ing18 . cook_increase / 100) ) ) ,0)
AS pesonetto ,
ROUND (( r2i18 . quantity * u2i . gram * ing18 . calorie /
100 ) ,0)
AS calorie
FROM mgk_rc2in AS r2i
INNER JOIN mgk_rc2in_i18n AS r2i18
ON r2i18 . mgk_rc2in_id = r2i . id_mgk_rc2in
INNER JOIN mg k_ ing re die nts _i 18n AS ing18
ON r2i . mgk_ingredients_id = ing18 .
mgk_ingredients_id
INNER JOIN mgk_um_i18n AS um18
ON r2i . mgk_um_id = um18 . mgk_um_id
INNER JOIN mgk_um2in AS u2i
ON r2i . mgk_um_id = u2i . mgk_um_id
WHERE r2i18 . lang = ’ it ’
AND ing18 . lang = ’ it ’
AND um18 . lang = ’ it ’
AND u2i . mgk_ingredients_id = r2i . mgk_ingredients_id
AND r2i . mgk_recipes_id = ’ XYZ ’
ORDER BY nome
Struttura del database
3.1.2
37
Ricette
La tabelle contente le ricette è stata nominata mgk recipes ed è associata,
attraverso le relative chiavi esterne ai vari attributi delle ricette quali: gruppi, paternità, temperatura, stagione, difficoltà, vini e dopo cottura, ognuno
dei quali, qualora necessario, accompagnato dalla propria tabella di internazionalizzazione.
É presente un’associazione molti a molti con i tag assegnati dagli utenti alla
ricetta gestita dalla tabella mgk rc2tg.
Come descritto in precedenza ogni tabella viene categorizzata secondo una
tripla di caratteristiche vincolate tra loro tramite un legame padre/figlio.
Queste caratteristiche sono tipologia, tipo di portata e specifica di portata
e le loro relazioni sono gestite tramite la tabella mgk rc cat.
Fig. 3.3: Struttura database - ricette - parte 1/2
38
Progettazione
Fig. 3.4: Struttura database - ricette - parte 2/2
Struttura del database
39
Le tabelle che gestiscono le ricette sono:
nome tabella
descrizione
mgk
mgk
mgk
mgk
mgk
recipes
rc cat
rc typologies
course
course spec
mgk
mgk
mgk
mgk
mgk
mgk
mgk
mgk
mgk
rc groups
paternity
temperature
seasons
difficulty
wines
aftercook
tags
rc2tg
ricette (con i18n relativa)
relazioni tripla tipologie, portata e specifiche
tipologia delle ricette(con i18n relativa)
portata delle ricette (con i18n relativa)
specifica di portata delle ricette (con i18n
relativa)
gruppo delle ricette (con i18n relativa)
paternità delle ricette
temperatura della ricetta (con i18n relativa)
stagione della ricetta (con i18n relativa)
difficoltà della ricetta (con i18n relativa)
vino associato alla ricetta (con i18n relativa)
azione dopo cottura (con i18n relativa)
tags assegnati dagli utenti
associazione ricette-tag
Nella seguente query, ad esempio, vengono selezionate le dieci ricette più
votate con le relative categorie:
SELECT rec18 . recipe , typ18 . typology , cou18 . course ,
csp18 . course_spec
FROM mgk_recipes_i18n AS rec18
INNER JOIN mgk_recipes AS rec ON rec18 .
mgk_recipes_id = rec . id_mgk_recipes
INNER JOIN mgk_rc_cat AS cat ON rec . mgk_rc_cat_id =
cat . id_mgk_rc_cat
LEFT OUTER JOIN m g k_ r c _ t yp o l o g ie s _ i 18 n AS typ18
ON cat . mg k_ rc_ typ ol ogi es _id = typ18 .
mg k_ rc_ typ ol ogi es _id
LEFT OUTER JOIN mgk_course_i18n AS cou18
ON cat . mgk_course_id = cou18 . mgk_course_id
LEFT OUTER JOIN mgk _co ur se_ sp ec_ i1 8n AS csp18
ON cat . mgk_course_spec_id = csp18 .
mgk_course_spec_id
ORDER BY rec18 . n_vote
LIMIT 0 , 10
40
3.1.3
Progettazione
Dipendenze ingredienti e ricette
Questa macroarea del database rappresenta tutte le relazioni presenti tra i
prodotti, ossia l’associazione molti a molti per gestire la lista degli ingredienti
di ogni ricetta, gestita dalla tabella mgk rc2in; la relazione tra ingredienti
e ricetta nelle basi di preparazione mgk basic e la gestione degli sponsor
mgk sp2pr.
L’associazione prodotto / sponsor viene definita con la chiave esterna dello
sponsor e la chiave esterna composta da id e tipologia del prodotto, che
definisce l’ingrediente la ricetta o il vino definito.
Fig. 3.5: Struttura database - dipendenze ingredienti e ricette
Struttura del database
41
Le tabelle che gestiscono questa macroarea sono:
nome tabella
descrizione
mgk
mgk
mgk
mgk
mgk
ricette
ingredienti
vini
basi di preparazione
associazione ingredienti-ricetta (con i18n relativa)
sponsors
associazione sponsors-prodotti
recipes
ingredients
wines
basic
rc2in
mgk sponsors
mgk sp2pr
Nella seguente query vine selezionato il nome della ricetta che non ha l’ingrediente XYZ:
SELECT DISTINCT ( rec . id_mgk_recipes ) , rec18 . recipe
FROM mgk_recipes_i18n AS rec18
INNER JOIN mgk_recipes AS rec
ON rec18 . mgk_recipes_id = rec . id_mgk_recipes
INNER JOIN mgk_rc2in AS r2i
ON rec . id_mgk_recipes = r2i . mgk_recipes_id
AND rec . id_mgk_recipes NOT IN (
SELECT DISTINCT mgk_recipes_id
FROM mgk_rc2in
WHERE mgk_ingredients_id IN ( ’ XYZ ’ ) )
WHERE rec18 . lang = ’ it ’
42
3.1.4
Progettazione
Supporto al social networking
In questa sezione del database vengono rappresentate le associazioni relative
alla parte sociale del portale MagikChef (in figura 3.6).
Sono infatti raffigurate nell’immagine, le tabelle che contengono le informazioni relative a commenti, votazioni e preferenze degli utenti riguardo
le ricette. La tabella che contiene la lista di tutti gli utenti, glo users, era
preesistente nel database del BackOffice Aleaweb, all’interno del quale si
appoggia l’applicativo Magikchef. Attraverso la chiave esterna glo users id,
vini, ingredienti e ricette hanno il riferimento al relativo proprietario.
Fig. 3.6: Struttura database - parte sociale
Struttura del database
43
Le tabelle che gestiscono la parte sociale dell’applicazione sono:
nome tabella
descrizione
mgk recipes
mgk ingredients
mgk wines
glo users
glo users info
mgk invitations
glo ex2im
glo img
glo filemanager
mgk comments
mgk ratings
mgk favourites
ricette
ingredienti
vini
lista degli utenti
informazioni aggiuntive relative agli utenti
utenti invitati
associazione modulo-immagine
informazioni sulle immagini
informazioni sui file
commenti
storico votazioni
favoriti e lista della spesa
La seguente query selezionala prima immagine della ricetta XYZ:
SELECT fmn . id_glo_filemanager AS name , extension
FROM glo_ex2im AS e2i
LEFT OUTER JOIN glo_img AS img
ON e2i . glo_img_id = img . id_glo_img
LEFT OUTER JOIN glo_filemanager AS fmn
ON img . glo_filemanager_id = fmn . id_glo_filemanager
WHERE e2i . ext_id = ’ XYZ ’
AND cod_section = ’ MGK_REC_GAL ’
ORDER BY priority
LIMIT 0 , 1
44
3.2
Progettazione
Gestione degli inviti
MagikChef è stato progettato, inizialmente, per essere un portale riservato
agli iscritti ai corsi di cucina dell’accademia Boscolo Etoile. Per rendere
questo possibile è stata realizzato un sistema per la gestione degli inviti. É
stato inoltre sviluppato un sistema per gestire eventuali richieste esterne per
l’accesso a tale sistema ed eventuali promozioni.
Con promozione si intende un codice alfanumerico che può essere inserito in una pubblicità all’interno di riviste specializzate, negli articoli dell’ecommerce Boscolo o inviato tramite posta (cartacea) alle persone desiderate.
Questo codice, viene generato automaticamente dall’amministrativo MagikChef e viene associato ad esso una data di scadenza.
L’utente in possesso di tale codice effettua una registrazione prioritaria
al portale, ma deve comunque ricevere un’approvazione manuale dell’amministratore per poter usufruire dei servizi offerti dal portale MagikChef.
Fig. 3.7: Diagramma degli stati degli inviti
Gestione degli inviti
45
Legenda degli stati del digramma in figura 3.7:
• S0: utente visitatore;
• S1: utente richiedente non confermato;
• S2: utente richiedente confermato;
• S3: utente in promozione non confermato;
• S4: utente in promozione confermato;
• S5: utente invitato;
• S6: utente attivo;
Le azioni del diagramma degli stati nella figura 3.7 sono:
• 1.1 Richiesta d’invito:
l’utente compila il form per la richiesta di un invito per l’accesso la
portale MagikChef.
• 1.2 Richiesta e-mail:
l’amminstrativo (in automatico) invia una e-mail all’indirizzo inserito
dal richiedente per confermare la validità di questo.
• 1.3 Conferma e-mail:
l’utente richiedente risponde alla mail per confermare la veridicità
dell’indirizzo.
• 1.4 Spedizione invito:
l’amministratore, qualora lo ritenisse utile, invia un’invito per l’acceso
al portale al richiedente.
• 2.1 Inserimento promozione:
l’utente inserisce il codice promozionale e compila il form di registrazione.
• 2.2 Richiesta e-mail:
l’amminstrativo (in automatico) invia una e-mail all’indirizzo inserito
dall’utente in promozione per confermare la validità di questo.
• 2.3 Conferma e-mail:
l’utente in promozione risponde alla mail per confermare la veridicità
dell’indirizzo.
• 2.4 Approvazione utente:
l’amministratore approva l’utente in promozione inviandogli una mail
di benvenuto.
46
Progettazione
• 3.1 Conferma invito:
l’utente invitato conferma il proprio invito accedendo al portale tramite le credenziali ricevute per e-mail e compilando il form di registrazione.
Fig. 3.8: Screenshot Gestione inviti amministrativo MagikChef
Gestione dei prodotti
3.3
47
Gestione dei prodotti
Come prodotti MagikChef si intendono ricette, ingredienti, vini e basi di preparazione. Ad ognuno di essi vengono attribuite delle funzionalità comuni
che si differenziano dall’utente che ne usufruisce. Esse si possono riassumere
in ricerca, inserimento, modifica ed eliminazione che possono essere effettuate sia dall’utente semplice che dall’amministratore, ed approvazione ed
associazione a sponsor, operazioni limitate all’amministratore. Di seguito
viene analizzata in modo dettagliato la gestione delle ricette.
Fig. 3.9: Use Case - Gestione ricette
I casi d’uso rappresentati nella figura soprastante sono:
3.3.1
Ricerca
• Nome: ricerca di una ricetta.
• Attori coinvolti: utente.
• Descrizione: Ricerca di una ricetta, o di una lista di ricette, filtrate
tramite il proprio nome. L’utente deve essere aiutato nella ricerca tramite lo sviluppo di un sistema di autocompletamento che ne suggerisca
il corretto inserimento del nome della ricetta.
• Flusso degli eventi:
– l’utente inserisce il nome della ricetta da ricercare
48
Progettazione
– il sistema visualizza una lista di nomi di 10 ricette come suggerimenti aggiornate contemporaneamente all’inserimento del testo
da parte dell’utente (autocompletamento).
– l’utente può decidere se ricercare la parola da lui inserita o scegliere uno dei suggerimenti proprosti dal sistema.
– il sistema mostra i risultati divisi in pagine ciascuna contenente
10 risultati.
• Flusso alternativo: nel caso in cui il testo ricercato dall’utente
non produca alcun risultato verrà visualizzato il relativo messaggio
d’errore.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: nessuna.
3.3.2
Ricerca avanzata
• Nome: ricerca avanzata di una ricetta.
• Attori coinvolti: utente.
• Descrizione: ricerca di una ricetta, o di una lista di ricette, filtrate
tramite:
– nome (con autocompletamento)
– categoria (tipologia, portata e specifica)
– presenza o meno di un ingrediente (con autocompletamento)
– numero delle porzioni
– tempo di cottura
– difficoltà
– stagione
– vino (con autocompletamento)
• Flusso degli eventi:
– l’utente inserisce le caratteristiche della ricetta da ricercare
– il sistema suggerisce all’utente tramite autocompletamento nome,
ingredienti e vino (se inseriti).
– il sistema mostra i risultati divisi in pagine ciascuna contenente
10 risultati.
• Flusso alternativo: nel caso in cui le caratteristiche ricercate dall’utente non producano alcun risultato verrà visualizzato il relativo
messaggio d’errore.
Gestione dei prodotti
49
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: nessuna.
3.3.3
Inserimento
• Nome: inserimento di una nuova ricetta.
• Attori coinvolti: utente.
• Descrizione: l’utente inserisce una nuova ricetta attribuendone tutte
le caratteristiche da lui desiderate. Al termine di tale azione, esso
potrà procedere all’inserimento di una relativa photogallery.
• Flusso degli eventi:
– l’utente sceglie di inserire una nuova ricetta.
– l’utente inserisce i dati iniziali della ricetta quali: nome, tipologia,
descrizione, procedimento, etc ...
– l’utente inserisce la lista degli ingredienti con le relative quantità.
– il sistema suggerisce l’ingrediente tramite autocompletamento e,
ad ingrediente scelto, visualizza le relative unità di misura.
– se l’ingrediente scelto dall’utente non è presente nel database, può
inserirlo tra i personali, questo verrà inserito nella lista dei report
degli ingredienti visibile dall’amministratore.
– l’utente conclude l’inserimento della ricetta inserendo facoltativamente i dati aggiuntivi come: vino, difficoltà, dopo cottura,
stagione, etc ...
– salvata la ricetta l’utente può inserire una relativa photogallery
ed ordinerne le immagini.
• Flusso alternativo: nel caso in cui non vengano inseriti i dati obbligatori o vengano inseriti dati in modo non corretto verrà visualizzato
il relativo messaggio d’errore.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: viene archiviata una nuova ricetta.
50
Progettazione
Fig. 3.10: Flow Chart - Inserimento nuova ricetta
Gestione dei prodotti
3.3.4
51
Modifica
• Nome: modifica di una ricetta personale.
• Attori coinvolti: utente.
• Descrizione: l’utente seleziona una delle sue ricette personali e ne
modifica qualsiasi attributo.
• Flusso degli eventi:
– l’utente sceglie di modificare ricetta personale.
– il sistema visualizzerà un form identico a quello dell’inserimento,
precompilato secondo gli attributi della ricetta selezionata.
– l’utente può procedere alla modifica di qualunque campo rispettando i campi obbligatori ed i tipi di dato.
– il sistema salva le modifiche apportate dall’utente all propria
ricetta.
• Flusso alternativo: nel caso in cui non vengano inseriti i dati obbligatori o vengano inseriti dati in modo non corretto verrà visualizzato
il relativo messaggio d’errore. Se l’utente sceglie di modificare una ricetta non sua viene reindirizzato alla homepage con relativo messaggio
di errore.
• Precondizioni: l’utente deve aver effettuato il login e deve selezionare
una propria ricetta.
• Postcondizioni: viene modificata una ricetta.
3.3.5
Eliminazione
• Nome: eliminazione di una ricetta personale.
• Attori coinvolti: utente.
• Descrizione: l’utente seleziona una delle sue ricette personali e ne
decide l’eliminazione.
• Flusso degli eventi:
– l’utente sceglie di eliminare ricetta personale.
– il sistema visualizzerà una finestra dove richiede all’utente di
confermare l’azione richiesta.
– in caso affermativo il sistema provvederà all’eliminazione della
ricetta selezionata.
52
Progettazione
• Flusso alternativo: Se l’utente sceglie di eliminare una ricetta non
sua viene reindirizzato alla homepage con relativo messaggio di errore.
• Precondizioni: l’utente deve aver effettuato il login e deve selezionare
una propria ricetta.
• Postcondizioni: viene eliminata una ricetta.
3.3.6
Approvazione
• Nome: approvazione di una ricetta.
• Attori coinvolti: amministratore.
• Descrizione: l’amministratore approva una ricetta inserita da un
utente. La ricetta selezionata potrà ora essere modificata dall’amministratore, essere associata ad uno sponsors o diventare a pagamento.
• Flusso degli eventi:
– l’amminstratore visualizza la lista delle ricette inserite dagli utenti.
– l’amministratore seleziona la ricetta da approvare.
– l’amminstratore modifica il campo approvato selezionando la voce
affermativa.
– il sistema modifica la ricetta in approvata.
• Flusso alternativo: l’amministratore può decidere di deapprovare
una ricetta precedentemente approvata
• Precondizioni: l’amministratore deve aver avuto accesso al back
office amministrativo.
• Postcondizioni: viene modificato il campo approvato di una ricetta.
3.3.7
Associazione a sponsor
• Nome: associazione di una ricetta ad uno sponsor.
• Attori coinvolti: amministratore.
• Descrizione: l’amministratore seleziona una o più ricette alle quali
associa uno sponsor.
• Flusso degli eventi:
– l’amminstratore visualizza la lista delle ricette approvate.
Gestione dei prodotti
53
– l’amministratore seleziona una o più ricette dalla lista alle quali
vuole associare uno sponsor.
– il sistema genera la lista di tutti gli sponsor che non hanno alcuna
associazione con le ricette selezionate.
– l’amministratore sceglie uno sponsor dalla lista descritta nel punto precedente.
– il sitema associa lo sponsor alle ricette.
• Flusso alternativo: nel caso l’amministratore scelga di deassociare
uno sponsor verranno visualizzati gli sponsor che hanno delle associazioni attive con le ricette selezionate.
• Precondizioni: l’amministratore deve aver avuto accesso al back
office amministrativo.
• Postcondizioni: viene associato lo sponsor ad una o più ricette.
54
Progettazione
Fig. 3.11: Screenshot modifica di una ricetta
Gestione commenti, voti e prodotti favoriti
3.4
55
Gestione commenti, voti e prodotti favoriti
In questa sezione verranno analizzati tutti quegli aspetti che riguardano la
parte “sociale” dell’applicazione MagikChef.
Tali funzionalità permettono gli utenti di interagire tra loro, non solo semplicemente visualizzando le ricette altrui ma anche sfogliando il loro profilo,
rilasciando commenti o dando un voto alla ricetta preferita.
Fig. 3.12: Use Case - Gestione parte social del portale
I casi d’uso rappresentati nella figura soprastante sono:
3.4.1
Visualizzazione utenti
• Nome: visualizzazione del profilo di un utente.
• Attori coinvolti: utente.
• Descrizione: l’utente ha la possibilità di visualizzare il profilo degli
altri utenti che è composto di dati dell’utente, lista delle ricette e degli
ingredienti personali e lista delle ricette preferite.
• Flusso degli eventi:
56
Progettazione
– l’utente seleziona un utente premendo sul suo nome raggiungibile
nei dettagli di una ricetta.
– il sistema visualizza la scheda del profilo dell’utente selezionato.
• Flusso alternativo: nel caso venga selezionato un utente inesistente il sistema redirige l’utente alla homepage con relativo messaggio
d’errore.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: nessuna.
3.4.2
Gestione profilo
• Nome: gestione del proprio profilo utente.
• Attori coinvolti: utente.
• Descrizione: l’utente ha la possibilità di modificare i propri dati
incluse le proprie credenziali d’accesso al portale MagikChef quali email e password.
• Flusso degli eventi:
– l’utente seleziona la voce il mio profilo dal menù.
– l’utente può modificare qualsiasi campo del suo profilo, comprese
le proprie credenziali d’accesso e la sua immagine del profilo.
– il sistema salva le modifiche apportate dall’utente.
• Flusso alternativo: nel caso vengano omessi dati obbligatori il sistema risponderà con un relativo messaggio d’errore.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: vengono modificati i dati principali dell’utente.
3.4.3
Votazione
• Nome: assegnazione di un voto ad una ricetta.
• Attori coinvolti: utente.
• Descrizione: l’utente ha la possibilità assegnare un voto da 1 a 5 ad
ogni ricetta persenta nel sistema una volta al giorno.
• Flusso degli eventi:
– l’utente esprime un voto ad una ricetta da 1 a 5.
Gestione commenti, voti e prodotti favoriti
57
– il sistema controlla se l’utente ha già votato la ricetta selezionata
nelle precedenti 24 ore.
– il sistema risponde con un messaggio di ringraziamento per l’avvenuta votazione.
– il sistema calcola la nuova media di voto e aggiorna il numero di
voto della relativa ricetta.
• Flusso alternativo: nel caso in cui l’utente abbia già votato la ricetta
nelle precedenti 24 ore il sistema risponderà con un relativo messaggio
d’errore.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: viene associato un voto alla ricetta.
3.4.4
Preferiti
• Nome: gestione di una lista di ricette preferite.
• Attori coinvolti: utente.
• Descrizione: l’utente può assegnare una preferenza ad un a o più
ricette inserendole nella propria lista dei preferiti.
• Flusso degli eventi:
– l’utente seleziona una ricetta.
– l’utente aggiunge la ricetta alla propria lista dei preferiti.
– il sistema aggiorna la lista dei preferiti dell’utente.
• Flusso alternativo: nel caso in cui l’utente abbia già assegnato la
sua preferenza a tale ricetta può eliminarla dalla propria lista.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: viene aggiornata la lista dei preferiti dell’utente.
3.4.5
Inserimento commento
• Nome: inserimento di un commento.
• Attori coinvolti: utente.
• Descrizione: l’utente può inserire un commento ad una ricetta.
• Flusso degli eventi:
– l’utente seleziona una ricetta.
58
Progettazione
– l’utente aggiunge un commento.
– il sistema aggiunge il commento in coda alla lista dei commenti
della ricetta selezionata.
• Flusso alternativo: se il testo del commento viene lasciato vuoto il
sistema risponde con il relativo errore.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: viene aggiunto un commento alla ricetta.
3.4.6
Eliminazione commento
• Nome: eliminazione di un commento.
• Attori coinvolti: utente.
• Descrizione: l’utente può eliminare un proprio commento o tutti i
commenti relativi alla propria ricetta.
• Flusso degli eventi:
– l’utente seleziona un proprio commento o un commento relativo
ad una propria ricetta.
– l’utente elimina il commento.
– il sistema elimina il commento dalla lista dei commenti della
ricetta selezionata.
• Flusso alternativo: nessuno.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: viene eliminato un commento dalla ricetta.
3.4.7
Lista della spesa
• Nome: gestione della lista della spesa.
• Attori coinvolti: utente.
• Descrizione: l’utente può aggiungere una ricetta alla propria lista
della spesa e modificarne il numero delle portate per calcolarne la
somma dei relativi ingredienti.
• Flusso degli eventi:
– l’utente seleziona una ricetta.
– l’utente aggiunge la ricetta alla propria lista della spesa.
Gestione commenti, voti e prodotti favoriti
59
– il sistema aggiorna la lista della spesa e ne calcola i relativi
ingredienti.
– l’utente modifica il numero delle portate di una o più ricette
presenti nella propria lista della spesa.
– il sistema calcola la nuova lista degli ingredienti calcolandone le
relative quantità in base al numero di portate scelte.
• Flusso alternativo: nel caso in cui l’utente inserisca un valore non
numerico per il numero di portate il sistema visualizzerà l’errore relativo. Se la ricetta è già presente nella lista della spesa dell’utente egli
può decidere di eliminarla.
• Precondizioni: l’utente deve aver effettuato il login.
• Postcondizioni: viene aggiornata la lista della spesa.
Le successive due funzionalità erano già presenti nel backoffice Aleaweb
nel modulo di gestione degli utenti. Vengono descritte perchè integrate e
fondamentali nell’amministratio del portale MagikChef.
3.4.8
Attivazione utente
• Nome: attivazione / disattivazione di un utente.
• Attori coinvolti: amministratore.
• Descrizione: l’amministratore può attivare o disattivare lo stato di
un utente decidendone la possibilità di accesso al portale o meno, ma
preservando i suoi dati (contrariamente all’eliminazione).
• Flusso degli eventi:
– l’amministratore attiva/disattiva un utente.
– il sistema aggiorna lo stato del relativo utente.
• Flusso alternativo: nessuno.
• Precondizioni: l’amministratore deve aver avuto accesso al back
office amministrativo.
• Postcondizioni: viene aggiornato lo stato dell’utente.
60
Progettazione
3.4.9
Eliminazione utente
• Nome: eliminazione di un utente.
• Attori coinvolti: amministratore.
• Descrizione: l’amministratore può eliminare un utente con la conseguente cancellazione di tutti i dati relativi.
• Flusso degli eventi:
– l’amministratore elimina un utente.
– il sistema elimina dal database tutti i dati relativi a tale utente.
• Flusso alternativo: nessuno.
• Precondizioni: l’amministratore deve aver avuto accesso al back
office amministrativo.
• Postcondizioni: viene eliminato un utente.
Fig. 3.13: Screenshot Visualizzazione profilo utente
Capitolo 4
Sviluppo
4.1
Scelte tecnologiche
Le motivazioni delle scelte tecnologiche sono principalmente dovute ai requisiti di vincolo prefissati durante l’attività di analisi del progetto.
Dovendo progettare un modulo all’interno di un sistema back office preesistente non era infatti possibile scegliere un linguaggio di scripting differente
da quello adottato, ossia PHP, o un diverso gestore di database, MYSQL.
L’utilizzo della tecnologia AJAX è stato voluto per rendere il portale più
interattivo ed insieme al framework jQuery, ha reso possibile azioni semplici
come l’autocompletamento, o complesse come il contemporaneo calcolo dei
valori nutrizionali durante l’inserimento degli ingredienti in una ricetta.
Di seguito vengono descritti in modo più approfondito le principali scelte
tecnologiche adottate.
4.1.1
PHP
PHP (acronimo ricorsivo di PHP: Hypertext Preprocessor, preprocessore di
ipertesti) è un linguaggio di scripting interpretato, con licenza open source
e libera, originariamente concepito per la programmazione Web ovvero la
realizzazione di pagine web dinamiche.
Attualmente è utilizzato principalmente per sviluppare applicazioni web lato server ma può essere usato anche per scrivere script a riga di comando o
applicazioni standalone con interfaccia grafica.
PHP riprende per molti versi la sintassi del C, come peraltro fanno molti
linguaggi moderni, e del Perl. È un linguaggio a tipizzazione debole e dalla
versione 5 migliora il supporto al paradigma di programmazione ad oggetti. Certi costrutti derivati dal C, come gli operatori fra bit e la gestione di
stringhe come array, permettono in alcuni casi di agire a basso livello; tuttavia è fondamentalmente un linguaggio di alto livello, caratteristica questa
rafforzata dall’esistenza delle sue moltissime API.
PHP è in grado di interfacciarsi a innumerevoli database tra cui MySQL,
62
Sviluppo
PostgreSQL, Oracle, Firebird, IBM DB2, Microsoft SQL Server, solo per
citarne alcuni, e supporta numerose tecnologie, come XML, SOAP, IMAP,
FTP, CORBA.
Si integra anche con altri linguaggi/piattaforme quali Java e .NET e si può
dire che esista un wrapper per ogni libreria esistente, come CURL, GD,
Gettext, GMP, Ming, OpenSSL ed altro.
PDO
PDO e’ un’ estensione di PHP in grado di pilotare database di diverso tipo
tramite un’ unica interfaccia ( o meglio classe ) che con gli stessi metodi
opera su mysql, mysql 4.x, sqlite 2.x, sqlite 3.x , PostgreSQL, sqlserver,
oracle, ecc.
L’utilizzo di questa classe è utile e indispensabile per rendere un applicativo
portabile su diverse forme di databases. Essa viene integrata dalla versione
di PHP 5.1 fortemente orientata agli oggetti.
4.1.2
MySQL
Si tratta di un RDBMS (relational database management system) composto
da un server ed un client con interfaccia a caratteri, oltre che all’intuitiva ed
ottimizzata accessibilità tramite PHP, disponibile sia in piattaforme Unix
che Windows. Il sistema era in licenza GPL, attualmente è di proprietà di
Sun Microsystems ultimamente acquistata da Oracle.
Con il supporto di Apache e PHP è disponibile il tool PHPMyAdmin per
l’amministrazione tramite interfaccia grafica del database: creazione database, creazione tabelle, inserimento, cancellazione e query.
4.1.3
AJAX
AJAX, acronimo di Asynchronous JavaScript and XML, è una tecnica di
sviluppo per la realizzazione di applicazioni web interattive (Rich Internet
Application). Lo sviluppo di applicazioni HTML con AJAX si basa su uno
scambio di dati in background fra web browser e server, che consente l’aggiornamento dinamico di una pagina web senza esplicito ricaricamento da
parte dell’utente.
AJAX è asincrono nel senso che i dati extra sono richiesti al server e caricati
in background senza interferire con il comportamento della pagina esistente.
Normalmente le funzioni richiamate sono scritte con il linguaggio JavaScript.
4.1.4
JQuery
jQuery è una libreria di funzioni (un cosiddetto software framework) per le
pagine web, codificata in javascript, che si propone come obiettivo quello di
Scelte tecnologiche
63
astrarre ad un livello più alto la programmazione lato client del comportamento di ogni singola pagina HTML.
Tramite l’uso della libreria jQuery è possibile effettuare svariate operazioni,
come ad esempio ottenere l’altezza di un elemento, o farlo scomparire con
effetto dissolvenza.
Anche la gestione degli eventi è completamente standardizzata e gestita automaticamente, assieme alla loro propagazione; stessa cosa per quanto riguarda l’utilizzo di AJAX, in quanto sono presenti alcune funzioni molto
utili e veloci che si occupano di istanziare i giusti oggetti ed effettuare la
connessione e l’invio dei dati.
4.1.5
Smarty
Smarty è un motore di web template scritto in PHP. Smarty consente di
separare il codice PHP, il business logic (la programmazione del software),
dal codice HTML, il presentation logic (l’aspetto grafico di un sito web),
e di generare contenuti web mediante il rimpiazzo di speciali Smarty tag
all’interno del documento (sostituzione di variabili e molto altro).
La raffinata astrazione creata da Smarty consente di separare drasticamente
l’interfaccia grafica di una pagina web (la presentazione) dal back-end in
PHP, favorendo lo sviluppo di applicazioni di gran lunga più organizzate ed
eleganti. L’uso di Smarty facilita agli sviluppatori PHP l’implementazione
del modello di sviluppo Model-View-Controller (MVC), che presenta degli
indubbi vantaggi: è infatti possibile nascondere ai webdesigner la logica
di programmazione di un sito, mentre i programmatori lavoreranno senza
curarsi dell’interfaccia grafica del sito.
64
Sviluppo
4.2
Pattern MVC
Model View Controller è un design pattern strutturale che aiuta a strutturare le applicazioni in tre parti utilizzando la programmazione ad oggetti.
Il compito di questa strutturazione è quello di rendere indipendenti, disaccoppiando le parti software tra loro, adibite al controllo, all’accesso ai dati
e alle viste di presentazione degli stessi.
Il pattern è basato quindi sulla separazione dei compiti fra le classi che
interpretano tre ruoli principali:
• Il modello gestisce i dati e fornisce i metodi per accedervi in modo
astratto e consistente, solitamente la progettazione del modello è guidata sostanzialmente dalla struttura del database e quindi sostanzialmente dalle modalità di accesso ad esso.
• La vista si incarica di visualizzare i dati o un porzione di essi, forniti dal
controllore attraverso un opportuno modello, in base ad una specifica
formattazione rappresentante un certo contesto applicativo, che potrà
essere un lista di record, una form per l’inserimento e la modifica, un
grafico, o qualsiasi rappresentazione si vuole dare a questi dati.
• Il controllore è il motore dell’applicazione, riceve i comandi dall’utente,
generalmente attraverso la vista utilizzando i propri metodi e li utilizza
per richiamare in modo adeguato gli altri due componenti, permettendo quindi al modello di estrarre i dati, che vengono passati per la visualizzazione alle opportune viste. In pratica il controllore si occupa di
rimappare le azioni effettuate dall’utente alle risposte dell’applicazione,
che lavoreranno sui modelli e le viste in modo adeguato.
Fig. 4.1: Schema Pattern MVC
Vantaggi:
Pattern MVC
65
• Indipendenza delle varie componenti, che permette di lavorare separatamente in team (con competenze diverse) alle parti software astraendone al meglio il funzionamento.
• Possibilità di scrivere viste e controllori diversi utilizzando lo stesso
modello di acceso ai dati e quindi riutilizzare parte del lavoro già fatto.
• Avere il controllore separato dal resto dell’applicazione rende la sua
progettazione più semplice permettendo di concentrare gli sforzi sulla
logica del funzionamento.
• Obbliga gli sviluppatori a rispettare uno standard nella stesura del
progetto, che ne facilita poi la comprensione e le successive implementazioni, soprattutto utilizzabile in progetti di medie/grandi dimensioni.
• Software più flessibile, mantenibile ed aggiornabile nel tempo.
Svantaggi:
• Adatto soprattutto a progetti medio/grandi.
• Architettura sostanzialmente complessa.
Esistono tantissimi framework open-source per utilizzare il pattern di
sviluppo MVC assieme al linguaggio PHP, tra i più famosi citiamo Zend
Framework, CakePhp, Symfony, PHPMVC ecc.
Per lo sviluppo dell’applicazione MagikChef è stato però scelto di non adottarne alcuno per non essere vincolati nelle pesanti scelte progettuali che ciascuno adotta, come ad esempio le norme sui nomi delle tabelle del database
o l’eccessivo carico di utilizzo della memoria dovuto alla troppa generalizzazione. É stato quindi costruito un sistema ad hoc che si occupasse della
gestione dei paramentri adottando le regole del pattern strutturale MVC.
66
4.3
Sviluppo
Descrizione delle classi
Come introdotto precedentemente, la progettazione dell’applicazione web è
stata fortemete improntata sulla scelta di seguire le indicazioni del pattern
MVC sia nella parte amministrativa che in quella pubblica.
Sono state quindi costruite delle classi per accedere e gestire i vari dati nel
database (model ) denominate con il suffisso Mod e delle classi per la gestione
dei dati estrapolati dal database e dei comandi ricevuti dall’utente (control )
denominato con il suffisso Con.
Le viste sono delle pagine HTML generate tramite l’utilizzo del framework
Smarty che interagiscono con l’utente e comunicano le richieste con le classi
del controllore.
Sia nella parte pubblica che in quella amministrativa, l’applicativo è stato
suddiviso in diversi moduli. Ciascuno di essi è composto da: una classe
modello, una classe controllore ed una o più viste.
La classe modello contiene tutte quelle azioni che si interfacciano direttamente con i dati, effettua interrogazioni o modifiche sul database e lavora
direttamente sui file fisici per quanto riguarda l’upload o la cancellazione dei
file.
La classe controllore serve da collegamento tra il modello e le viste, essa può
interfacciarsi, oltre al modello del modulo in comune, a qualsiasi altre classe
modello dell’applicazione. Questa determinata classe fornisce alle sue relative viste i dati prelevati dal modello e richiamandone le corrette funzioni.
Le viste sono semplici pagine HTML rese dinamiche dalle azioni del controllore con il quale comunica tramite form, collegamenti diretti o piccole
applicazioni javascript.
4.3.1
Parte Amministrativa
Nella tabella successiva verrano brevemente elencati i moduli della parte
amministrativa specificando le relazioni che intercorrono tra le classi controllore, i modelli e le viste.
modulo
basi di preparazione
ingredienti
controllore
BasicCon
categorie degli ingredienti
CatIngredientsCon
IngredientsCon
modelli
BasicMod
RecipesMod
IngredientsMod
BasicMod
SponsorsMod
CatIngredientsMod
viste
form.html
list.html
form.html
list.html
report.html
catList.html
Descrizione delle classi
67
ricette
RecipesCon
categorie delle ricette
vini
CatRecipesCon
sponsors
SponsorsCon
WinesMod
SponsorsMod
SponsorsMod
inviti
InvitationsCon
InvitationMod
WinesCon
RecipesMod
CatRecipesMod
IngredientesMod
BasicMod
SponsorsMod
CatRecipesMod
advList.html
form.html
list.html
catList.html
relations.html
form.html
list.html
catList.html
list.html
list.html
invitations.html
promotions.html
form.html
Di seguito vengono elencate in dettaglio tutte le funzioni di ogni classe
dell’applicazione della parte amministrativa.
CONTROLLER
classe: IngredientsCon
Controllore che gestisce le azioni relative agli ingredienti.
funzione
index
form
parametri
datas
report
getList
filters
getReport
filters
getData
changeStatus
datas
id, status, type
descrizione
disegna la pagina principale
disegna il form per inserimento/modifica
dell’ingrediente
disegna la lista per il report degli
ingredienti
preleva la lista degli ingredienti secondo i
filtri e popola la lista dinamica del template
preleva la lista degli ingredienti proposti
dall’utente in base ai filtri e popola la lista
dinamica del template
acquisisce i dati dopo l’invio del form
aggiorna lo stato dell’ingrediente (controllato/non controllato)
68
action
Sviluppo
act
upd: aggiorna un ingrediente nel db
add: aggiunge un ingrediente nel db
del: elimina un ingrediente nel db
mdel: elimina più ingredienti nel db
ignore: ignora un ingrediente inserito dall’utente
mignore: ignora più ingredienti inseriti dall’utente
link: associazione record-gruppo
classe: CatIngredientsCon
Controllore che gestisce le azioni relative alle categorie degli ingredienti.
funzione
index
getList
parametri
action
act
filters
descrizione
disegna la pagina principale
preleva la lista delle categorie degli ingredienti secondo i filtri e popola la lista
dinamica del template
upd: aggiona una categoria degli ingredienti
add: aggiunge una categoria degli ingredienti
del: elimina una categoria degli ingredienti
Descrizione delle classi
69
classe: WinesCon
Controllore che gestisce le azioni relative ai vini.
funzione
index
form
parametri
getList
filters
getData
action
datas
act
datas
descrizione
disegna la pagina principale
disegna il form per inserimento/modifica
del vino
preleva la lista dei vini secondo i filtri e
popola la lista dinamica del template
acquisisce i dati dopo l’invio del form
upd: aggiona un vino
add: aggiunge un vino
del: elimina un vino
mdel: elimina più vini
link: associazione record - gruppo
classe: RecipesCon
Controllore che gestisce le azioni relative alle ricette.
funzione
index
parametri
params
form
datas
advanced
getList
filters
getListAdv
filters
getData
datas
getAutocomplete table, substring
checkIng
name, id
checkWine
refreshCat
name, id
categories
refreshPrice
id, qta, um
descrizione
disegna la pagina iniziale, se vengono
passati dei parametri filtra la lista
disegna il form per inserimento / modifica
della ricetta
disegna la pagina della ricerca avanzata
preleva la lista delle ricette secondo i filtri
e popola la lista dinamica del template
preleva la lista delle ricette secondo i filtri e
popola la lista dinamica del template (per
la ricerca avanzata)
acquisisce i dati dopo l’invio del form
gestisce il popolamento della lista per
l’autocompletamento
controlla l’integrità record (nome - id)
se vero richiede le unità di misura del
determinato ingrediente
controlla l’integrità record (nome - id)
ricarica le sottocategorie delle ricette a
seconda della categoria padre selezionata
ricalcola il prezzo, il netto e le calorie dell’ingrediente singolo a seconda delle scelte
effettuate (ingrediente, quantità e unità di
misura)
70
action
Sviluppo
act
upd: aggiona una ricetta
add: aggiunge una ricetta
del: elimina una ricetta
mdel: elimina più ricette
link: associazione record - gruppo
classe: CatRecipesCon
Controllore che gestisce le azioni relative alle categorie delle ricette.
funzione
index
getList
parametri
action
act
filters
addRel
deleteRel
descrizione
disegna la pagina principale
preleva la lista della categoria delle ricette
secondo i filtri e popola la lista dinamica
del template
upd: aggiona una categoria delle ricette
add: aggiunge una categoria delle ricette
del: elimina una categoria delle ricette
aggiunge una relazione tipologia - portata
- specifica
elimina una relazione tipologia - portata specifica
classe: BasicCon
Controllore che gestisce le azioni relative alle basi di preparazione.
funzione
parametri
index
form
datas
getAutocomplete table, substring
checkName
getList
name, id, table
filters
action
act
descrizione
disegna la pagina iniziale
disegna il form di inserimento della base
gestisce il popolamento della lista per
l’autocompletamento
controlla l’integrità del record (nome - id)
preleva la lista delle basi secondo i filtri e
popola la lista dinamica del template
del: elimina una base
mdel: elimina una o più basi
classe: SponsorsCon
Controllore che gestisce le azioni relative agli sponsor.
funzione
index
mgmt
parametri
descrizione
disegna la pagina iniziale
disegna la pagina per la lista degli sponsors
Descrizione delle classi
getProduct
filters
getList
filters
getId
id
action
act
71
preleva la lista dei prodotti con relativi
sponsors secondo i filtri e popola la lista
dinamica del template
preleva la lista degli sponsors secondo i
filtri e popola la lista dinamica del template
preleva gli id dei prodotti e restituisce la
lista degli sponsor relativi
cat upd: modifica uno sponsors dal db
cat add: aggiunge uno sponsors dal db
cat del: elimina uno sponsors dal db
del: elimina una associazione prodotto /
gruppo
mdel: elimina una o più associazioni prodotto / gruppo
link: associa dei prodotti ad un gruppo
delink: deassocia un prodotto ad un
gruppo
classe: InvitationsCon
Controllore che gestisce le azioni relative agli inviti ed alle promozioni.
funzione
index
parametri
invitations
promotions
invForm
proForm
getPromoList
filters
getUserList
filters
checkMail
actionProm
mail
act
descrizione
disegna la pagina della lista degli utenti
invitati
disegna la pagina per la spedizione degli
inviti
disegna la pagina per la gestione delle
promozioni
disegna la pagina per la gestione delle email
per gli inviti
disegna la pagina per la gestione delle email
per le promozioni
preleva la lista delle promozioni secondo i
filtri e popola la lista dinamica del template
preleva la lista degli utenti invitati secondo i filtri e popola la lista dinamica del
template
controlla se la mail è presente nel database
start: attiva una promozione
stop: ferma una promozione
delete: elimina una promozione
add: aggiunge una promozione
updtext: aggiorna i testi delle mail relativi
alla promozione
72
actionInv
Sviluppo
act
getRandomString length
send
mail
updtext: aggiorna i testi delle mail relativi
alla promozione
accept: accetta un utente che arriva da una
promozione
invite: spedisce un invito all’utente richiedente
delete: elimina un utente invitato
genera un codice casuale di lunghezza
length
spedisce una mail di invito
Descrizione delle classi
73
MODEL
classe: IngredientsMod
Modello che gestisce il trattamento dei dati relativi agli ingredienti.
funzione
getTypologies
getUM
getUmById
parametri
id
getCategories
getDataById
getReference
queryList
id
id
cont, params
queryReport
cont, params
update
add
delete
ignore
changeStatus
id, data
data
id
id
id, type
descrizione
preleva tutte le tipologie degli ingredienti
preleva tutte le unità di misura
preleva le unità di misura associate ad un
ingrediente
preleva tutte le categorie per gli ingredienti
preleva un ingrediente dal suo id
controlla se l’ingrediente ha delle referenze
preleva la lista degli ingredienti secondo i
filtri imposti (viene richiamata sia per ritornare il numero di record (cont = true)
sia per ritornare tutti i record richiesti
(cont = false))
preleva la lista degli ingredienti inseriti e
non approvati dagli utenti secondo i filtri
imposti (viene richiamata sia per ritornare il numero di record (cont = true) sia
per ritornare tutti i record richiesti (cont
= false))
aggiorna l’ingrediente nel db
aggiunga l’ingrediente nel db
elimina l’ingrediente nel db
ignora un elemento nella lista dei report
cambia lo stato (approvato o meno) di un
prodotto (ingrediente, vino, ricetta)
classe: CatIngredientsMod
Modello che gestisce il trattamento dei dati relativi alle categorie degli
ingredienti.
funzione
parametri
records
descrizione
contiene i nomi dei campi delle tabelle interessate
[0] => tabella
[1] => tabella i18n
[2] => chiave primaria
[3] => chiave esterna relativa
[4] => valore
74
Sviluppo
queryList
cont, params
update
id, data
add
data
delete
getReference
id
id
preleva la lista delle categorie degli ingredienti secondo i filtri imposti (viene richiamata sia per ritornare il numero di record
(cont = true) sia per ritornare tutti i record
richiesti (cont = false))
aggiorna la categoria degli ingredienti nel
db
aggiunge la categoria degli ingredienti nel
db
elimina la categoria degli ingredienti nel db
controlla se la categoria degli ingredienti ha
delle referenze
classe: WinesMod
Modello che gestisce il trattamento dei dati relativi ai vini.
funzione
getdataById
getReference
queryList
parametri
id
id
cont, params
update
add
delete
id ,data
data
id
descrizione
preleva un vino dal suo id
controlla se il vino ha delle referenze
preleva la lista dei vini secondo i filtri imposti (viene richiamata sia per ritornare
il numero di record (cont = true) sia per
ritornare tutti i record richiesti (cont =
false))
aggiorna il vino nel db
aggiunge un vino nel db
elimina il vino nel db
classe: RecipesMod
Modello che gestisce il trattamento dei dati relativi alle ricette.
funzione
getCategories
getFeatures
parametri
getdataById
getAcValues
id
table, search
queryList
cont, params
descrizione
preleva tutte le categorie delle ricette
preleva tutte le caratteristiche della ricetta
(a scelta multipla)
preleva una ricetta dal suo id
preleva i valori per popolare l’autocompletamento
preleva la lista delle ricette secondo i filtri
imposti (cont = true => conto i record,
altrimenti restituisco la lista)
Descrizione delle classi
queryListAdv
cont, params
checkName
name, id
refreshPrice
id, um, qta
update
add
delete
id, data
data
id
75
preleva la lista delle ricette secondo i filtri imposti (per la ricerca avanzata) (cont
= true => conto i record, altrimenti
restituisco la lista)
controlla l’integrità nome - id (per l’ingrediente)
calcola prezzo calorie e netto tramite
ingrediente, quantità e unità di misura
aggiorna la ricetta nel db
aggiunge la ricetta nel db
elimina la ricetta nel db
classe: CatRecipesMod
Modello che gestisce il trattamento dei dati relativi alle categorie delle
ricette.
funzione
parametri
records
queryList
cont, params
update
add
delete
getReference
id, data
data
id
id
getTypologies
getCourse
typ
getCourseSpec
typ, cou
getNumRecipes
typ, cou, csp
getOther
typ, cou
descrizione
contiene i nomi dei campi delle tabelle interessate
[0] => tabella
[1] => tabella i18n
[2] => chiave primaria
[3] => chiave esterna relativa
[4] => valore
preleva la lista delle categoria delle ricette secondo i filtri imposti (viene richiamata sia per ritornare il numero di record
(cont = true) sia per ritornare tutti i record
richiesti (cont = false))
aggiorna la categoria delle ricette nel db
aggiunge la categoria delle ricette nel db
elimina la categoria delle ricette nel db
controlla se la categoria delle ricette ha
delle referenze
preleva tutte le tipologie delle ricette
presenti nel db
preleva tutte le portate relative alla
tipologia scelta
preleva tutte le specifiche relative alla
coppia tipologia - portata scelta
ritorna il numero delle ricette presenti per
la tripla tipologia - portata - specifica
scelta
preleva tutte le specifiche NON relative alla
coppia tipologia - portata scelta
76
Sviluppo
addCourse
addCourseSpec
typ, cou
typ, cou, csp
delCourse
delCourseSpec
typ, cou
typ, cou, csp
aggiunge una relazione tipologia - portata
aggiunge una relazione tipologia - portata
- specifica
elimina una relazione tipologia - portata
elimina una relazione tipologia - portata specifica
classe: BasicMod
Modello che gestisce il trattamento dei dati relativi alle basi di
preparazione.
funzione
getTypologies
parametri
queryList
cont, params
getAcValues
table, search
add
recipe,
ingredient
delete
id
createLinkedText text
descrizione
preleva tutte le tipologie sia delle ricette
che degli ingredienti
preleva la lista delle basi secondo i filtri
imposti (cont = true => conto i record,
altrimenti restituisco la lista)
preleva i valori per popolare l’autocompletamento
aggiunge una base nel database
elimina una base nel database
sostituisce le parole di un testo con un collegamento alla relativa corrispondenza ad
una base di preparazione
classe: SponsorsMod
Modello che gestisce il trattamento dei dati relativi agli sponsor.
funzione
getSponsors
getIdByProduct
parametri
productList
cont, params
queryList
cont, params
delete
id
ids
descrizione
preleva tutti gli sponsors
preleva tutti gli id degli sponsors che hanno una o più associazioni con i prodotti
richiesti
preleva la lista dei prodotti associati a degli sponsors secondo i filtri imposti (cont
= true => conto i record, altrimenti
restituisco la lista)
preleva la lista degli sponsors secondo i filtri imposti (cont = true => conto i record,
altrimenti restituisco la lista)
elimina una associazione prodotto/gruppo
nel db
Descrizione delle classi
linkTo
sponsor, id, type
deLink
sponsor, id, type
cat update
cat add
cat delete
id, data
data
id
77
crea un’associazione prodotto/gruppo nel
db
cancella un’associazione prodotto/gruppo
nel db
aggiorna uno sponsor nel db
aggiunge uno sponsor nel db
elimina uno sponsor nel db
classe: InvitationsMod
Modello che gestisce il trattamento dei dati relativi agli inviti.
funzione
getTypologies
parametri
setStatusProm
deleteProm
getText
updText
addPromo
queryPromoList
id, value
id
value
value, data
data
cont, params
queryUserList
cont, params
checkMail
addInvite
updInvite
mail
mail, code
id, data
activeUser
deleteInv
sendmail
getInvitebyId
id
id
type, data
id
descrizione
preleva tutte le tipologie sia delle ricette
che degli ingredienti
imposta lo stato di una promozione
elimina una promozione
preleva il testo delle mail
aggiorna il testo delle mail
aggiunge una promozione
preleva la lista delle promozioni secondo
i filtri imposti ( cont = true => conto i
record, altrimenti restituisco la lista )
preleva la lista degli utenti invitati secondo
i filtri imposti ( cont = true => conto i
record, altrimenti restituisco la lista )
restituisce vero se la mail è presente nel db
aggiunge un utente nella lista degli invitati
aggiorna lo stato di un utente tra la lista
degli invitati
attiva un utente in promozione
elimina un utente dalla lista degli invitati
invia una mail
estrae i dati di un utente invitato tramite
il suo id
78
Sviluppo
VIEW
sezione: basic
Contiene le pagine HTML relative alle basi di preparazione
nome pagina
form.html
list.html
descrizione
pagina per l’inserimento di una nuova base di preparazione
visualizza la lista di tutte le basi di preparazione
sezione: ingredients
Contiene le pagine HTML relative agli ingredienti
nome pagina
catList.html
form.html
list.html
report.html
descrizione
visualizza le liste e gestisce le categorie degli ingredienti
pagina per l’inserimento e la modifica di un ingrediente
visualizza la lista degli ingredienti
visualizza la lista degli ingredienti suggeriti dall’utente
sezione: invitations
Contiene le pagine HTML relative agli inviti e promozioni
nome pagina
invForm.html
invitations.html
list.html
proForm.html
promotions.html
descrizione
pagina per la modifica dei testi delle mail relativi agli inviti
pagina per la spedizioni degli inviti
visualizza la lista degli utenti invitati
pagina per la modifica dei testi delle mail relativi alle
promozioni
pagina per la gestione delle promozioni
sezione: recipes
Contiene le pagine HTML relative alle ricette
nome pagina
advList.html
catList.html
form.html
list.html
relationsList.html
sezione: sponsors
descrizione
ricerca avanzata per le ricette
visualizza le liste e gestisce le categorie delle ricette
pagina per l’inserimento e la modifica di una ricetta
visualizza la lista delle ricette
gestisce le relazioni padre/figlio per tipologie, portate e
specifiche di portata
Descrizione delle classi
Contiene le pagine HTML relative agli sponsors
nome pagina
catList.html
list.html
descrizione
pagina per la gestione degli sponsor
visualizza la lista dei prodotti associati agli sponsors
sezione: wines
Contiene le pagine HTML relative ai vini
nome pagina
form.html
list.html
descrizione
pagina per l’inserimento e la modifica di un vino
visualizza la lista dei vini
79
80
4.3.2
Sviluppo
Parte Pubblica
Nella tabella successiva verrano brevemente elencati i moduli della parte
pubblica specificando le relazioni che intercorrono tra le classi controllore, i
modelli e le viste.
modulo
ingredienti
controllore
IngredientsCon
modelli
IngredientsMod
ricette
RecipesCon
RecipesMod
CheckListMod
homepage
IndexCon
login
LoginCon
registrazione
profilo personale
RegisterCon
MyMagikCon
RegisterMod
RecipesMod
LoginMod
SponsorsMod
RegisterMod
MyMagikMod
RecipesMod
IngredientsMod
lista della spesa
ChecklistCon
ChecklistMod
viste
form.html
index.html
advanced.html
details.html
index.html
index.html
index.html
details.html
index.html
form.html
recipes.html
index.html
Di seguito vengono elencate in dettaglio tutte le funzioni di ogni classe
dell’applicazione della parte pubblica.
CONTROLLER
classe: CheckListCon
Controllore che gestisce le azioni relative alla lista della spesa.
funzione
index
parametri
servings
action
todo
descrizione
pagina principale della lista della spesa
servings: aggiorna la lista se il parametro
non è nullo
add: aggiunge una ricetta alla lista
rem: rimuove una ricetta dalla lista
classe: IngredientCon
Controllore che gestisce le azioni relative agli ingredienti.
funzione
parametri
descrizione
Descrizione delle classi
index
params, owner
details
id
detailsWine
id
setQuickIng
name
getData
datas
add
update
delete
datas
datas
id
81
disegna la pagina della lista degli ingredienti, i parametri rappresentano un filtro per
nome e il paging dei risultati.
owner: se presente visualizza solo gli
ingredienti relativi all’utente loggato
preleva gli attributi specifici dell’ingrediente richiesto
preleva gli attributi specifici del vino
richiesto
inserisce un nuovo ingrediente per l’utente
dalla lista di una ricetta
acquisisce i dati dopo l’invio del form di
inserimento/modifica dell’ingrediente
aggiunge un nuovo ingrediente
modifica un ingrediente
elimina un ingrediente
classe: LoginCon
Controllore che gestisce le azioni relative al login.
funzione
index
logout
parametri
user, password
descrizione
controlla la correttezza del login
effettua il logout eliminando la sessione
relativa
classe: MyMagikCon
Controllore che gestisce le azioni relative alla azioni relative al profilo
utente.
funzione
index
parametri
recipes
details
userid
ingredientForm
recipeForm
upFile
file
descrizione
disegna la pagina del profilo dell’utente
loggato
disegna la pagina della gestione delle ricette personali e favorite e degli ingredienti
personali
disegna la pagina del profilo dell’utente
richiesto
form per l’inserimento/modifica degli ingredienti personali
form per l’inserimento/modifica delle ricette personali
caricamento di un’immagine per una
ricetta
82
Sviluppo
upAvatar
deleteImg
file
id
sortImg
ids
caricamento della foto profilo dell’utente
eliminazione di un immagine relativa ad
una ricetta
ordinamento di immagini di una ricetta
classe: RecipesCon
Controllore che gestisce le azioni relative alle ricette.
funzione
index
parametri
params
details
id, comment, error
advanced
params
refreshCat
idT, idC
getAutocomplete tab, term
vote
user, recipe, vote
checkProduct
table, nome
favourite
recipe, user
refreshPrice
ing, um, qta
getData
add
update
delete
datas
datas
datas
recipe
descrizione
disegna la pagina delle ricette, i parametri rappresentano un filtro per nome e il
paging dei risultati
disegna la pagina relativa alla ricetta richiesta
comment: gestisce i commenti, inserimento e cancellazione
error: segnala eventuali errori nel caricamento dell’immagine
pagina per la ricerca avanzata delle ricette
params: parametri della ricerca avanzata e
relativo paging
ricarica le liste delle categorie a seconda
delle categorie selezionate
estrae i termini per l’autocomplete
gestione della votazione della ricetta
controlla l’integrità nome - record
gestione dell’attributo favorito per la
ricetta
ricalcola prezzo, netto e calorie di un determinato ingrediente a seconda dei parametri
passati
acquisisco i dati dal form per la ricetta
aggiungo una ricetta
aggiorno una ricetta
elimino una ricetta
classe: RegisterCon
Controllore che gestisce le azioni relative alla registrazione.
funzione
parametri
descrizione
Descrizione delle classi
index
params
checkMail
save
update
mail
datas
datas
83
disegna la pagina della registrazione
params: dati relativi ai codici di invito,
promozione o richiesta invito
controlla se la mail è già presente nel db
salva i dati del nuovo utente
aggiorna i dati dell’utente
84
Sviluppo
MODEL
classe: CheckListMod
Modello che gestisce il trattamento dei dati relativi alla lista della spesa.
funzione
addToList
getIfList
parametri
recipe, user
recipe, user
delFromList
recipe, user
getAllList
user
getIngredients
id, servings
createList
ingredients
descrizione
aggiunge una ricetta alla lista della spesa
determina se una ricetta appartiene o meno
alla lista della spesa dell’utente in sessione
elimina una ricetta dalla lista della spesa
di un utente
preleva tutte le ricetta della lista della
spesa di un utente
preleva la lista degli ingredienti di una determinata ricetta
servings: se presente calcola quantità
prezzo per le nuove portate richieste
normalizza una lista di ingredienti con
duplicati sommando prezzo e quantità
classe: IngredientsMod
Modello che gestisce il trattamento dei dati relativi agli ingredienti.
funzione
getList
parametri
page,
search,
owner
setQuickIng
name, user
myIngredients
getFeatures
add
user
checkOwner
ingredient, user
getDataById
ingredient
update
delete
getWineById
id, data
id
id
data, user
classe: LoginMod
descrizione
ottiene una lista di ingredienti limitati da
una ricerca per nome
owner: se presente prelevo solamente gli
ingredienti dell’utente richiesto
inserisce un nuovo ingrediente dalla lista di
una ricetta
preleva gli ingredienti di un utente dal db
preleva le categorie degli ingredienti
aggiunge un nuovo ingrediente del relativo
utente
controllo se l’ingrediente appartiene all’utente
preleva l’ingrediente richiesto ed i suoi
attributi
aggiorna un ingrediente nel db
elimina un ingrediente
preleva il vino richiesto ed i suoi attributi
Descrizione delle classi
85
Modello che gestisce il trattamento dei dati relativi al login.
funzione
checkData
parametri
username, password
descrizione
controlla la correttezza dei dati inseriti per
il login
classe: MyMagikMod
Modello che gestisce il trattamento dei dati relativi al profilo utente.
funzione
myRecipes
getFavourites
parametri
user
user
setDataImg
data, id, type
upload
deleteImg
sortImg
file, name, id
id
position, item
descrizione
preleva le ricette relative ad un utente
preleva le ricette favorite di un determinato
utente
imposta i dati relativi all’upload di una
nuova immagine
esegue l’upload dell’immagine
elimina l’immagine
aggiorna la priorità delle immagini relative
ad una ricetta
classe: RecipesMod
Modello che gestisce il trattamento dei dati relativi alle ricette.
funzione
getList
parametri
page, search
getTopRecipes
getDataById
getAcValues
id
table, search
vote
addComment
delComment
getFeatures
num, id , user
comment, recipe, user
id
getCourse
idT
getCourseSpec
idT, idC
queryListAdv
page, params
descrizione
ottiene una lista di ricette limitata per
nome e paging
ottiene le sei ricette con il voto maggiore
preleva la ricetta richiesta e i suoi attributi
ottiene la lista di prodotto per l’autocompletamento
salva nel db la votazione
aggiunge un commento relativo ad una
ricetta
elimino il commento
ottiene le caratteristiche generali delle
ricette
ottiene portate a seconda della tipologia di
ricetta scelta
ottiene le specifiche delle portate a seconda
delle portate e del tipo di ricetta
preleva una lista limitata di ricette tramite
una ricerca avanzata
86
Sviluppo
checkProduct
addFavourite
name, table
id, user
getFavourite
id, user
delFavourite
id, user
createLinkedText text
getUmById
id
refreshPrice
ing, um, qta
add
checkOwner
data, user
id, user
update
delete
id, data
id
controlla l’integrità prodotto - id
aggiunge una ricetta ai preferiti di un
determinato utente
determina se una ricetta appartiene o meno
alla lista delle preferite di un utente
elimina una ricetta tra le preferite di un
utente
sostituisce le parole di un testo con un collegamento alla relativa corrispondenza ad
una base di preparazione
ottiene le unità di misura di un ingrediente
specifico
calcola prezzo, calorie e netto di un
ingrediente dati i parametri
aggiunge una ricetta nel database
controlla se l’utente è il proprietario della
ricetta
aggiorna una ricetta nel db
elimina una ricetta dal db
classe: RegisterMod
Modello che gestisce il trattamento dei dati relativi alle registrazioni.
funzione
checkInv
parametri
mail, code
checkPromo
code
checkMail
mail
activateInv
setPromo
getText
sendMail
data
data
value
data, type
checkHash
mail, hash
addRequest
updateUser
data, email
data
descrizione
controlla se mail e codice corrispondono ad
un invito
controlla se il codice corrisponde ad una
promozione
controlla se la mail è già presente nel
database
attiva un utente invitato
aggiunge i dati di un utente promozione
preleva il testo delle mail
invia le mail relativi alle conferme di inviti
e promozioni
effettua il controllo della correttezza della
mail
aggiunge una richiesta di invito nel db
aggiorna i dati di un utente
Descrizione delle classi
87
VIEW
sezione: checklist
Contiene le pagine HTML relative alla lista della spesa
nome pagina
index.html
descrizione
visualizza e gestisce la lista della spesa dell’utente
sezione: ingredients
Contiene le pagine HTML relative agli ingredienti
nome pagina
index.html
descrizione
visualizza la lista degli ingredienti
sezione: ingredients
Contiene le pagine HTML relative agli ingredienti
nome pagina
index.html
descrizione
visualizza la lista degli ingredienti
sezione: mymagik
Contiene le pagine HTML relative al profilo utente
nome pagina
descrizione
details.html
visualizza la scheda utente
index.html
gestisce il profilo dell’utente
ingredientForm.html
permette l’inserimento e la modifica degli ingredienti
personali
recipeForm.html permette l’inserimento e la modifica delle ricette personali
recipe.html
visualizza la lista di ricette preferite e ingredienti e ricette
personali
sezione: recipes
Contiene le pagine HTML relative alle ricette
nome pagina
advanced.html
details.html
index.html
descrizione
pagina per le ricerche avanzate delle ricette
visualzza la ricetta in dettaglio
visualizza la lista delle ricette
88
Sviluppo
Capitolo 5
Test
Durante lo sviluppo dell’applicazione è stata effettuata una continua attività di verifica e validazione ai fini di poter garantire un prodotto sicuro e
conforme agli standard di qualità dell’azienda.
La maggiorparte della verifica statica sul codice è stata fatta dall’ambiente di sviluppo Komodo (editor di testo specializzato in linguaggi di programmazione relazionati con tecnologie alla base del web).
Esso fornisce già in fase di scrittura una sicurezza notevole per evitare errori di battitura, parenterizzazione, incompatibilità di tipi o inizializzazioni
errate di variabili segnalando instantaneamente l’errore e fornendone una
possibile soluzione.
La correttezza del flusso dell’informazione è stata verificata tramite numerosi test effettuati in parallelo alla fase di sviluppo cercando di simulare ogni
possibile azione e forzando all’errore il sistema. Questi test sono stati effettuati prima su singole porzioni di codice e successivamente sulle classi intere
e ripetuti ad ogni modifica dovuta alla correzione degli errori riscontrati.
Al termine dello sviluppo dell’applicazione MagikChef sono stati effettuati dei test automatici per controllare la possibile presenza dei cosidetti
“link morti”, ossia dei collegamenti all’interno del portale la quale destinazione sia errata o non definita, tramite l’utilizzo dell’applicativo open source
Xenu’s Link.
Grossa attenzione è stata inoltre rivolta al corretto funzionamento dei numerosi form presenti nel portale. Per ognuno di essi è stato necessario verificare
tutte le possibili risposte dovute all’inserimento di caratteri speciali, all’introduzione di dati incompatibili o al mancato inserimento di dati obbligatori,
controllando attentamente che il sistema rispondesse, se necessario, con il
corretto messaggio d’errore.
Data la funzionalità dell’upload di immagini sono stati eseguiti test specifici
con particolare attenzione alla gestione dei file di grandi dimensioni, per i
90
Test
quali è stata fissata una dimensione massima, e per l’upload di file potenzialmente pericolosi o corrotti.
I test per le funzionalità relative al database si sono concentrati nella risoluzione del requisito che prevedeva la gestione di un elevato carico di informazioni. Inizialmente è stato testato l’intero sistema con un database privo
di informazioni, successivamente, dopo aver controllato il corretto funzionamento di tutte le query, il database è stato gradualmente riempito, monitorando, a seconda del numero dei record inseriti, la velocità delle varie query
tramite lo strumento query Analizer di MySQL. Quindi, laddove si è reso
necessario, è stata migliorata la struttura delle query per renderle più veloci.
In conclusione è stato richiesto ad alcuni dipendenti dell’azienda Aleaweb
di visitare il portale e segnalare eventuali bug o suggerimenti, spedendo a
ciascuno di essi un personale invito elettronico (come da funzionalità MagikChef). I tester comprendevano sia persone esperte nell’ambito informatico
che non ed è stato importate notare come, seppur senza la presenza di un
manuale utente e di suggerimenti vari, la maggiorparte delle persone sono
riuscite ad esplorare la gran parte delle sezioni del sito ed apprenderne le
funzionalità.
Capitolo 6
Conclusioni
L’applicativo web MagikChef è stato progettato e sviluppato interamente
nelle 320 ore previste dall’attività di stage, grazie ad una buona attività di
analisi che ha permesso di selezionare i requisiti principali realizzabili nel
tempo prefissato.
Nonostante la maggiorparte delle scelte tecnologiche fosse un requisito imposto dall’azienda esse si sono rivelate un ottimo supporto per lo sviluppo
dell’applicazione. Sarebbe stato molto interessante però analizzare linguaggi
di programmazione alternativi a PHP, in particolare confrontarne le differenze con Ruby che attraverso il framework Ruby on Rails, fortemente ispirato
al paradigma MVC, sarebbe risultato un’ottima (o forse migliore) alternativa. Non risulta invece un vincolo dell’applicazione la scelta del gestore
di database MYSQL, perchè grazie all’utilizzo della classe PDO di PHP è
possibile utilizzare RDBMS differenti quali PostgreSQL o SQLite adottando
poche modifiche al codice e, se necessario, alle query.
Grave è il fatto che nell’attività di stage non è stato mai preso in considerazione il problema di sviluppare un sito web accessibile secondo le norme
vigenti; ma questo requisito verrà sicuramente analizzato in un probabile
sviluppo futuro e il suo sviluppo sarà facilitato grazie al pattern MVC adottato nella progettazione dell’applicativo. Esso infatti, permette un’ottima
separazione tra il codice PHP e quello HTML rendendo molto più semplice
e veloce l’implementazione ed il test di codice standard.
Durante le attività di progettazione e sviluppo sono emersi ulteriori requisiti che sono stati soddisfatti, come la possibilità di associare un prodotto ad
uno sponsor o l’inserimento rapido degli ingredienti durante la compilazione
di una ricetta. Altri sono stati lasciati da parte per uno sviluppo futuro.
92
Conclusioni
6.1
Sviluppi Futuri
Tra i requisiti emersi, i più interessanti e meritoveli di uno sviluppo futuro
sono:
• Gestione di menù
Descrizione: dovrà essere introdotta la possibilità di creare, modificare
ed eliminare un proprio menu, ossia un insieme di ricette e bevande
che compongano un pasto completo.
• Registrazione Pubblica
Descrizione: permettere ad ogni visitatore di effettuare una registrazione e consultare liberamente il sito eliminando cosı̀ la limitazione
d’accesso ai soli invitati da parte dell’amministratore. Questo requisito farà emerge numerose problematiche quali la creazione di un sistema di moderazione dei dati e la gestione di una cospicua quantità di
informazioni.
• Ampliamento della componente sociale del portale
Descrizione: creazione di una messaggistica interna per gli utenti, possibilità della gestione di un blog personale, creazione di una rete di
amicizie, ecc.
• Interazione con i principali social network
Descrizione: creazione di funzionalità lato utente che permettano di
condividere ricette proprie o altrui verso i pricipali social network come
facebook, twitter, delicious, ecc.
• Sezione video
Descrizione: inserimento di una sezione video, all’interno della quale
ogni utente possa pubblicare il video della propria ricetta o video affini.
• Sezione mobile
Descrizione: creazione di un applicativo sviluppato per la visualizzazione e la gestione del proprio profilo del portale attraverso apparecchi
mobili.
• Validazione e accessibilità
Descrizione: il portale dovrà essere validato rispetto ai validatori del
W3C e dovrà rispettare le principali regole dell’accessibilità nell’ottica
di rendere il sito il più fruibile possibile da parte di tutti gli utenti.