Documente Academic
Documente Profesional
Documente Cultură
LUCRARE DE LICEN
Dorminator Aplicaie Web-based
GENERALITI 4
CAPITOLUL 1. INTRODUCERE 6
1.1. Motivaie 6
1.2. Tema proiectului 6
CAPITOLUL 2. TEHNOLOGII 7
2.1. PHP 7
2.2. MySQL 8
2.3. CoffeeScript 8
2.4. jQuery 9
2.5. AJAX 10
2.6. HTML 10
2.7. CSS 11
2.8. Bootstrap 11
2.9. Laravel 11
CAPITOLUL 3. CONCEPTE TEORETICE 13
3.1. Concepte OPP 13
3.2. Concepte MVC 14
3.3. Expresii regulate 15
3.4. Structuri de date 15
3.4. Protocolul HTTP 15
3.5. UML: Use Case Diagrams 16
CAPITOLUL 4. SPECIFICAIILE APLICAIEI 17
4.1. Prezentare general a aplicaiei 17
4.2. Implementare 17
CAPITOLUL 5. MODALITATEA DE STOCARE A DATELOR 30
5.1. Concepte necesare realizrii bazei de date 30
5.2. Crearea bazei de date folosind Migrations 31
5.3. Tipuri de utlizatori 33
5.3.1. Administrator 33
5.3.2. Student 34
CAPITOLUL 6. TESTARE 35
6.1. Unit Testing 35
6.2. Domain Testing 35
6.3. Destructive Testing 36
6.4. System Testing 36
CAPITOLUL 7. CONCLUZII 37
7.1. Concluzii 37
7.2. Posibiliti de dezvoltare 37
BIBLIOGRAFIE 38
ANEXE 40
GENERALITI
Aceast aplicaie i are rdcinile n nevoia automatizrii unui job relativ simplu,
dar ce necesit o perioad mai ndelungat de procesare, acela de repartizare a studenilor
n cmine. Nevoia de a nlocui acest proces manual cu unul automatizat am simit-o la
rndul meu n perioadele de cazare, cnd lipsa de organizare i timpul de ateptare pn la
finalizarea documentelor cretea exponenial starea de tensiune.
Prezenta lucrare prezint o implementare a acestui job, prin care sper c se vor
elimin timpul de ateptare, erorile umane posibile, eventualele deplasri nejustificate i
cel mai important, stresul.
Lucrarea este mprit n 7 capitole, fiecare dintre acestea fiind mprite n mai
multe subcapitole cu subtitluri descriptive. Am inclus mai jos cte o descriere succint a
fiecrui capitol prezent n lucrarea de licen.
Capitolul 1: Introducere prezint date generale despre lucrare, precum i
prezentarea pe scurt a aplicaiei.
Capitolul 2: Tehnologii conine enumerarea i descrierea fiecrei tehnologii
utilizate n cadrul dezvoltrii proiectului, cum ar fi HTML, SCSS, CoffeeScript folosite
pentru Front-End, PHP orientat pe obiecte folosit pentru Back-End. Acest capitol mai
cuprinde noiuni despre tool-urile folosite n procesul de dezvoltare al aplicaiei, dar i
concepte de baze de date relaionale, de tip SQL.
Capitolul 3: Concepte Teoretice are menirea de a prezenta conceptele teoretice
fr de care att aplicaia ct i lucrarea de licen nu ar fi putut fi finalizate.
Capitolul 4: Specificaiile aplicaiei prezint caracteristicile generale, logica,
evoluia, dar i implementarea aplicaiei ajutat de numeroase linii de cod ce reprezint
componentele de baz ale acesteia.
Capitolul 5: Modalitatea de stocare a datelor face referire la extensia folosit
pentru stocarea i manipularea datelor. Pentru o nelegere mai bun a acestora, n acest
capitol exist i diagrame UML de clase.
Capitolul 6: Testare cuprinde rezultatele obinute la finalul dezvoltrii aplicaiei.
Testarea joac un rol important n realizarea i evaluarea calitii unui produs software.
Pe de o parte, se mbuntete calitatea produselor n timp ce repetm un ciclu de
depanare-remediere n timpul dezvoltrii. Pe de alt parte, evalum ct de bun este
4
sistemul nostru atunci cnd efectum teste la nivel de sistem nainte de a lansa un
produs.[1]
Capitolul 7: Concluzii face referire la opinia mea personal despre aceast
aplicaie, dar i posibilitile ulterioare de dezvolatare ale acesteia.
5
CAPITOLUL 1.
INTRODUCERE
1.1. Motivaie
Aa cum am specificat mai sus, aceast aplicaie are ca scop principal
mbuntirea procesului de cazare al studenilor.
Deoarece trim n era tehnologiei, n care, pe zi ce trece aplicaiile devin din ce n
ce mai utile pentru om, se simte nevoia eliminrii efortului uman din domenii diferite, un
exemplu fiind aceast aplicaie. Direcia ctre o aplicaie web s-a datorat faptului c peste
90% din studeni au acces la internet de mare vitez chiar de pe telefonul mobil.
Momentul n care m-am decis c trebuie dezvoltat o asemenea aplicaie a fost
acela n care am aplicat la rndul meu pentru un loc n cmin, experien pe care nu mai
doresc s o retriesc att eu ct i ali studeni.
6
CAPITOLUL 2.
TEHNOLOGII
2.1. PHP
Exist multe tehnologii disponibile pentru crearea de aplicaii web dinamice.
Cele mai obinuite sunt ASP.NET (Actice Server Pages), JSP (Java Server Pages,
ColdFusion, Ruby on Rails[2] i nu n ultimul rnd PHP.
Iniial, PHP venea de la Personal Home Page aa cum a fost creat in 1994 de
ctre Rasmus Lerdof ce folosea limbajul pentru a urmrii numrul de vizitatori de pe
CV-ul su online. Pe msur ce utilitatea i capacitile sale au crescut (i pe msur ce
au nceput s fie utilizat n situaii mai profesionale) a ajuns s nsemne PHP: Hypertext
Preprocessor.[2]
PHP poate fi ncorporat n HTML, ceea ce nseamn c poi s iei o pagin
HTML standard, s arunci acolo puin PHP i o s ai un rezultat dinamic. Acest atribut
face limbajul foarte accesibil pentru oricine a lucrat puin cu HTML.[2]
De asemenea PHP este un limbaj de scripting nu unul compilat. Scripturile PHP
se execut numai dup apariia unui eveniment de exemplu, atunci cnd un utilizator
trimite un formular sau merge la o adres URL (Uniform Resource Locator). PHP este o
tehnologie de tip server-side cross-platform, ambele descrieri fiind importante. Server-
side se refer la faptul c tot ceea ce face PHP se execut pe server. Este necesar o
aplicaie pentru server web, cum ar fi Apache sau Microsoft IIS (Internet Information
Services), iar toate scripturile acestuia trebuie s fie accesate printr-o adres URL. Cross-
platform nseamn ca PHP ruleaz pe majoritatea sistemelor de operare, inclusiv
Windows, Unix (i mai multe variante) i Macintosh. Mai important de att este faptul c
scripturile scrise pe un server vor funciona n mod normal pe un altul cu foarte puine sau
deloc modificri.[3]
Modelul Client-Server
7
Am folosit PHP deoarece ofer performane excelente, o strns integrare cu
aproape orice tip de baze de date, stabilitate, portabilitate i un numr extrem de mare de
extensii. Pe de alt parte, fiind un limbaj open-source, acesta nu cost nimic i se pot
finaliza aplicaii complexe folosindu-l (Yahoo, Facebook).
2.2. MySQL
MySQL este cea mai popular baz de date open-source din lume. De fapt, astzi
MySQL este un concurent viabil pentru firmele cu renume, cum ar fi Oracle i Microsoft
SQL Server (i, ironic, MySQL este deinut de Oracle). Ca i PHP, MySQL ofer
performane excelente, portabilitate i fiabilitate, cu o curb moderat de nvare.[2]
MySQL este cunoscut pentru gestiunea bazelor de date ce conin circa 60.000 de
tabele cu mai mult de 5 miliarde de rnduri. MySQL poate lucra cu tabele de pn la 8
milioane de terabytes pe unele sisteme de operare. MySQL este folosit de NASA i de
Biroul de Recensmnt al Statelor Unite, printre multe altele.[3]
2.3. CoffeeScript
Pe 13 decembrie 2009, Jeremy Ashkenas a fcut primul commit pe Git de
CoffeeScript cu comentariul: "comiterea iniial a limbajului misterului". Compilatorul a
fost scris n Ruby. La 24 decembrie, a fcut prima lansare de tag-uri i documentaie,
0.1.0. Pe 21 februarie 2010, el a updatat la versiunea 0.5, n care a nlocuit compilatorul
Ruby cu o versiune auto-gazd n CoffeeScript pur. n acest timp, proiectul a atras mai
muli contribuitori pe GitHub i a primit peste 300 de accesri pe zi. Pe 24 decembrie
2010, Ashkenas a anunat lansarea versiunii 1.0.0 stabil pentru Hacker News, site-ul
unde proiectul a fost anunat pentru prima dat.[4]
8
CoffeeScript este un limbaj care se compileaz n JavaScript i ncearc s
expun prile bune ale JavaScript-ului ntr-un mod simplu.[5]
Regula de aur a CoffeeScript-ului este: "Its just JavaScript". Codul se
compileaz unu la unu n JS echivalent i nu exist interpretare la timpul de execuie.
Putei utiliza orice bibliotec JavaScript existent fr probleme de la CoffeeScript (i
invers). Ieirea compilat este uor de citit i tinde s ruleze la fel de repede sau mai
repede dect JavaScript echivalent scris de mn.[5]
2.4. jQuery
jQuery este o platform de dezvoltare JavaScript, conceput pentru a uura i
mbunti procese precum traversarea arborelui DOM n HTML, managementul
inter-browser al evenimentelor, animaii i cereri tip AJAX. jQuery a fost gndit s fie ct
mai mic posibil, disponibil n toate versiunile de browsere importante existente, i s
respecte filosofia "Unobtrusive JavaScript". Biblioteca a fost lansat in 2006 de ctre John
Resig.[7]
Acesta a luat privirile dezvoltatorilor web, ctignd rapid sprijinul major al
site-urilor precum MSNBC i proiecte bine-cunoscute, inclusiv open-source SourceForge,
Trac i Drupal.[6]
jQuery se poate folosi pentru a rezolva urmtoarele probleme specifice
programrii web:
selecii de elemente n arborele DOM folosind propriul motor de selecii
open-source Sizzle, un proiect nscut din jQuery
parcurgere i modificarea arborelui DOM (incluznd suport pentru
selectori CSS 3 i XPath simpli)
nregistrarea i modificarea evenimentelor din browser
manipularea elementelor CSS
efecte i animaii
cereri tip AJAX
extensii [7]
9
2.5.AJAX
Ajax (sau AJAX), prescurtare pentru Asynchronous JavaScript and XML, este o
tehnic de programare pentru crearea de aplicaii web interactive. Intenia este s fac
paginile web s devin mai rapide i deci mai acceptate, prin schimbul n fundal al unor
cantiti mici de date cu serverul, astfel nct s nu fie nevoie ca pagina s fie rencrcat
la fiecare aciune a utilizatorului. Aceasta are ca scop creterea interactivitii, vitezei i
uurinei n utilizare a aplicaiilor web.[8]
Ajax nu este o tehnologie n sine. Termenul este folosit pentru definirea
aplicaiilor web ce folosesc un ansamblu de tehnologii:
HTML sau XHTML pentru structura semantic a informaiilor;
CSS pentru prezentarea informaiilor;
Javascript pentru interactivitate, pentru procesarea informaiilor prezentate;
Obiectul XMLHttpRequest pentru schimbul i manipularea informaiilor
ntr-o manier asincron cu server-ul web;
XML este folosit de obicei pentru transferarea datelor ntre server i client,
dei orice format funcioneaz, inclusiv HTML preformatat, text simplu
etc.[8]
2.6.HTML
2.7.CSS
Cascading Style Sheets (CSS) reprezint o modalitate puternic de a afecta
prezentarea unui document sau a unei colecii de documente. Evident, CSS este practic
inutil fr un document, deoarece nu ar avea niciun coninut de prezentat. Desigur,
definiia "documentului" este extrem de larg. De exemplu, Mozilla i browserele asociate
utilizeaz CSS pentru a afecta prezentarea browserului chrome n sine. Cu toate acestea,
fr coninutul butoanelor cromate, intrri de adrese, casete de dialog, ferestre i aa mai
departe - nu ar fi nevoie de CSS (sau de alte informaii de prezentare).[10]
2.8.Bootstrap
2.9.Laravel
Laravel este un framework rapid de dezvoltare al aplicaiilor. Aceasta nseamn
c se concentreaz pe o curb superficial (uoar) de nvare i pe minimizarea pailor
ntre pornirea unei noi aplicaii i publicarea ei. Toate cele mai obinuite sarcini n
construirea aplicaiilor web,cum ar fi interaciunile cu baza de date, autentificarea, cozile
de e-mail, cacheing-ul, sunt simplificate de componentele pe care Laravel le ofer.
11
Componentele lui Laravel nu sunt ns perfecte pe cont propriu; ele furnizeaz un API
consistent i structuri previzibile pe ntregul framework.[13]
Laravel ofer un ntreg ecosistem de instrumente pentru construirea i lansarea de
aplicaii. Exist Homestead i Valet pentru dezvoltare local, Forge pentru gestionarea
serverului i Envoyer pentru implementare avansat. Exist o suit de pachete
suplimentare: Cashier pentru pli i abonamente, Echo pentru WebSockets, Scout pentru
cutare, Passport pentru autentificarea API, Socialite pentru conectare social i Spark
pentru bootstrap. Laravel ncearc s elimine munca repetitiv ale dezvoltatorilor, astfel
nct s poat face ceva unic.[13]
12
CAPITOLUL 3.
CONCEPTE TEORETICE
3.1.Concepte OOP
Dei PHP nu este nc la fel de puternic pe partea de OOP precum alte limbaje de
programare, acesta deine toate conceptele teoretice necesare pentru dezvoltarea unei
aplicaii object-orientated.
Toate limbajele de programare se bazeaz pe aciuni cu date: un utilizator
introduce datele ntr-un formular HTML; codul PHP l valideaz, l trimite prin e-mail i
l stocheaz ntr-o baz de date; i asa mai departe. Acestea sunt doar verbe (aciuni) i
substantive (date). n programarea procedural, accentul se pune pe verbe: face asta, apoi
asta, apoi asta. n OOP, accentul se pune pe substantive: cu ce tipuri de lucruri va
funciona aplicaia? n ambele abordri, trebuie s identificai att substantivele, ct i
verbele necesare; diferena este n modul de proiectare a aplicaiei.[14]
Unul dintre principiile OOP este modularitatea: mprirea aplicaiilor n
subprile specifice. Site-urile Web fac multe, multe lucruri: interacioneaz cu bazele de
date, gestioneaz formularele, trimit e-mailuri, genereaz HTML etc. Fiecare dintre aceste
lucruri poate fi un modul, mai specific o clas. Prin separarea elementelor care nu au
legtur (dei interacioneaz), putei dezvolta cod n mod independent, putei face
ntreinerea i actualizrile mai puin dezordonate i putei simplifica depanarea.[14]
Un alt concept de baz este abstractizarea: clasele ar trebui s fie definite n linii
mari. De exemplu, n loc s proiectezi o clas pentru a interaciona cu o baz de date
MySQL, ar trebui s faci una care s interacioneze cu o baz de date nespecific. De
acolo, folosind motenirea i suprascrierea, ai defini o clas mai special pentru MySQL.
Aceast clas ar arta i ar aciona ca o clas general de baze de date, dar unele
funcionaliti ar fi personalizate.[14]
Un alt principiu OOP este ncapsularea: separarea i ascunderea modului n care
se realizeaz ceva. O clas bine conceput poate face tot ce ai nevoie fr s tii cum se
face. Cuplat cu ncapsularea este vizibilitatea, care dicteaz modul n care sunt disponibile
componente ale clasei.[14]
13
3.2.Concepte MVC
MVC (Model-View-Controller) este un model de proiectare software construit n
jurul interconectrii a trei tipuri principale de componente, ntr-un limbaj de programare,
cum ar fi PHP, de multe ori cu un accent puternic pe paradigmele software-ului de
programare orientat pe obiecte (OOP). Cele trei tipuri de componente sunt: modele,
vizualizri i controale.[15]
Modelele se bazeaz pe elemente din lumea real, cum ar fi o persoan, un cont
bancar sau un produs. Acestea sunt, de obicei, permanente i vor fi stocate n afara
aplicaiei, adesea ntr-o baz de date. Un model este mai mult dect date; el aplic toate
regulile de afaceri care se aplic acestor date.[16]
Views - Reprezentarea vizual a unui model, dat fiind un anumit context. Este,
de obicei, marcajul rezultat pe care framework-ul l red n browser, cum ar fi HTML.
View-ul este responsabil pentru generarea unei interfee de utilizator, bazat n mod
normal pe datele din model. Dei un view poate prezenta utilizatorului diferite modaliti
de introducere a datelor, view-ul nu se ocup niciodat de datele primite.[16]
Controller - Coordonatorul care asigur legtura dintre view i model.
Controller-ul este responsabil pentru procesarea intrrilor, care acioneaz asupra
modelului i pentru a decide ce aciuni ar trebui s fie efectuate, cum ar fi redarea unei
vizualizri sau redirecionarea ctre o alt pagin.[16]
14
3.3.Expresii regulate
O expresie regulat, regex sau regexp (numit uneori expresie raional) este, n
informatica teoretic i n teoria limbajelor formale, un ir de caractere care definesc un
ablon de cutare. De obicei, acest ablon este apoi utilizat de ctre algoritmii de cutare
pe iruri pentru operaiuni de cutare sau cutare i nlocuire operaiuni pe iruri de
caractere.
Conceptul a aprut n anii 1950, cnd matematicianul american Stephen Cole
Kleene a formalizat descrierea unui limbaj regulat. Conceptul a intrat n uz comun
mpreun cu utilitarele de prelucrare a textului din Unix. Astzi, exist diferite sintaxe
pentru scrierea expresiilor regulate, una fiind standardul POSIX i alta, utilizat pe scar
larg, fiind sintaxa Perl.
Expresiile regulate sunt folosite n motoarele de cutare, de dialogurile de cutare
i nlocuire ale procesoarelor i editoarelor de text, n utilitare de prelucrare a textului,
cum ar fi n analiza lexical. Multe limbaje de programare furnizeaz capabiliti regex fie
built-in, fie prin intermediul unor biblioteci(d).[17]
n cadrul proiectului meu, expresiile regulate sunt folosite n Client-Side pentru a
face verificri ale input-urilor, cum ar fi: validarea unui e-mail, a unui numr de telefon,
pn a fi trimise la validarea Server-Side.
3.4.Structuri de date
n orice limbaj orientat pe obiecte exist biblioteci pentru operaiile cu structuri de
date. n PHP, acestea sunt reprezentate de: Doubly Linked Lists, Heaps, Arrays, Maps. n
acest limbaj de programare cea mai folosit structur de date este Array-ul de tip
asociativ. Acesta este folosit cu scopul principal de a extrage date dintr-o baz de date
folosit n cadrul aplicaiei.
3.5.Protocolul HTTP
Hypertext Transfer Protocol (HTTP) este metoda cea mai des utilizat pentru
accesarea informaiilor n Internet care sunt pstrate pe servere World Wide Web
(WWW). Protocolul HTTP este un protocol de tip text, fiind protocolul "implicit" al
WWW. Adic, dac un URL nu conine partea de protocol, aceasta se consider ca fiind
http. HTTP presupune c pe calculatorul destinaie ruleaz un program care nelege
15
protocolul. Fiierul trimis la destinaie poate fi un document HTML (abreviere de la
HyperText Markup Language), un fiier grafic, de sunet, animaie sau video, de asemenea
un program executabil pe server-ul respectiv sau i un editor de text. Dup clasificarea
dup modelul de referin OSI, protocolul HTTP este un protocol de nivel aplicaie.[18]
Metodele disponibile n acest protocol sunt :
GET: este cea mai folosit metod, fiind utilizat atunci cnd serverului i
se cere o resurs.
HEAD: se comport exact ca metoda GET, dar serverul returneaz doar
antetul resursei, ceea ce permite clientului s inspecteze antetul resursei,
fr a fi nevoit s obin i corpul resursei.
PUT: metoda este folosit pentru a depune documente pe server, fiind
inversul metodei GET.
POST: a fost proiectat pentru a trimite date de intrare ctre server.
DELETE: este opusul metodei PUT.
TRACE: este o metod folosit de obicei pentru diagnosticare, putnd da
mai multe informaii despre traseul urmat de legtura HTTP, fiecare server
proxy adugndu-i semntura n antetul Via.
OPTIONS: este folosit pentru identificarea capacitilor serverului Web,
nainte de a face o cerere.
CONNECT: este o metod folosit n general de serverele
intermediare.[18]
4.2.Implementare
Primul cadru cu care utilizatorul este ntmpinat este cel de Login. Acesta are ca
scop autentificarea unui utilizator ce deine deja un cont n aplcaie.La prima rulare a
17
acesteia se creeaz un cont de tip Super Admin. n cadrul aceleiai interfee
(Anexa 4.2 - 1) exist i posibilitatea de a-i reseta parola, n cazul utilizatorilor care i-au
uitat credenialele. Principalela funcie care se ocup de acest Login este dat mai jos:
public function login(Request $request)
{
try{
$username = $request['username'];
$password = $request['password'];
$remember = $request['remember'];
}catch(\Exception $e){
return response()->json([
'success' => false,
'message' => 'A intervenit o problem! V rugm s ne contactai telefonic.',
]);
}
}
18
$ ->
#On enter login
$(document).keypress (e) ->
if e.which == 13
$('#login').click()
return
if username.trim() == ""
$('#username').addClass 'invalid'
toastr.error("Unul sau mai multe cmpuri sunt goale sau conin erori!")
return
password = $('#password').val()
if password.trim() == ""
$('#password').addClass 'invalid'
toastr.error("Unul sau mai multe cmpuri sunt goale sau conin erori!")
return
$.post '/login', {_token: token, username: username, password: password, remember:
remember}, (json) ->
if !json.success
if typeof json.url != 'undefined'
window.location.href = json.url
return
if typeof json.field != 'undefined'
$('#' + json.field).addClass 'invalid'
toastr.error(json.message)
return
else
window.location.href = "/profile"
return
return
formHasErrors = false
emailRegex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
if !emailRegex.test(email)
console.log 'eorare email'
$('#email').addClass('invalid')
formHasErrors = true
phoneRegex = /^[0-9]+$/
if !phoneRegex.test(phone)
$('#phone').addClass('invalid')
formHasErrors = true
if formHasErrors
toastr.error("Unul sau mai multe cmpuri sunt goale sau conin erori!")
return
$.post '/change-user-profile', {
_token: token,
email: email,
sex: sex,
phone: phone
} , (json) ->
if !json.success
toastr.error("Unul sau mai multe cmpuri sunt goale sau conin erori!")
return
else
location.reload()
return
return
if (!$validator->fails()) {
$user = Auth::user();
$user->email = $request['email'];
$user->contact->phone = $request['phone'];
$user->update();
$user->contact->update();
}
}catch(\Exception $e){
return response()->json([
'success' => false,
'message' => 'A intervenit o problem! V rugm s ne contactai telefonic.',
]);
}
return response()->json([
'success' => true,
]);
}
return response()->json([
'success' => true,
21
'message' => 'S-a trimis invitaie de nregistrare catre toate adresele de email',
]);
}catch(\Exception $e) {
return response()->json([
'success' => false,
'message' => 'A intervenit o problem! V rugm s ne contactai telefonic.',
]);
}
}
Urmtorul pas este adugarea de instituii. Aici sunt prezente 3 cmpuri dintre care doar 2
sunt obligatorii (Nume instituie, Cod instituie) (Anexa 4.2 5). Aceste cmpuri au fost
gndite n acest mod pentru a facilita mprirea pe ani (I, II, III, IV), specializri (INFO,
MATE, etc.), grade (Licen, Master, Doctorat) fiind necesar doar un cod unic pentru
fiecare.
public function addInstitution(Request $request)
{
if ($request->isMethod('get')) {
$user = Auth::user();
$institutions = Institution::orderBy('created_at', 'desc')->paginate(20);
return view('institutions/add-institution', ['user' => $user, 'institutions' =>
$institutions]);
} elseif ($request->isMethod('post')) {
$institution = Institution::where('code', '=', $request->code)->first();
if (!is_null($institution)) {
return response()->json([
'success' => false,
'message' => 'Aceast instituie exist deja',
]);
}
$institution->save();
return response()->json([
'success' => true,
'message' => 'A fost introdus instituia ' . $institution->name,
]);
}
}
Pentru a aduga un student sau a importa o list cu studeni este necesar s existe
n aplicaie instituiile de care aparin (Anexa 4.2 6)(Anexa 4.2 7). Singurele cmpuri
22
obligatorii din acest formular sunt Nume student, Not concurs, Cod instituie. Codul
pentru a importa studeni se regsete mai jos:
public function uploadStudentsFile(Request $request)
{
$file = $request->file('studentTemplate');
$extension = $request->file('studentTemplate')->getClientOriginalExtension();
$name = 'Students'. time().'.'.$extension;
Storage::disk('files')->put($name, File::get($file));
$path = public_path() . '/files/'.$name;
Excel::load($path, function($reader) {
$reader->each(function($row) {
// Loop through all rows
$result = self::createStudent($row);
if($result['success']){
$this->message .= "\nA fost adugat ". $row->nume_prenume;
}else{
$this->message .= "\n". $result['message'];
}
});
});
$current_user = Auth::user();
MessageController::sendMessageFromAdmin($current_user->id, $this->message, 'Adugare
studeni');
return redirect('/add-students');
}
if(is_null($institution)){
return ['success' => false, 'message' => 'Nu exist instituie cu codul '. $student-
>cod_falcultate];
}
23
}else{
$user->email = $student->email;
$user->has_tmp_email = false;
}
$user->is_admin = false;
$user->is_super_admin = false;
$user->save();
24
$dorm->name = $request->name;
$dorm->code = $request->code;
$dorm->description = $request->description;
$dorm->save();
return response()->json([
'success' => true,
'message' => 'A fost introdus cminul ' . $dorm->name,
]);
}
}
});
});
$current_user = Auth::user();
MessageController::sendMessageFromAdmin($current_user->id, $this->message, 'Adugare
camere');
return redirect('/dorms');
}
$room->camera_de_la = intval($room->camera_de_la);
$room->camera_pana_la = intval($room->camera_pana_la);
for ($i = $room->camera_de_la; $i<=$room->camera_pana_la; $i++){
25
$new_room = new Room();
$new_room->dorm_code = $room->cod_camin;
$new_room->room_number = $i;
$new_room->capacity = $room->capacitate;
$new_room->institution_code = $room->cod_facultate;
$new_room->save();
}
return ['success' => true];
}
if(!is_null($main_movement)){
$has_been_accepted = true;
$data['main_dorm'] = Dorm::where('code','=', $main_movement->dorm_code)->first();
}
$codes = [];
$dorm_codes = DB::table('rooms')->select(DB::raw('distinct dorm_code'))-
>where('institution_code', '=', $user->contact->institution_code)->get()->toArray();
foreach ($dorm_codes as $dorm_code){
$codes[] = $dorm_code->dorm_code;
}
$dorms = Dorm::whereIn('code', $codes)->paginate(20);
$can_apply = false;
$can_apply_dorm_codes = DB::table('rooms')->select(DB::raw('distinct dorm_code'))-
>where('institution_code', '=', $user->contact->institution_code)->whereRaw('occupation <
capacity')->get()->toArray();
if(!is_null($can_apply_dorm_codes) && is_array($can_apply_dorm_codes) &&
count($can_apply_dorm_codes) > 0){
$can_apply = true;
}
$can_apply_codes = [];
foreach ($can_apply_dorm_codes as $dorm_code){
$can_apply_codes[] = $dorm_code->dorm_code;
}
$dorms_can_apply = Dorm::whereIn('code', $can_apply_codes)->get();
$has_applied = false;
$has_applied_quesry = Movement::where('user_id', '=', $user->id)-
>where('has_been_parsed', '=', false)->orderBy('created_at', 'desc')->first();
26
if(!is_null($has_applied_quesry)){
$has_applied = true;
}
$data['db_stat'] = $dbstat;
$data['has_applied'] = $has_applied;
$data['user'] = $user;
$data['has_been_accepted'] = $has_been_accepted;
$data['dorms'] = $dorms;
$data['can_apply'] = $can_apply;
$data['dorms_can_apply'] = $dorms_can_apply;
return view('dorms/select-dorm', $data);
}elseif ($request->isMethod('post')){
$dorm = Dorm::where('code','=', $request->dorm)->first();
if(is_null($dorm)){
return response()->json([
'success' => false,
'message' => 'Nu exist cmin cu acest cod',
]);
}
$movement = new Movement();
$movement->user_id = $user->id;
$movement->institution_code = $user->contact->institution_code;
$movement->dorm_code = $request->dorm;
$movement->acceptance = false;
$movement->has_been_parsed = false;
$movement->sex = $user->contact->sex;
$movement->grade = $user->contact->grade;
$movement->room_id = -1;
$movement->save();
return response()->json([
'success' => true,
]);
}
}
27
public static function beginSort()
{
$stat = new Dbstat();
$stat->start = true;
$stat->end = false;
$stat->can_operate = false;
$stat->save();
29
CAPITOLUL 5.
MODALITATEA DE STOCARE A DATELOR
30
sunt n mod obinuit asociate cu constructorul schemelor Laravel pentru a creea cu
uurin schema bazei de date a aplicaiei.[21]
Faada Laravel Schema ofer suport bazei de date pentru crearea i manipularea
tabelelor n toate sistemele de baze de date suportate de Laravel.
Pentru a creea o migraie nou se folosete comanda built-in din Artisan
make:migration.
Fiecare nume de fiier de migrare conine o marc de timp care i permite lui
Laravel s determine ordinea migrrilor.[21]
O clas de migrare conine dou metode: up i down. Metoda up este
utilizat pentru a aduga noi baze de date, coloane sau indexuri, n timp ce metoda
down ar trebui s inverseze pur i simplu operaiile efectuate de metoda up.[21]
Pentru a rula toate migraiile se folosete comanda Artisan php artisan migrate.
Pentru a creea o nou tabel de baze de date, utilizai metoda de create din faada
Schema. Metoda de creare accept dou argumente. Primul este numele tabelului, n timp
ce al doilea este o nchidere care primete un obiect Blueprint care poate fi utilizat pentru
a defini noua tabel.[21]
Tipurile de coloane pe care le suport n acest moment Laravel sunt:
$table->bigIncrements (cheie primar)
$table->increments (cheie primar de dimensiuni reduse)
$table->string
$table->boolean
$table->timestamps
$table->float
$table->integer
$table->text[21]
i multe altele pe lng acestea.
Aplicaia Dorminator dispune de urmtoarele fiiere de migrare ce funcioneaz
pe faada Schema din Laravel, fiecare avnd un nume sugestiv: create_users_table,
create_contacts_table, create_messages_table, create_institutions_table,
create_dorms_table, create_rooms_table, create_dbstats_table, create_movements_table.
Schemele de migrare sunt scrise dup exemplele din documentaia oficial a framework-
ului. Codul pentru fiecare dintre acestea se afl mai jos:
31
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username')->unique();
$table->string('email')->unique();
$table->string('password')->password();
$table->boolean('has_temp_password')->default(true);
$table->boolean('has_temp_email')->default(false);
$table->boolean('is_super_admin')->default(false);
$table->boolean('is_admin')->default(false);
$table->timestamps();
$table->rememberToken();
});
5.3.1 Administrator
Utilizatorii care fac parte din aceast categorie, au dreptul de a insera / modifica /
terge studeni, instituii, cmine, camerele alocate fiecrui cmin i de a porni / opri
procedura de cazare.
33
5.3.2 Student
Drepturile sunt limitate pentru acest tip de utilizatori, acetia avnd acces doar de
vizualizare a informaiilor despre instituii, cmine i camerele acestora. Fa de
administratori studenii mai pot selecta, atunci cnd este cazul, cminul pentru care doresc
s concureze.
34
CAPITOLUL 6.
TESTARE
6.2.Domain Testing
Dou elemente fundamentale ale unui program de calculator sunt cile de intrare
i cile de program. Domeniul de intrare al unui program este setul tuturor datelor
introduse n program. O cale de program este o secven de instruciuni de la nceputul
35
programului pn la un punct de interes din program. De exemplu, sfritul programului
este un punct de interes. Cu alte cuvinte, o cale de program, sau pur i simplu o cale,
corespunde unui anumit flux de control n program.[1]
Scenariile folosite n cadrul Unit testing au fost folosite i aici i toate au trecut cu
brio, afind de fiecare dat rezultatul dorit.
6.4.System testing
Pentru acest tip de aplicaie am ales browser-ele Google Chrome, Firefox, Safari,
Opera, Midori, Internet Explorer, Midori pentru a face teste de layout, att n versiune
desktop, ct i tablet, phone. Din cauza folsirii framework-ului Bootstrap aplicaia este
responsive, iar plugin-urile de jQuery funcioneaz dup ateptri.
36
CAPITOLUL 7.
CONCLUZII
7.1.Concluzii
n concluzie, aplicaia Dorminator dezvoltat numai pe platforme open-source, are
potenialul de a satisface att nevoile persoanelor responsabile de cazarea, ct i a
studenilor dornici de ocuparea unui loc n cminele facultii.
Atuurile aplicaiei sunt viteza, extensibilitatea, fiabilitatea, toate acestea fiind
ascunse n spatele unei interfee curate i foarte uor de folosit.
7.2.Posibiliti de dezvoltare
Ca eventuale dezvoltri ulterioare, se poate pleca de la construirea unei aplicaii
hibrid mobile folosind framework-ul Ionic i a uneia hibrid desktop folosind
framework-ul Electron, ce vor comunica cu aplicaia de baz prin API-uri ce au ca
rspuns un JSON.
Pe lng acestea se mai pot aduga aplicaii precum un portal de urcat orice fel de
materiale de studiu, documente text, tutoriale video, un centralizator de note i un
generator de orare.
Din punctul meu de vedere, concatenarea tuturor posibilelor dezvoltri ulterioare
ar produce o suit complet de aplicaii necesar pentru o instituie de nvmnt.
37
BIBLIOGRAFIE
39
ANEXE
Anexa 4.2 3
40
Anexa 4.2 4
Anexa 4.2 5
41
Anexa 4.2 6
Anexa 4.2 7
Anexa 4.2 8
42
Anexa 4.2 9
43