PROGRAMUL DE STUDIU: TEHNOLOGIA INFORMAȚIEI FORMA DE ÎNVĂȚĂMÂNT: IF PROIECT DE DIPLOMĂ COORDONATOR ȘTIINȚIFIC Prof. univ. dr. ing. Cornelia Gyorodi… [307926]

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI

TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU: TEHNOLOGIA INFORMAȚIEI

FORMA DE ÎNVĂȚĂMÂNT: IF

PROIECT DE DIPLOMĂ

COORDONATOR ȘTIINȚIFIC

Prof. univ. dr. ing. Cornelia Gyorodi

ABSOLVENT: [anonimizat] 2018

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI

TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU: TEHNOLOGIA INFORMAȚIEI

FORMA DE ÎNVĂȚĂMÂNT: [anonimizat]. univ. dr. ing. Cornelia Gyorodi

ABSOLVENT: [anonimizat] 2016

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

DEPARTAMENTUL CALCULATOARE ȘI TEHNOLOGIA INFORMAȚIEI

TEMA_________

Lucrare de finalizare a studiilor a student: [anonimizat] – [anonimizat]

1). Tema lucrării de finalizare a studiilor:

[anonimizat]

2). Termenul pentru predarea lucrării:

3). Elemente inițiale pentru elaborarea lucrării de finalizare a studiilor

HTML/HTML5, CSS/CSS3, JavaScript, jQuery, PHP, SQL,

4). Conținutul lucrării de finalizare a studiilor: Introducere; [anonimizat], SQL, HTML, CSS, JavaScript; [anonimizat], jQuery,

Bootstrap; [anonimizat], Netbeans IDE; Descrierea aplicației;

Concluzii; Bibliografie.

5). Material grafic:

6). Locul de documentare pentru elaborarea lucrării:

Internet, [anonimizat]

7). Data emiterii temei

Coordonator științific

Prof. univ. dr. ing. Cornelia Gyorodi

Introducere

În această lucrare este prezentată o [anonimizat], și posibilitatea de a a-[anonimizat] , sau posibilitatea de a adăuga o companie chiar dacă nu o deții. [anonimizat], [anonimizat].

Este o [anonimizat], [anonimizat].

Framework-[anonimizat]-[anonimizat], ce urmează a [anonimizat] o performanță ridicată a [anonimizat].

[anonimizat] a folosi arhitectura MVC pe care

acasta o oferă, framework-[anonimizat] o [anonimizat] o serie de avantaje

care vin în ajutorul programatorului.

[anonimizat] a [anonimizat].

[anonimizat]-source,[anonimizat].

Modul în care această aplicație a fost proiectată și construită facilitează procesul de

mentenanță a acesteia, iar extindere ulterioară a [anonimizat]ndere se poate realiza atât pe parte de software, aducând noi elemente în aplicație, dar se

poate face și pe parte de hardware.

Limbaje de programare utilizate

PHP

PHP este un limbaj de programare. Numele PHP provine din limba engleză și este un acronim recursiv și provine de la : Php: Hypertext Preprocessor. Folosit inițial pentru a produce pagini web dinamice, este folosit pe scară largă în dezvoltarea paginilor și aplicațiilor web acaparând aproape toată piața aplicațiilor web [1].

PHP este un limbaj de programare structurat, orientat pe obiecte, open-souce, server-side,

care are versiuni compatibile pentru toate sistemele de operare (UNIX, Windows, etc.) și

pentru majoritatea web serverelor.

Principalele caracteristici ale limbajului PHP sunt urmatoarele:

Familiaritate

Simplitate

Eficiența

Securitate

Flexibilitate

Gratuitate

PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca si C-ul, Perl-ul sau începând de la versiunea 5 chiar Java, sintaxa limbajului fiind o combinație a celor trei. Datorită modularitații sale poate fi folosit și pentru a dezvolta aplicații de sine stătătoare. Scrierea de programe în limbajul PHP este destul de simplă și datorită faptului

că are înglobate sute de funcții și are alte cateva mii care se pot folosi prin intermediul

extensiilor PHP.

Probabil una din cele mai importante facilități ale limbajului este conlucrarea cu majoritatea bazelor de date relaționale, de la MySQL și până la Oracle, trecând prin MS Sql Server. PostgreSQL sau DB2.

Fig. II.1.1 ilustrează cum functionează PHP-ul, codul sursă este compilat de server-ul

web și are ca rezultat Zend Opcode-uri (operation codes) care sunt defapt funcții rezultate în

urma compilării, aceste funcții se execută, iar rezultatul este trimis sub formă de cod HTML

care este vizibil clientului browser-ului.

În aplicație am folosit limbajul PHP pentru realizarea funcționalitățile din partea de

backend și de asemenea pentru conectarea la baza de date și pentru realizarea de operații cu

baza de date.

Fig. II.1.1 Schema de funcționare a PHP-ului

SQL

Limbajul SQL (de la numele englez Structured Query Language) este un limbaj de programare specific pentru manipularea datelor în sisteme de manipulare a bazelor de date relaționale, iar la origine este un limbaj bazat pe algebra relațională. Acesta are ca scop inserarea datelor, interogații, actualizare și ștergere, modificarea și crearea schemelor, precum și controlul accesului la date .

A devenit un standard în domeniu, fiind cel mai popular limbaj de SGBD (Sisteme de Gestiune a Bazelor de Date) relaționale. Pe lănga versiunile standardizate ale limbajului, există o mulțime de dialecte si variante, astfel sistemele de gestiune a bazelor de date sunt prevăzute cu diverse extensii.

Limbajul SQL este divizat în următoarele elemente:

Clauze, ele sunt componente ale instrucțiunilor și interogărilor.

Expresii, al căror efect este producerea de valori scalare sau tabele.

Predicate, pot specifica condiții care sunt evaluate de SQL conform legii ternare sau logicii booleene, în scopul limitării efectelor instrucțiunilor, sau pentru a influența cursul programului.

Interogările, au ca scop regăsirea datelor după criterii specifice.

Instrucțiunile, pot avea un efect persistent asupra datelor sau structurii datelor, sau pot controla tranzacțiile, conexiunile sau cursul programului.

Pentru implementarea limbajului SQL sunt folosite 3 metode de bază:

Apelare directă (Direct Invocation): care permite ca instrucțiunile să fie introduse direct de la prompter.

Încapsulare (Embedded SQL): instrucțiunile sunt încapsulate în codul de program.

JavaScript

JavaScript este un limbaj de programare orientat pe obiecte bazat pe conceptul prototipurilor. Este folosit în general pentru introducerea unor funcționalități în paginile web, codul JavaScript din aceste pagini fiind rulat de către browser. Limbajul este binecunoscut pentru folosirea sa în construirea site-urilor web, dar este folosit și pentru accesul la obiecte încastrate în alte aplicații. Limbajul JavaScript primește tot mai multă atenție în ultimii ani avănd tot mai multe framework-uri și este folosit în tot mai multe aplicații, chiar și aplicații pentru mobil.

Cea mai des întâlnită utilizare a JavaScript este în scriptarea paginilor web . Acesta este

introdus în cadrul paginilor web și contribuie la responsivitatea paginii, la realizarea unei

pagini care interacționează cu utilizatorul.

Browserele rețin în memorie o reprezentare a unei pagini web sub forma unui arbore de

obiecte și pun la dispoziție aceste obiecte script-urilor JavaScript, care le pot citi și manipula.

Arborele de obiecte poartă numele de Document Object Model sau DOM . Există un standard

W3C pentru DOM-ul pe care trebuie să îl pună la dispoziție un browser, ceea ce oferă

posibilitatea scrierii de script-uri portabile , care să funcționeze pe toate browserele. [5]

Pentu a insera JavaScript într-o pagină HTML se foloseste tagul <script></script>.

Limbajul JavaScript este un limbaj foarte puternic, dar și limitat de anumite restricții impuse de navigatoarele Web. Din motive de securitate JavaScript nu poate executa operații in rețea, nu poate scrie, citi sau șterge fișiere de pe hard disc.

Pentru realizarea aceste aplicații am folosit JavaScript pentru manipularea elementelor din DOM.

HTML

Limbajul HTML (HyperText Markup Language) este un limbaj de marcare utilizat pentru

crearea paginilor web ce pot fi afișate intr-un browser, el fiind limbajul care stă la baza

acestor pagini web.

Acest limbaj se folosește de etichete care sunt interpretate de browser, care afișează

rezultatul pe ecran. Etichetele sunt de obicei pereche, o etichetă pentru deschidere <etichetă>

și una pentru închidere </etichetă> sau etichete care nu se închid <etichetă />

În Fig. II.4.1 se poate vedea care este structura de bază a unei pagini HTML, care

contine etichetele cele mai utilizate ale acestui limbaj.

Fig. II.4.1 Structura de bază a unei pagini HTML

Un document html este compus din:

secțiunea head care conține etichetele <head> </head>

secțiunea body cu etichetele <body></body>

Secțiunea head trebuie să conțină titlul paginii inclus între etichetele <title> și <title>,

urmat de descrieri de tip <meta> și de legături către fișiere externe (exemplu: Fișiere de tip

CSS, script-uri sau favicon). Secțiunea header se referă la prima parte a unui site (care de

obicei include meniul) și este recunoscută după eticheta <header></header>, iar secțiunea

footer se referă la ultima parte a site-ului recunoscută după eticheta <footer></footer>.

Evoluția tehnologiei software a introdus versiunea HTML5, bazată pe HTML4, o

versiune de success, HTML5 vine cu elemente și atribute noi și cu o sintaxă mai usoară. Cele

mai folosite etechete noi sunt: header, footer, audio, video.

Fiecare sintaxă HTML5 are nevoie de un doctype pentru a preveni browser-ul că pagina

respectivă trebuie vizualizată într-un anumit mod, asfel declarația doctype a fost simplificată

față de cea veche.

< !Doctype html>

În aplicația prezentată am folosit limbajul HTML versiunea HTML5, deoarece consider

că este cea mai bună versiune pentru a crea structura unei aplicații web la momentul actual.

CSS

CSS (Cascading Style Sheets) este un limbaj care definește layout-ul pentru documentele

HTML. Stilurile se pot atașa elementelor HTML în cadrul documentului prin eticheta <style>

sau prin atributul style sau poate fi incluse prin intermediul unor fișiere externe cu extensia

.css. Codul CSS este editabil cu orice editor de tip text. [7]

<head>

<link rel=”stylesheet” href=”style.css”/>

</head>

Stilurile pentru o pagină web sunt definite de obicei în head, sau în partea de body a

fișierului html sau de asemenea se poate aplica un stil diferit la fiecare tag html în parte.

Un exemplu de CSS, care se aplica etichetei body și ii setează culoarea de fundal albastra,

marimea fontului de 16 pixeli și culoarea fontului rosie :

body{

background-color: blue;

font-size: 16px;

color: red;

}

Actual CSS este la versiunea 3, care a venit cu elemente noi pentru a îmbunătăți designul

unui website. Cateva din elementele noi introduse de CSS3 sunt:

box-shadow – pana la apariția CSS3, crearea unei umbre pe pagina era posibilă

doar cu ajutorul plugin-urilor de JavaScript sau cu ajutorul imaginilor

opacity – pentru a ajusta nivelul opacității

border-radius – pentru a face colțurile rotunjite la o imagine sau la un element

Toate aceste proprietăți enumerate mai sus sau altele introduse noi nu sunt suportate în

toate browserele, de aceea sunt folosite prefixe pentru fiecare browser.

– webkit – : este specific browserelor Google Chrome și Safari

– moz – : specific browserului Mozilla Firefox

– ms – : specific browserului Internet Explorer

– o – : specific browserului Opera

În aplicație am folost CSS pentru a stiliza elementele HTML, deoarece stilul care îl oferă

browser-ul este foarte limitat și nu este deloc atractiv pentru utilizator.

Tehnologii Web utilizate în realizarea aplicației

Laravel

Laravel este un framework PHP, open-source, construit pentru a dezvolta aplicatii web folosing arhitectura MVC(model-view-controller), și este bazat pe framework-ul Symfony.

Laravel vine cu o serie de avantaje în dezvoltarea aplicatiilor web, cum ar fi:

Eloquent ORM (object-relational mapping) – o implementare avansată a unor

metode de lucru cu relațiile dintre obiecte de tipul database, care realizează

legatura cu tabelele din baza de date.

Motorul de templating Blade – permite realizarea de template-uri pentru paginile

aplicației

Migrari – permit crearea sau ștergerea de tabele sau coloane în baza de date din

codul PHP, care apoi este rulat din linie de comandă, iar aceste modificari se vor

putea executa oriunde trebuie instalată aplicația

Clasa autoload – prin intermediul ei toate clasele necesare pentru rularea

Fig. III.1.1 – Modul de funcționare al framework-ului Laravel(MVC)

La crearea aplicației am folosit versiunea 5.3.3 al acestui framework. Acest framework a

fost de mare ajutor în realizarea aplicației deoarece codul este mult mai structurat prin

folosirea arhitecturi MVC și pentru că vine cu multe clase care au metode care sunt

folositoare la implementarea aplicației, o parte din aceste clase care le-am folosit la aplicație

sunt:

Auth – clasa este folosită pentru login, logout și obținerea de informații

despre utilizatorul autentificat

Form – clasa este folosită pentru a genera un formular în view-uri sau pentru a

lucra cu formularele

View – această clasă are metode pentru a încărca un view când se intră pe url-ul

unei pagini din aplicație

Redirect – clasa este folosită pentru a face redirectări din funcțiile din Controller

către o anumită rută, către un link, către pagina anterioară, etc.

Input – permite accesul la datele trimise din view-uri către controller din

formulare prin metoda POST

Session – această clasă ne dă acces la sesiunea framework-ului, pentru a lua

informații din sesiune, a scrie informații acolo sau pentru a le șterge.

jQuery

jQuery este o platformă JavaScript, concepută pentru a îmbunatăți și ușura procese

precum traversarea DOM-ului. Este open-source, a fost lansat în 2006 și este disponibil în

toate versiunile de browser importante.

jQuery este foarte folosit pentru urmatoarele lucruri:

selecții de elemente în arborele DOM

parcurgerea și modificarea arborelui DOM

întregistrarea și modificarea evenimentelor în browser

efecte și animații

cereri AJAX

are multe extresii sau plugin-uri care îi adaugă un plus de functionalitate.

Exemplu de cod jQuery care afișează textul “Buna Ziua!” în elementul body al paginii:

$(document).ready(){

$(“body”).html(”Buna Ziua!”);

});

Bootstrap

Bootstap este un framework de front-end, care este gratis si open-source și este folosit

pentru designul website-urilor și a aplicațiilor web. Conține template-uri de HTML și de CSS

pentru tipografie, formulare, butoane, bară pentru navigare, și alte elemente de interfață și

chiar și extensii optionale de JavaScript.

Este compatibil cu ultimele versiuni ale celor mai folosite browsere, cu ar fi: Google

Chrome, Firefox, Internet Explorer, Opera sau Safari.

De la versiunea 2.0 poate fi folosit și pentru responsive web design. Este cel mai utilizat

framework pentru dezvoltarea interfețelor web și poate fi integrat cu orice fel de aplicație.

Există pachete de interfețe complete și gata de integrat în diverse domenii cum ar fi:

administrare și dashboard, pagini de prezentare, galerii foto sau pagini de business.

O altă facilitate a framework-ului este folosirea unui font care reprezintă icoanele pentru

anumite acțiuni, acest font este numit Font Awesome fiind definit ca și font iconic, dezvoltat

pentru a fi folosit împreună cu framework-ul Bootstrap.

FontAwesome conține câteva sute de icon-uri, care pot fi integrate cu usurință în orice

site putând fi modificate folosind fișierul CSS. Integrarea fontului se face precum un font

obișnuit folosind tagul <link>, rel=”stylesheet” și type=”style/css”. Fontul a fost gândit

special pentru Bootstrap, dar acesta poate fi de folos și independent.

Acest font este foarte utilzat deoarece, oricare este dimensiunea la care trebuie afișat

icon-ul, calitatea se păstrează, în schimb atunci cănd de folosește un icon de tip poză, de

exemplu în formatul PNG, când se dorește afișarea icon-ului la o dimensiune mai mare decât

a pozei, calitatea scade și poza devine pixelată.

În aplicație am folosit versiunea 3.3.4 prin intermediul unei teme de admin, care este

folosită pentru meniul aplicației, afișarea mesajelor de succes sau a celor de

eroare, stilizarea inputurilor și a textului, iar Icon-urile din meniu, de pe bara de navigare sau în majoritatea formularelor se folosește FontAwesome.

FontAwesome conține o mulțime de iconițe care se adaugă în partea de HTML, oriunde prin: <i class=”fa fa-numele_iconiței”>Hello World</i>.

Între Fig. III.2 și Fig. III.3 se poate observa diferența în designul aplicației între versiunea cu

și făra Bootstrap, prin aplicarea CSS-ului de la Bootstrap aplicația devine mult mai user-friendly.

Fig. III.3.1 Aplicația cu Bootstrap inclus

Tipuri de Software utilizate în realizarea aplicației

Xampp

Xampp este un pachet de programe open-source, care consta in Apache HTTP Server, MySQL și interpretoare pentru scripturile scrie în limbaje de programare PHP și Perl. Personal folosind-ul ca și server pentru aplicație, și pentru baza de date.

Netbeans IDE 8.2

NetBeans este un mediu integrat de dezvoltare pentru Java, dar având extensii pentru multiple limbaje cum ar fi PHP, C, C++, HTML 5, Javadoc, JavaScript. Este un mediu bun pentru a dezvolta un proiect, având acces și la plugin-uri create de utilizatori.

Descrierea aplicației

Acest capitol va trata modul în care a fost implementată aplicația destinată

căutarii de job-uri și functionalitățile pe care aceasta le oferă.

Structura bazei de date

Figura Fig. V.1 ilustrează structura bazei de date care este folosită în aplicație, care conține 13 tabele și relațiile care există între aceste tabelele.

Fig. . – Structura bazei de date

Aceasta conține 13 tabele:

admin_password_resets – păstrează informații pentru resetarea parolei utilizatorului admin

admin_users – conține useri care au acces la partea de backend , adică la managementul aplicației

boroughs – conține orașe pentru API – ul care importă companii

companies – conține companiile, adăugate manual de useri sau cele importate cu API

industries – conține industrii pentru API – ul care importă companii.

jobs – conține joburile adăugate de companii sau de utilizatori

job_applies – aici găsim aplicările utilizatorilor la job-urile companiilor

password_resets – păstrează informații despre useri care îsi reseteaza parola, după ce introduc email-ul în formul de resetare.

pending_users_for_companies – conține informații despre useri care urmează sau nu urmează sa fie acceptați de user-ul admin

reviews – păstrează informații despre review-urile lăsate companiilor

review_votes – păstrează informații despre like-uri sau dislike-uri ale reviewurilor

users – conține datele personale ale userilor

migrations – această tabelă este creată de Laravel când migrăm tabelele din aplicație

Datele din aceste tabele vor fi manipulate cu ajutorul instrucțiunilor SQL scrise în PHP cu

ajutorul ORM-ului Eloquent ofertit de Laravel. Pentru a crea conexiunea cu baza de date este

folosit fișierul de configurare env care se afla în directorul root al aplicației,

unde prin mai multe variabile sunt definite datele de conexiune la baza de date, cum ar fi numele bazei de date, numele utilizatorului și parola acestuia:

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=license

DB_USERNAME=root

Instalarea framework-ului Laravel

Înainte de instalare, trebuie să ne asigurăm că server-ul unde va fi rulată aplicația

îndeplinește o cerință foarte importantă, adică versiunea minima de PHP, care în cazul

versiuni 5.3.3 a Laravel-ului, PHP trebuie să aibă minim versiunea 5.6.4 pentru a rula făra

probleme.

Cea mai ușoară metodă de instalare este cu ajutorul Composer-ului, care este un

instrument pentru management in PHP și care o dată instalat se poate folosi din linia de

comandă. Pentru a instala framework-ul este nevoie doar de urmatoarea comandă:

composer create-project laravel/laravel {directory} 5.3.3 –prefer-dist

{directory} trebuie doar înlocuit cu calea locală unde proiectul va fi instalat.

Configurările aplicației

Pe langă configurarea bazei de date, prin intermediul framework-ului Laravel se mai pot

configura și alte aspecte ale aplicației, cele mai importante fiind următoarele:

Timezone-ul, url-ul, limba aplicației sau dacă aplicația este sau nu în debug mode în

app.php

'debug' => true,

'url' => 'http://localhost',

'timezone' => 'UTC',

'locale' => 'en',

Tabela din baza de date folosită pentru useri si modelul Eloquent folosit pentru

această tabelă în auth.php

'model' => 'User',

'table' => 'users',

Server-ul folosit pentru email in mail.php

'driver' => 'smtp',

'host' => 'smtp.mailgun.org',

'port' => 587,

'from' => array('address' => null, 'name' => null),

În Fig. 4.2 se poate observa unde sunt localizate toate fișierele de config pe care le conține aplicația.

Fig. V.3.1 Structura folder-ului config al aplicației

Structura generală a proiectului

În Fig. V.3.1 se poate vedea structura generală a proiectului, structura este cea a

framework-ului Laravel. Acest framework are patru directoare principale.

Directorul app – conține partea de cod care este adăugată de programator, cum ar fi

controllerele, modelele, view-urile, conține de asemenea și partea de configurare a aplicației.

Tot în acest director sunt salvate și anumite resurse tempotare, adică: fișierele de cache,

fișierele de log sau fișierele care păstrază datele din sesiune, Laravel avănd o sesiune proprie,

nu folosește sesiunea browser-ului.

Directorul bootstrap conține câteva fișiere care se ocupă de configurarea autoloading-ului

framework-ului.

Directorul public conține toate resursele adăugate aplicației, dar care nu reprezintă

modele, view-uri sau controllere, aceste fișiere pot să fie imagini, librarii JavaScript, fișiere

CSS, etc.

Directorul vendor conține toate pachetele sau librariile PHP pe care le are aplicația, o

parte din acestea sunt instalate o dată cu framework-ul, iar restul sunt adăugate ulterior, în

funcție de cerințele aplicației.

De asemenea aplicația conține și alte fișiere, în directorul principal al proiectului, cum ar fi:

.gitignore – unde dacă proiectul este încarcat într-un Git repository (în cazul acestei aplicații este), se specifică de care fișiere să nu țină cont repository-ul

composer.json – Laravel folosește Composer, un tool PHP de management al

dependințelor, care permite să se declare librăriile folosite în proiect, Composer

ocupându-se apoi de managementul acestora (install sau update) când este rulată

comanda “composer update”

Fig. V.4.1 Structura proiectului

Structura generală a aplicației

Fig. V.5.1 Structura aplicației

Structura aplicației a fost gândită să faciliteze accesul utilizatorului cât mai ușor la

funcționalitățile ei, aplicația este împărțită, după cum se poate vedea și în schema din Fig. V.5.1

, în șapte părți importante, care sunt evidențiate în meniul aplicației, aceste părți sunt:

Secțiunea Login – această secțiune se folosește la autentificare, ea având două părți, una pentru autentificare ca utilizator simplu, iar cealaltă pentru autentificarea ca utilizator de companie

Homepage-ul – unde utilizatorul poate să vadă un formular de căutare ori pentru job-uri ori pentru companii fără a fii nevoie de autentificare.

Secțiunea Jobs – aici utilizatorul poate sa vadă joburile existente plus un formular de câutare, pe partea stângă se gasește și un sidebar care conține top 5 cele mai revizuite companii plus un buton de adăugare job, care poate fi folosit doar în cazul autentificarii

Secțiune de adăugare companie – aici se află un formular de adăugare companie,pentru a accesa secțiunea aceasta e nevoie de autentificare, aici este prezent și sidebarul cu companiile revizuite

Secțiunea contact – aici găsim un formular de contact prin care utilizatorul poate să trimită email-uri către administrator.

Secțiunea contul meu – aici vom găsi informații despre contul nostru, unde putem sa edităm numele și email-ul sau putem să ne delogăm

Importarea de companii printr-un API – această funcționalitate este folosită pentru a importa companii printr-un API din Statele Unite ale Americii.

Secțiunea admin – secțiunea aceasta este mai specială ea fiind separată de restul aplicației dar totodată și foarte importantă, este dedicată special pentru utilizatorii admin, de aici admin-ul aprobă sau șterge companii și poate să vadă și să șteargă useri care aparțin de aceea companie

Rutarea în aplicațe

Una dintre cele mai importante facilități a framework-ul Laravel este sistemul de rutare,

adică rutele care definesc ce se întâmplă când este apelat un url sau cand este facut un

request. Aceste rule pot să definească mai multe tipuri de request-uri, cum ar fi de tipul:

POST, GET, PUT, DELETE,PATCH.

Rutele sunt definite în fișierul routes.php care se află in folder-ul routes, unde mai găsim încă două foldere, unul pentru partea de admin și celalat pentru partea de interfața, fiecare dintre ele conținând doua fișiere web.php unde sunt definite rutile. Rutele pot să

apeleze o funcție dintr-un controller sau să se definească o funcție unde este definită ruta, de

exemplu:

Route::get('/', function(){

return 'Hello World';

});

În aplicația JobSeeker sunt folosite rute care apelează funcții din controller cum ar fi:

Route::get('login/{type}', 'Auth\LoginController@showLoginForm');

Route::post('login/{type}', 'Auth\LoginController@login');Route::group(array('before' => 'auth'), function(){

Route::group(['middleware' => 'auth'], function () {

Route::get('my-company', 'CompanyController@edit');

Route::post('company/update', 'CompanyController@update');

Route::group(['middleware' => 'checkOwner'], function () {

Route::get('job/edit/{id}', 'JobController@edit');

Route::post('job/update/{id}', 'JobController@update');

});

Route::post('job/store/{id}', 'JobController@store');

});

……………

});

După cum se poate vedea în codul de mai sus, rutele pot să fie grupate dacă au ceva în

comun, în aplicația descrisă, majoritatea rutelor au în comun faptul că definesc pagini sau

acțiuni ce nu se pot realiza fără a fi autentificat, lucru realizat prin faptul rutării unui group de rute cu 'middleware' => 'auth', acest lucru semnifică faptul că aceste rute nu pot fi apelate/folosite fără a fi autentificat. Pagina de login și partea unde utilizatorul poate să caute joburi sau companii nu face parte din această categorie.

Modul de definire al rutelor este foarte ușor, metoda de apelare este definită și ca metodă

a clasei Route, metodă care are doi parametrii, primul parametru un string și este url-ul apelat,

dacă url-ul aplicatiei este http://job-seeker , atunci url-ul paginii de login este http://job-seeker/login . Aldoilea parametru este tot un string, care defineste numele Controllerului și funcția apelată, fiind de forma ExempluController@funțieApelată

Url-ul poate să conțină și parametri, care sunt încadrați în paranteze acoladă și care pot fi

accesați din controller:

Route::post('/job /update{id}', 'JobController@update));

parametrul este id, și funcția update din controller-ul JobController este apelată

astfel pentru a avea acces la parametru, valoarea din url a lui id va fi folosită în funcție prin

intermediul variabilei $id:

public function update($id){

}

Funcționalitațile aplicației

Secțiunea Login

Pagina de login este folosită pentru autentificare, aici fiind două variante, autentificarea ca și utilizator normal sau ca și utilizator de companie.

La apelarea url-ului paginii de login în Laravel este apelată funcția showLoginForm care

returnează un view, adică conținutul unei pagini, clasa View este o clasă a framework-ului

care se ocupă de paginile aplicației, returnând în funcție parametrul view cu destinația pagini rezultă deschiderea login.blade.php care se află in folder-ul /resources/views, după cum putem observa mai jos:

public function showLoginForm(){

return view ('auth.userLogin');

//sau

return view('auth.companyLogin');

}

În Fig. V.7.1 se poate vedea cum arată pagina folosită pentru autentificare, care este rezulatul returnării fișierului login.blade.php.

Fig. . – Secțiunea Login

Pe lângă alte elemente HTML, pagina conține un formular, generat prin clasa Form a

framework-ului Laravel, care conține două input-uri, unul pentru email și unul pentru

parolă, adică datele folosite de user pentru a intra în aplicație și un buton de tipul submit care

actionează trimiterea datelor din formular.

<form action="{{ action('Auth\LoginController@login', 'user') }}" method="post">

Funcția login preia datele trimise din formular, aplicația folosind aceași funcție de login și pentru companii și pentru userii normali, formularul validează și încearcă să autentifice

utilizatorul cu ajutorul clasei Auth, dacă validarea sau autentificarea nu sunt facute cu succes,

se revine înapoi la pagina de login cu mesaj de eroare, iar dacă autentificare de face cu

succes, utilizatorul este redirecționat pe pagina Home.

Sub formular găsim de asemenea și un link către o pagină de recuperare a parolei, după accesarea acestui link suntem redirectați către un alt formular care conține doar un câmp email, după completarea câmpului și apăsarea butonului de send, user-ul cu acel email va primi un mail care va conține un buton de resetare a parolei, acest buton redirectând userul spre o pagină cu un formular care conține două câmpuri pentru parola nouă, această pagină se poate vedea și în Fig. V.7.2.

Fig. V.7.2 Pagina de resetare a parolei

Secțiunea de login conține și un link către crearea unui cont, accesând link-ul vom fi redirecționați către un formular unde vom introduce datele necesare, după crearea contului utilizatorul va primi un email cu un mesaj de bine ați venit.

Secțiunea Register

Această secțiune se folosește pentru înregistrarea utilizatorilor în aplicație. Aici avem două părți, înregistrarea ca și utilizator simplu și înregistrarea ca utilizator de companie. Pentru ca utilizatorul să poată să se înregistreze trebuie să aleagă cum, în Fig. V.7.3 vedem cum utilizatorul alege tipul de înregistrare din meniul de navigație al aplicației.

Fig. V.7.3 Tipul de înregistrare

În cazul în care utilizatorul alege înregistrarea ca utilizator de companie, formularul de înregistrare va fi diferit de cel normal cum putem vedea în Fig. V.7.4, aici utilizatorul își va adăuga propria companie și va fi nevoit să aștepte ca un utilizator admin să aprobe compania sau să o respingă, adminul primind un email cu noua companie.

Fig. V.7.4 – Formular de înregistrare pentru utilizatorul de companie

Secțiunea Homepage

În Fig. V.7.5 se poate vedea pagina de Homepage, unde utilizatorul ajunge la accesarea url-ului aplicației, această pagină contine un formular de căutare, unde utilizatorul poate căuta job-uri sau companii existente în baza de date, formularul de căutare având două butoane, unul pentru job-uri și unul pentru companii, cuvinte cheie, o listă cu industrii și o listă cu state. După ce utilizatorul va apăsa butonul de search aplicația va redirecționa utilizatorul pe pagina de Jobs unde vor apărea rezultatele căutarii, în cazul în care nu sunt rezultate un mesaj cu 0 rezultate va fi afișat.

Fig. V.7.5 Pagina Home

Secțiunea Jobs

Această secțiune conține toate job-urile existente în baza de date, un formular de căutare care funcționează la fel ca și cel de la pagina homepage și o regăsim în Fig. V.7.6.

Fig. V.7.6 Secțiunea Jobs

În stânga formularului de căutare găsim și un buton de adăugare job. Pentru adăugare unui job este nevoie ca utilizatorul să fie autentificat ca și user de companie, în cazul în care utilizatorul nu este autentificat el va fi redirecționat către o pagină de autentificare pentru companii, în cazul în care utilizatorul este autentificat ca și utilizator de companie el va fi redirecționat către o pagină de adăugare job unde vom găsi un formular, după adăugarea unui job, utilizatorul de companie poate să editeze sau să șteargă job-ul adăugat. Pentru a vedea sau găsi job-ul adăugat utilizatorul va intra la secțiunea contul meu, la editarea companiei unde va putea accesa detaliile tuturor job-urilor adăugate dar și dacă alți utilizatori simpli au aplicat pentru un job al companiei.

În această pagină găsim de asemenea și un sidebar cu top cinci cele mai revizuite companii fiecare având un link cu detalii care redirecționează utilizatorul pe o pagină cu detalii ale acelei companii.

Job-urile listate din baza de date conțin imaginea(în cazul în care există, dacă nu există o imagine goală va apărea), titlul job-ului și compania de care aparține dar și un link de detalii care redirecționează utilizatorul pe o pagină unde se vor afișa detaliile job-ului și în cazul în care utilizatorul este autentificat și job-ul nu este adăugat de el atunci în partea dreaptă găsim un buton prin care utilizatorul poate aplica pentru acel job, apăsând acel buton se va deschide un modal unde utilizatorul va introduce emailul, o descriere și va putea încărca un CV( Curriculum Vitae), în cazul în care utilizatorul nu este autentificat un mesaj(“Applying for a job requires authetification!”) va fi afișat în partea dreaptă.

În cazul în care utilizatorul de companie găsește job-ul adăugat de el, job-ul va avea o iconiță cu un coș de gunoi în colțul din dreapta sus, la apăsare job-ul fiind șters din baza de date, același caz se aplică și în cazul în care utilizatorul intră la detaliile acelui job, îi vor apărea două butoane, unul pentru a edita și unul pentru a șterge job-ul.

Secțiunea Add Employer

În această secțiune găsim un formular, Fig. V.7.7, acest formular conține input-uri pentru numele companiei, industria din care face parte, statul, mărimea companiei, website-ul și adresa, adresa fiind importantă deoarece pe pagina de detalii a unei companii vom avea și o hartă de la Google Maps cu locația selectată în funcție de adresa adăugată de utilizator.

Fig. V.7.7 Secțiunea Add Employer

În cazul adăugarii unei companii contul de utilizator devine utilizator de companie având după acces la adăugare job-uri și editarea lor și profilului de companie, unde compania poate să fie editată și în cazul în care un utilizator sau mai mulți aplică la unele din job-urile companiei, el va putea vedea toate aplicăriile.

După adăugarea cu succes a unei companii, utilizatorul va vedea un mesaj cum că compania trebuie să fie acceptată, admin-ul site-ului va primi un mail cu detaliile companiei și va putea să accepte sau să respingă compania ștergând-o din baza de date, acest lucru îl decide admin-ul după ce s-a documentat și utilizatorul care a adăugat compania este cu adevărat un angajat al ei. În secțiunea de admin, admin-ul poate la fel ca și în mail să respingă sau să adauge compania.

Secțiunea Contact

În Fig. V.7.8 găsim un formular de contact, care va trimite un mail cu informațiile oferite către admin-ul site-ului, aceast formular poate fi folosit și de utilizatori care nu sunt autentificați.

Această este o secțiune importantă deoarece utilizatori care nu sunt autentificați pot să pună întrebări admin-ului despre anumite detalii pe care îi intereseaza dar și pentru cei autentificați, ei putând semnala anumite probleme pe care le au sau anumite întrebări.

Fig. V.7.8 Secțiunea Contact

Secțiunea My Account

Această secțiune este dedicată utilizatorului conectat cu un cont, ea fiind accesibilă doar dacă utilizatorul este autentificat. Pentru a accesa această secțiune utilizatorul va apăsa butonul My Account, la apăsarea butonului se va deschide o listă după cum putem vedea și în Fig. V.7.9, în această figura vedem lista utilizatorului simplu iar în Fig. V.7.10 vedem lista utilizatorului de companie. Conturile utilizatorilor fiind de două tipuri, conțin și funcționalități diferite cum ar fi:

Utilizatorul simplu – ca utilizator simplu în listă se afișează “Edit my account” și “Sign out”, apăsarea butonului “Edit my account” va trimite utilizatorul la un formular unde va putea să își editeze detaliile contului cum ar fi numele, email-ul. Apăsarea butonului “Sign out” va deautentifica utilizatorul din aplicație.

Fig. . – Listă utilizator de companie

Utilizatorul de companie – ca utilizator de companie în listă vom găsi un buton în plus “Edit my company”, restul de butoane având aceași funcționalitate ca utilizatorul simplu. Apăsarea butonului “Edit my company” va deschide o pagină nouă cu un formular în care găsim detaliile companiei și o hartă de la Google cu adresa companiei, utilizatorul poate edita detaliile companiei cum ar fi numele, schimbarea pozei, adresei, etc., după ce utilizatorul va schimba anumite detalii despre companie va trebui să apese un buton “Save” care va salva formularul. Sub acest formular găsim listate job-urile companiei, precum și un buton de adăugare job, utilizatorul poate să șteargă job-urile sau în cazul în care vrea să editeze anumite detalii ale job-ului el poate să intre la detaliile job-ului dorit prin apăsare butonului “See details” prezent la fiecare job, apăsând acest buton utilizatorul va fi redireționat către detaliile job-ului unde va avea un buton de editare job. Deasupra formularului în cazul în care compania are aplicări la job-uri găsim un buton “You have job applications”, dacă compania nu are aplicări la niciunul din job-uri butonul va fi dezactivat și textul va fi “You have no job applications”. Dacă compania are aplicarii apăsarea acestui buton va deschide o căsuță de dialog conținând listate toate aplicariile, cum putem vedea și în figura FIGURA, fiecare aplicare conține numele job-ului la care utilizatorii au aplicat, email-ul, un mesaj și atașat un Curriculum Vitae. Utilizatorul de companie poate să descarce fișierul încarcat de aplicant precum și ștergerea aplicării.

Importare de companii printr-un API

Această funcționalitate se folosește pentru a încărca baza de date cu companii existente și adevărate din anumite State ale Americi.

API-ul este un set de subrutine pentru definiții, protocoale și unelte pentru construirea aplicațiilor. În termeni generali, este un set de metode definite de comunicație între o variație de componente software. API-ul este folosit în aplicații web deoarece este ușor să dezvolți o aplicație avînd datele necesare, care sunt puse cap la cap de un programator.

În această aplicație am folosit API-ul de la Yelp pentru a importa companii cu toate detaliile prezente. Yelp este o companie care se ocupă cu furnizarea datelor despre companii locale, având un website unde poți găsi toate companiile locale în apropierea San Francisco, California cu comentarii și note la fiecare în parte, ei mai dispun și de o aplicație pentru telefoane inteligente care conține tot aceleași date ca și website-ul. Yelp Fusion este API-ul de la Yelp el conținând toate aplicațiile pe care compania le are în baza de date. Pentru a folosi acest API ai nevoie de un cont și va fi nevoie să îți construiești o aplicație pentru a avea acces la datele lor, această aplicație oferinduți un id de client și o cheie de API, acestea se folosesc pentru a te autentifica la API când vei trimite din aplicație ta cereri către Yelp Fusion, fără acestea API-ul îți va returna o eroare.

Pentru importarea de companii avem o funcție import(), care se folosește de tabelele următoare:

Industries – această tabelă conține o mulțime de industrii încărcate în baza de date prealabil cu industriile pe care le-am dorit de la Yelp.

Boroughs – această tabelă conține statele din care vrem să importăm companii, deasemenea fiind încărcate în prealabil cu statele pe care le-am dorit.

Funcția de importare se găsește mai jos:

public function import()

{

$cities = Borough::all();

$industries = Industry::all();

$companies = Company::all();

$companiesNames = [];

$totalImported = 0;

foreach ($companies as $company) {

$companiesNames[] = $company->name;

}

foreach ($cities as $city) {

foreach ($industries as $industry) {

$countBusinesses = 0;

$businesses = json_decode(

self::search(

$industry->name,

$city->name

)

);

while(!empty($businesses->businesses)) {

if ($countBusinesses > 100) {

break;

}

foreach ($businesses->businesses as $business) {

$exist = array_search(

$business->name,

$companiesNames

);

if ($exist == false) {

$countBusinesses++;

$totalImported++;

$companyAddress = "";

foreach ($business->location->display_address as $address) {

if ($address == end($business->location->display_address)) {

$companyAddress .= $address;

} else {

$companyAddress .= $address.", ";

}

}

$company = new Company;

if (isset($business->name)) {

$company->name = $business->name;

$company->adress = $companyAddress;

$company->logo = isset($business->snippet_image_url) ?

$business->snippet_image_url : "";

$company->borough_id = $city->id;

$company->industry_id = $industry->id;

$company->approved = 1;

$company->save();

}

}

}

$businesses = json_decode(

self::search(

$industry->name,

$city->name

)

);

}

}

}

echo 'Total imported companies: '.$totalImported.'<br/>';

exit('DONE');

}

Această funcție este folosită pentru a importa companiile prin API, ea folosindu-se de alte funcții pentru asta. Pentru început se iau datele din cele două tabele menționate după care se parcurg pentru început toate statele găsite în baza de date și pentru fiecare stat se parcurg toate industriile, în această parcurgere se apelează o altă funcție numită search() în care se trimit doi parametrii, industriile și statele.

Funcția de căutare a parametriilor în API:

public function search($term, $location)

{

$url_params = array();

$url_params['term'] = $term ? : "";

$url_params['location'] = $location?: env('YELP_DEFAULT_LOCATION');

$url_params['limit'] = 2;

$req = self::request(env('YELP_API_HOST'),env('YELP_SEARCH_PATH'), $url_params);

return $req;

}

Această funcție acceptă cei doi parametri trimiși de funcția de importare și creează o mulțime din ei, această mulțime împreuna cu încă doi parametri, url-ul api-ului de la Yelp și calea către căutarea de companii în API, sunt trimiși către o altă funcție request() pe care o regăsim mai jos.

public function request($host, $path,$url_params = array())

{

try {

$curl = curl_init();

if (FALSE === $curl)

throw new Exception('Failed to initialize');

$url = $host . $path . "?" . http_build_query($url_params);

curl_setopt_array($curl, array(

CURLOPT_URL => $url,

CURLOPT_RETURNTRANSFER => true, // Capturare răspuns.

CURLOPT_ENCODING => "",

CURLOPT_MAXREDIRS => 10,

CURLOPT_TIMEOUT => 30,

CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

CURLOPT_CUSTOMREQUEST => "GET",

CURLOPT_HTTPHEADER => array(

"authorization: Bearer " . env('YELP_API_KEY'),

"cache-control: no-cache",

),

));

$response = curl_exec($curl);

if (FALSE === $response)

throw new Exception(curl_error($curl), curl_errno($curl));

$http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if (200 != $http_status)

throw new Exception($response, $http_status);

curl_close($curl);

} catch(Exception $e) {

trigger_error(sprintf(

'Curl failed with error #%d: %s',

$e->getCode(), $e->getMessage()),

E_USER_ERROR);

}

return $response;

}

În această funcție se face autentificarea la API și cererea companiilor. Acest lucru se face prin curl, curl fiind o librărie prin care se face conectarea la diferite servere cu diferite protocoale, funcția de request() conectându-se la Yelp folosindu-se de toți parametri trimiși de noi de la funcția search().

În acest curl se face și autentificarea, pentru autentificare se trimite un parametru cu cheia pe care am primit-o când am facut aplicația în Yelp Fusion, cheia funcționând ca o parolă și o trimitem în header. În cazul în care autentificarea nu a avut succes se va returna eroarea în consolă. Dacă autentificarea a fost cu succes, API-ul va răspunde înapoi cu companiile găsite în funcție de parametrii trimiși de funcția de import, adică statul și industria, răspunsul fiind returnat înapoi. După returnarea răspunsului înapoi funcției de importare, funcția va prelua datele primite și după ce le va verifica le va salva în baza de date, importarea fiind cu succes.

Această funcție este o funcționalitate importantă deoarece aplicația se folosește de acest API pentru a popula baza de date și implicit aplicația cu companii existente care pot fi descoperite chiar de proprii angajații.

Trimiterea de mail-uri

Trimiterea de mail-uri se face prin Laravel, pentru fiecare tipuri de mail pe care vrem să le folosim se crează o clasă “mailable”, aceste clase se crează prin comanda:

php artisan make:mail NumeleClasei

Această clasă va conține o funcție “build()” care va fi apelată în aplicație când se dorește trimiterea de mail.

public function build()

{

return $this->from( „Adresa de la cine se trimite mail-ul” ), „Titlul”)

->subject(„Subiectul”)

->view('emails.acceptedUser'); // Aici se trimite calea către view

}

View-ul apelat de această funcție reprezintă mesajul în sine pentru acel mail pe care dorim sa îl trimitem, un view pentru mail este scris în html și poate să aibă parametri trimiși din funcția cu care se apelează view-ul, acei parametri pot fi luați din baza de date.

Pentru trimiterea de mail într-o funcție vom folosi următoarea linie de cod:

Mail::to(‘Destinatar’)->send(new NumeleClasei(parametru1,parametru2));

În această linie de cod se apelează clasa Mail (aceasta fiind implementată de Laravel), care are nevoie de destinatar și de clasa creată pentru trimiterea de mail, aici se pot trimite și parametri, acești parametri fiind folosiți în view-ul cu pricina.

Secțiunea Admin

Această parte a aplicației este o pagină separată de restul aplicației fiind dedicată utilizatorilor admin. Secțiunea admin o regăsim în FIGURA , ea conține o secțiune de autentificare care redirectează utilizatorul admin pe o pagină construită cu modulul AdminLTE. Acest modul este o temă construită cu ajutorul Bootstrap și este folosită în special pentru secțiunile de admin, pentru tabloul de bord și tema panoului de control după cum se poate vedea și în Fig. V.7.11.

Fig. . – Secțiunea Admin

În această secțiune se găsesc toate companiile afișate printr-un modul numit DataTables, acest modul este folosit prin jQuery, rolul lui fiind de a spori accesabilitatea datelor în tabelele HTML. Funcționalitatea acestui modul se folosește prin a instala modulul prin Composer sau prin a include două fișiere unul pentru parte de afișaj(CSS) și unul pentru funcționalitate(JavaScript). În View-ul din poză găsim o funcție Ajax care apelează o funcție din Controller-ul de companii când pagina se încarcă și creează acest DataTable. Ruta apelată prin Ajax duce la o funcție din Controller-ul de companii care face select pe tabela companies din baza de date, după select funcția returnează variabila(“$companies”) care conține toate companiile din acea tabelă în felul următor:

return Datatables::of($companies)

->addColumn('show', '{{ action("CompanyController@show", "$id") }}')

->make(true);

În acestă returnare se creează DataTabel-ul și se apelează o altă funcție “show” din acest Controller care adaugă o coloană în plus DataTabel-ului. Această coloană nu este vizibilă dar se folosește pentru a apela alt View la apăsarea numelui unei companii, acest View conține un alt DataTable cu utilizatorul care aparține de această companie, companiile pot să nu fie asociate cu nici un utilizator, în acest caz se va returna un DataTable gol.

În pagina principală în care afișăm toate companiile regăsim în acel DataTabel numele companiilor, numele utilizatorilor (dacă există), numele utilizatorilor care așteaptă aprobare (dacă există), starea companiei (în așteptare sau aprobată), și o coloană cu acțiuni. Aceea coloană cu acțiuni conține trei butoane care sunt afișate după anumite condiții, dacă compania a fost deja aprobată coloanal va conține un singur buton de ștergere a companiei, dacă compania nu a fost aprobată coloana va conține două butoane, unul pentru aprobarea și unul pentru respingerea companiei.

Când un utilizator înregistrat își adaugă propria companie sau aplică pentru deținerea unei compani existente care nu are deja un utilizator utilizatorii admin primesc un email cu cererea. În cazul în care utilizatorul a adăugat o companie nouă, utilizatorul admin va trebui să decidă dacă aprobă sau respinge această companie prin butoanele găsite în coloana de acțiuni sau direct din acel email primit, în acel email având două butoane unul pentru respingere și unul pentru aprobare, în oricare dintre cazuri utilizatorul va primi un email cu aprobarea/respingerea companiei. Dacă utilizatorul aplică pentru deținerea unei compani existente fără utilizator, utilizatorul admin va primi un mail cu cererea acelui utilizator, în acel mail având din nou două butoane pentru aprobare/respingere a utilizatorului, la fel utilizatorul admin poate să aprobe/respingă acel utilizator din secțiunea de admin, acea companie având un utilizator în așteptare, pentru a aproba/respinge utilizatorul, admin-ul va apăsa pe numele companiei, acest lucru redirecționând-ul la pagina care conține DataTabel-ul cu utilizatorul în așteptare, acolo având butoane pentru aprobare/respingere.

Dacă o companie are deja un utilizator existent, utilizatorul admin poate să șteargă acest utilizator din DataTabel printr-un buton dedicate acestui lucru.

DataTabel-ul companiei are o bară de căutare prin care se poate căuta oricare din companiile existente în baza de date făra ca pagina să își facă refresh.

Rolul utilizatorului admin este de a decide dacă utilizatori care adaugă sau aplică pentru o companie, sunt deținătorii acelor companii, în funcție de asta admin-ul aprobă sau respinge cererile utilizatorilor.

Extinderea Aplicației

Extinderea acestei aplicații ar putea avea multe direcții în special pe partea de software, posibilele extinderi ar putea fi:

Pentru ca aplicația să atragă mulți mai mulți utilizatori s-ar putea adăuga mai multe funcționalitați de tipul importării de companii, adică adăugarea mai multor API de tipul acela, cele mai bune API-uri ar fi cele care importă companiile cu tot cu job-urile deja existente, acest lucru încărcând aplicația cu foarte multe job-uri deja existente fără ca utilizatori de companie să fie necesari pentru această aplicație.

Pe parte de software adăugarea unei funcționalități de autentificare cu conturi sociale cum ar fi: facebook, twitter, linkedin, etc., utilizatori autentificații în acest fel vor putea distribui job-urile sau companiile pe paginile sociale, atrăgând tot mai mulți utilizatori.

O funcționalitate multilanguage ar propulsa aplicația pe plan internațional.

Pe parte de hardware ar fi nevoie de o îmbunătațire după ce baza de date a aplicație va deține multe informații, va fi nevoie de un server capabil să susțină un număr mare de utilizatori și o bază de date încărcată, fără această îmbunătățire aplicația va pierde utilizatori pe termen lung.

Concluzii

Aplicația prezentată în acestă lucrare poate fi utilizată cu succes în căutarea job-urilor pe care companiile le adaugă în vederea recrutării de angajați, din această cauza aplicația poate să aibă mare succes cu destulă implicare și cu extinderea ei pe termen lung.

Aplicația este implementată folosind tehnologii de ultimă generație, atât pe partea de frontend cât și pe partea de backend, în acest fel am reușit să dobândesc și să aprofundez cunoștiințe noi în ceea ce privește tehnologiile de ultimă generație.

Pentru realizare aplicației am utilizat framework-ul Laravel, deoarece prezintă un mare avantaj în implementarea multor funcționalități.

Aplicația este user-friendly, adică este ușor de utilizat, ea putând fii accesată de pe mai multe device-uri din orice browser. Pentru a putea folosi aplicația mai mult decât local, va fi necesar instalarea ei pe un server cu un domeniu dedicat.

Aplicația poate fi folosită de orice utilizator, dar pentru funcționalitațile importante utilizatorul va fi nevoit să își înregistreze un cont.

Avantajul acestei aplicații față de alte aplicații similare este API-ul de importare a companiilor, acest API face posibil adăugarea de companii existente fără a fi nevoie de a le adăuga manual, iar companiile fiind adevărate ele pot fi găsite chiar de deținătorii lor, în acel caz ei având acces la adăugarea de job-uri.

Bibiliografie

[1] The Joy of PHP – Autor: Alan Forbes – publicată în 2015.12.04 – accesat în data de 14.04.2018

[2] https://www.quora.com/How-does-PHP-work – accesat în data de 14.04.2018

[3] Baze de date relaționale. Teorie și aplicații în Oracle – Autori: Győrödi Cornelia, Pecherle George – accesat în data de 21.04.2018

[4] JavaScript Step by Step 2nd Edition – Autor: Steve Suehring – editura: O’Reilly Media, Inc. – publicată în – 22.12.20120 – accesat în data de 21.04.2018

[5] HTML: A Beginner’s Guide 4th Edition – Autor: Wendy Willard – editura Osborn/Mcgraw Hil;Inc. – publicată în 23.06.2009- accesat în data de 23.04.2018

[6] https://sites.google.com/site/labinfosc/Home/baze-web-design/elemente-html – accesat în data de 23.04.2018

[7] https://www.learnenough.com/css-and-layout-tutorial/css/introduction – Autori: Lee Donahoe, Michael Hartl – accesat în data de 24.04.2018

[8] https://laravel.com/docs/5.3 – accesat în data de 24.04.2018

[9] https://medium.com/@dannyhuang_75970/learning-laravel-controllers-101-ad28d2bb5569 – Autor: Danny Huang – accesat în data de 05.05.2018

[10] Learning jQuery 4th Edition – editura: Packt Publishing Ltd. -publicată în 06.2013 -Autori: Jonathan Chaffer, Karl Swedberg – accesat în data de 06.05.2018

[11] Learning Bootstrap – editura: Packt Publishing Ltd. -publicată în 12.2014 – Autori: Aravind Shenoy, Ulrich Sossou – accesat în data de 10.05.2018

[12] https://www.wpblogx.com/what-is-xampp/ Autor: Prabhu Ganesan – accesat în data de 11.05.2018

[13] https://netbeans.org/about/ – accesat în data de 11.05.2018

DECLARAȚIE DE AUTENTICITATE A

LUCRĂRII DE FINALIZARE A STUDIILOR

Titlul lucrării

APLICAȚIE WEB PENTRU CĂUTARE DE JOB-URI

Autorul lucrării

MOZA BOGDAN GEORGE

Lucrarea de finalizare a studiilor este elaborată în vederea susținerii

examenului de finalizare a studiilor organizat de către Facultatea Inginerie

Electrică și Tehologia Informației din cadrul Universității din Oradea, sesiunea

iulie a anului universitar 2017-2018.

Prin prezenta, subsemnatul Moza Bogdan-George, CNP 1940809055124,

declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără

nici un ajutor neautorizat și că nici o parte a lucrării nu conține aplicații sau

studii de caz publicate de alți autori.

Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau

alte surse folosite fără respectarea legii române și a convențiilor internaționale

privind drepturile de autor.

Oradea,

DATA Semnătura

Similar Posts