FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ

|UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ
DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ ||
PROIECT DE DIPLOMĂ
Alina-Maria Cîrjaliu
COORDONATOR ȘTIINȚIFIC
Conf. dr. ing. Daniela DANCIU
Iulie 2017
CRAIOVA
|UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ
DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ||
Sistem de management al conținutului, cu aplicații în e-learning
Alina-Maria Cîrjaliu
COORDONATOR ȘTIINȚIFIC
Conf. dr. ing. Daniela DANCIU
Iulie 2017
CRAIOVA
DECLARAȚIE DE ORIGINALITATE
Subsemnata Alina-Maria Cîrjaliu, studenta la specializarea Ingineria sistemelor multimedia din cadrul Facultății de Automatică, Calculatoare și Electronică a Universității din Craiova, certific prin prezenta că am luat la cunoștință de cele prezentate mai jos și că îmi asum, în acest context, originalitatea proiectului meu de licență:
· cu titlul Sistem de management al conținutului, cu aplicații în e-learning,
· coordonată de Conf. dr. ing. Daniela DANCIU,
· prezentată în sesiunea Iulie 2017.
La elaborarea proiectului de licență, se consideră plagiat una dintre următoarele acțiuni:
· reproducerea exactă a cuvintelor unui alt autor, dintr-o altă lucrare, în limba română sau prin traducere dintr-o altă limbă, dacă se omit ghilimele și referința precisă,
· redarea cu alte cuvinte, reformularea prin cuvinte proprii sau rezumarea ideilor din alte lucrări, dacă nu se indică sursa bibliografică,
· prezentarea unor date experimentale obținute sau a unor aplicații realizate de alți autori fără menționarea corectă a acestor surse,
· însușirea totală sau parțială a unei lucrări în care regulile de mai sus sunt respectate, dar care are alt autor.
Pentru evitarea acestor situații neplăcute se recomandă:
· plasarea între ghilimele a citatelor directe și indicarea referinței într-o listă corespunzătoare la sfărșitul lucrării,
· indicarea în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de referințe a sursei originale de la care s-a făcut preluarea,
· precizarea sursei de la care s-au preluat date experimentale, descrieri tehnice, figuri, imagini, statistici, tabele et caetera,
· precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a căror paternitate este unanim cunoscută și acceptată.
Data, Semnătura candidatului,
|UNIVERSITATEA DIN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de Automatică și Electronică
|Aprobat la data de
…………………
Director de departament,
Prof. dr. ing.
Emil PETRE
|
PROIECTUL DE DIPLOMĂ
Numele și prenumele studentului/-ei:
|Cîrjaliu Alina-Maria|
Enunțul temei:
|Sistem de management al conținutului cu aplicații în e-learning|
Datele de pornire:
|Administrarea conținutului pentru o aplcație multimedia on-line. |
Conținutul proiectului:
|1. Introducere
2. Tehnologii utilizate în dezvoltarea aplicației:
3. Implementarea proiectului
4. Prezentarea proiectului
5. Concluzii
|
Material grafic obligatoriu:
|Da|
Consultații:
|Periodice|
Conducătorul științific
(titlul, nume și prenume, semnătura):|Conf. dr. ing. Daniela DANCIU|
Data eliberării temei:
|15.10.2016|
Termenul estimat de predare a proiectului:
|30.06.2017|
Data predării proiectului de către student și semnătura acestuia:
||
|UNIVERSITATEA DIN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de Automatică și Electronică
||
REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC
Numele și prenumele candidatului/-ei:|Cîrjaliu Alina-Maria|
Specializarea:|Ingineria sistemelor multimedia|
Titlul proiectului: |Sistem de management al conținutului cu aplicații în e-learning|
Locația în care s-a realizat practica de documentare (se bifează una sau mai multe din opțiunile din dreapta):|În facultate □|
|În producție □|
|În cercetare □|
|Altă locație: [se detaliază]|
În urma analizei lucrării candidatului au fost constatate următoarele:
Nivelul documentării|Insuficient
□|Satisfăcător □|Bine
□|Foarte bine
□|
Tipul proiectului|Cercetare
□|Proiectare
□|Realizare practică □|Altul
[se detaliază]|
Aparatul matematic utilizat|Simplu
□|Mediu
□|Complex □|Absent
□|
Utilitate|Contract de cercetare □|Cercetare internă □|Utilare
□|Altul
[se detaliază]|
Redactarea lucrării|Insuficient
□|Satisfăcător □|Bine
□|Foarte bine
□|
Partea grafică, desene|Insuficientă
□|Satisfăcătoare □|Bună
□|Foarte bună
□|
Realizarea practică|Contribuția autorului|Insuficientă
□|Satisfăcătoare □|Mare
□|Foarte mare
□|
|Complexitatea
temei|Simplă
□|Medie
□|Mare
□|Complexă
□|
|Analiza cerințelor|Insuficient
□|Satisfăcător □|Bine
□|Foarte bine
□|
|Arhitectura|Simplă
□|Medie
□|Mare
□|Complexă
□|
|Întocmirea specificațiilor funcționale|Insuficientă
□|Satisfăcătoare □|Bună
□|Foarte bună
□|
|Implementarea|Insuficientă
□|Satisfăcătoare □|Bună
□|Foarte bună
□|
|Testarea|Insuficientă
□|Satisfăcătoare □|Bună
□|Foarte bună
□|
|Funcționarea|Da
□|Parțială
□|Nu
□|
Rezultate experimentale|Experiment propriu
□|Preluare din bibliografie
□|
Bibliografie|Cărți
|Reviste
|Articole
|Referințe web
|
Comentarii
și
observații
||
În concluzie, se propune:
ADMITEREA PROIECTULUI
□|RESPINGEREA PROIECTULUI
□|
Data, Semnătura conducătorului științific,
REZUMATUL PROIECTULUI
Sitemul de management al conținutului cu aplicații în e-learning este o aplicație web ce facilitează adaugarea și modificarea de conținut într-o pagina web.
Rolul acestei aplicații este de a ușura administrarea conținutului dintr-un site web pentru persoanele ce nu au suficiente cunoștințe de programare.
Acest sistem de management are numeroase funcții : permite utilizatorilor de tip administrator să se autentfice în aplicația web și să poată adauga pagini noi, să poata modifica paginile existente, să aleagă meniul în care va fi publicată o nouă pagină, poate administra utilizatorii existenți, poate administra lista limbilor existente, poate adauga o nouă limbă și traduce conținutul pentru paginile existente în limba dorită, poate seta unui anumit tip de utilizator un cont restricționat ce îi permite accesul doar la meniul de pagini, de unde poate adauga și modifica pagini in aplicația web.
Acest sistem de management al coțtinutului poate fi folosit cu success pentru a administra conținut cu caracter educațional cum ar fi: cursuri, imagini, cursuri în format video în mai multe limbi, facilitând astfel studenților sau vizitatorilor țintă accesul la informația educațională.
Termenii cheie: CMS, php, MySQL, CSS, HTML, JavaScript, administrare conținut, adaugare conținut, modificare conținut, utilizator, administrator, administrare, limbă
CUPRINSUL
1 Introducere 14(„\l „)
1.1 Scopul 14(„\l „)
1.2 Motivația 15(„\l „)
1.3 Ce este un sistem de administrare al conținutului (CMS) 15(„\l „)
1.4 Conceptul de e-learning 16(„\l „)
2 TEHNOLOGII Utilizate în dezvoltarea aplicației 17(„\l „)
2.1 Baze de date MySQL 17(„\l „)
2.2 PHP (Hypertext Preprocessor) 19(„\l „)
2.3 CSS 23(„\l „)
2.4 JavaScript 24(„\l „)
3 Implementarea aplicației web 27(„\l „)
3.1 MySQL 27(„\l „)
3.2 PHP 39(„\l „)
3.3 CSS 50(„\l „)
3.4 JavaScript 55(„\l „)
3.5 Ckeditor 56(„\l „)
4 Prezentarea sistemului de management al conținutului cu aplicații in e-learning 58(„\l „)
5 Concluzii 76(„\l „)
6 Bibliografie 77(„\l „)
7 Referințe web 78(„\l „)
A. Codul sursă 79(„\l „)
B. Site-ul web al proiectului 117(„\l „)
C. CD / DVD 118(„\l „)
LISTA FIGURILOR
Figura 1 Deservirea unei pagini statice, fara interventia interpretorului PHP 24(„\l „)
Figura 2 Deservirea unei pagini dinamice, modificata de PHP în momentul request-ului 24(„\l „)
Figura 3 autentificare în cpanel 30(„\l „)
Figura 4 crearea bazei de date 31(„\l „)
Figura 5 setarile bazei de date 32(„\l „)
Figura 6 adaugarea utlizatorului bazei de date 33(„\l „)
Figura 7 legatura dintre utilizator și baza de date aferentă 34(„\l „)
Figura 8 crearea unui nou tabel în baza de date 35(„\l „)
Figura 9 tabelul access 35(„\l „)
Figura 10 tabelul languages 35(„\l „)
Figura 11 tabelul labels 36(„\l „)
Figura 12 tabelul labels_content 36(„\l „)
Figura 13 tabelul labels_types 36(„\l „)
Figura 14 tabelul labels_types_content 37(„\l „)
Figura 15 tabelul languages_content 37(„\l „)
Figura 16 tabelul access_content 38(„\l „)
Figura 17 tabelul admins 38(„\l „)
Figura 18 tabelul navigation_types 39(„\l „)
Figura 19 tabelul pages 39(„\l „)
Figura 20 tabelul pages_content 39(„\l „)
Figura 21 tabelul navigation 40(„\l „)
Figura 22 tabelul navigation_types_content 40(„\l „)
Figura 23 relatiile dintre tabelele bazei de date 41(„\l „)
Figura 24 directorul template 42(„\l „)
Figura 25 fisierele header.php și footer.php 42(„\l „)
Figura 26 cod header.php 43(„\l „)
Figura 27 cod clasa Dbase 44(„\l „)
Figura 28 cod conexiune catre baza de date 44(„\l „)
Figura 29 cod clasa Core 45(„\l „)
Figura 30 cod clasa Language 45(„\l „)
Figura 31 cod clasa Navigation 46(„\l „)
Figura 32 cod clasa Page 46(„\l „)
Figura 33 cod clasa Admin 47(„\l „)
Figura 34 cod index.php 47(„\l „)
Figura 35 cod adaugă utilizator “add.php” 48(„\l „)
Figura 36 cod modifică urilizator – edit.php 48(„\l „)
Figura 37 cod sterge utilizator – remove.php 49(„\l „)
Figura 38 cod index.php 49(„\l „)
Figura 39 cod campuri pagină nouă – index.php 50(„\l „)
Figura 40 cod adauga o pagină nouă – add.php 50(„\l „)
Figura 41 cod avertizare identitate folosită 51(„\l „)
Figura 42 cod modificare pagina existentă – edit.php 51(„\l „)
Figura 43 cod adaugare pagină în meniu – navigation.php 52(„\l „)
Figura 44 cod șterge pagină – remove.php 52(„\l „)
Figura 45 cod cloare si dimensiune heading 53(„\l „)
Figura 46 culoare titlu CSS 53(„\l „)
Figura 47 inaltime și latime logo CSS 54(„\l „)
Figura 48 selector limbă CSS 54(„\l „)
Figura 49 cod navigatie front .css 55(„\l „)
Figura 50 cod stilizare elemente admin 55(„\l „)
Figura 51 cod setare culoare si dimensiune heading admin 56(„\l „)
Figura 52 cod logo css admin 56(„\l „)
Figura 53 cod selector de limba admin 57(„\l „)
Figura 54 cod admin navgatie.css 57(„\l „)
Figura 55 cod Core.js 58(„\l „)
Figura 56 cod form.js 59(„\l „)
Figura 57 ckeditor implementare javascript 60(„\l „)
Figura 58 ckeditor cod creare clasa 60(„\l „)
Figura 59 exemplu funcții ckeditor 60(„\l „)
Figura 60 exemplu structură site web 62(„\l „)
Figura 61 pagina Home 63(„\l „)
Figura 62 pagina curs php 64(„\l „)
Figura 63 pagina curs MySQL 65(„\l „)
Figura 64 pagina curs css 66(„\l „)
Figura 65 pagina contact 67(„\l „)
Figura 66 selector limbă 68(„\l „)
Figura 67 pagina de autentificare 68(„\l „)
Figura 68 inserarea utilizatorului si a parolei 68(„\l „)
Figura 69 avertizare utilizator sau parola incorectă 69(„\l „)
Figura 70 pagina de administrare pagini 69(„\l „)
Figura 71 meniu pagini 70(„\l „)
Figura 72 adauga o pagină nouă 71(„\l „)
Figura 73 inserare pagini în meniu 72(„\l „)
Figura 74 listă meniu 73(„\l „)
Figura 75 listă pagini 73(„\l „)
Figura 76 pagina administrare etichete 74(„\l „)
Figura 77 meniu etichete 74(„\l „)
Figura 78 lista limbi existente 75(„\l „)
Figura 79 pagina tipuri de etichete 75(„\l „)
Figura 80 pagină utilizatori 76(„\l „)
Figura 81 meniu utilizatori 76(„\l „)
Figura 82 adaugă un utilizator nou 77(„\l „)
Figura 83 listă selectare tip utilizator 78(„\l „)
Figura 84 perimisiuni restrictive cont utilizator 78(„\l „)
1 Introducere
1.1 Scopul
Ideea de bază a acestui proiect a fost acea de a ușura adaugarea și modificarea de conținut nou pentru o aplcație web și de putea face acest proiect util și pentru conceptul de E-learning. Astfel după ce mi-am așternut ideile pe hartie și le-am discutat împreună cu profesorul coordonator am început să dezvolt o aplcație web bazată pe un sistem de management al conținutului ce se poate adauga în mai multe limbi pentru a facilita studenților accesul la informație în limbă lor natală.
Pentru a realiza o pagina web sau a putea modifica o pagina web în general este nevoie de cunostinte de programare, iar pentru a face acest lucru cât mai ușor am implementat un sistem de administrare al conținutului, astfel pentru a adauga sau a modifica o pagină în aceasta aplcație web nu sunt necesare cunoștinte de programare. Utilizatorul administrator se va putea autentifica folosind un nume de utilizator și o parolă, pentru a putea avea acces la panoul de administrare al aplicației web.
Din acel panou, utilizatorul va putea selecta limba în care dorește să fie afișat conținutul, poate adauga o pagină nouă, poate selecta tipul meniului unde dorește să faca publica pagnia (meniu principal, meniu secundar și meniul subsol), poate adauga o nouă limbă disponibilă completand toate etichetele afișate în limbă pe care acesta dorește să o introducă, poate crea un nou utilizator ce va avea acces la panoul de admnistrare, poate modifica conținutul paginilor existente, poate șterge pagini, modulele de limbă implementate și utilizatorii creați.
1.2 Motivația
Motivația realizarii acestui sistem de management al conținutului a fost acea de a putea adauga și modifica ușor conținut web într-o aplcație web, adaugarea paginilor În meniu se va face uăor, selectand o pagină existentă și atribuindui unul dintre cele trei meniuri existente.
Managementul utilizatorilor este ușor de realizat, utilizatorii pot fi de două tipuri, de tip administrator ce au acces la toate zonele din pagina de administrator și pot adauga, modifica sau șterge conținut din toata aplicația web sau utilizatorul de tip utilizator ce are acces numai la meniul de pagini, le va putea modifica, adauga și șterge.
Sistemul de management al conținutului are aplicații în e-learning, paginile create de administrator având conținut educational pentru a putea facilita învațamantul la distanță.
Fiind o aplcație ce poate adauga conținutul în mai multe limbi existente utilizatorul ținta nu va fi doar regional, iar informația afișată poate fi citită în mai multe limbi. Astfel facilitând studenților din programele ERASMUS accesul la informația educațională.
1.3 Ce este un sistem de administrare al conținutului (CMS)
Un CMS (Content management system) sau un sistem de administrare al conținutului este un sistem software special creat pentru automatizarea cât mai amplă a gestiunii conținutului, în special realizat pentru aplicatiile web. Scopul său este de a reduce sau elimina intervenția programatorilor la modificarea și administrarea aplicațiilor web. CMS-ul facilitează organizarea, controlul și publicarea de pagini, documente, imagini sau alt tip de conținut și resurse multimedia. Un ‘CMS web’ este un sistem de management al conținutului cu facilități adiționale pentru ușurarea publicării de conținut pe diversele pagini web.
Sistemele de administrare a conținutului web sunt folosite adesea pentru stocarea și controlul documentelor cum ar fi articole. Un CMS poate avea următoarele funcții:
· Crearea și transferul de documente și materiale multimedia
· Identificarea utilizatorilor cheie și a rolului lor în gestionarea conținutului
· Atribuirea de roluri și responsabilități diferitelor categorii de conținut
· Urmărirea și organizarea mai multor versiuni ale aceluiași element de conținut.
· Publicarea conținutullui într-o librarie, pentru a sprijini accesul la conținut. În ultima vreme libraria (baza de date) este o parte foarte importantă a sistemului.
De obicei un asemenea sistem oferă unelte software prin care utilizatorii fără cunoștințe de programare pot crea și organiza conținutul cu ușurință. Majoritatea sistemelor folosesc o bază de date pentru stocarea conținutului, și o temă de prezentare pentru afișarea acestuia vizitatorilor obișnuiți. Administrarea se face în mod normal printr-un motor de cautare web. [CMS1]
1.4 Conceptul de e-learning
Conceptul de „E-learning” include toate formele de învătare sprijinite de mediul electronic, conceptul referindu-se și la modul de predare si la tehnologia educatională.
Caracteristicile acestui tip de invatare sunt:
– procesul de învătare este bazat pe web și pe utilizarea calculatorului ca mijloc de învătare;
– contțnutul este livrat prin internet, intranet / extranet, în fomat multimedia (imagini, audio, video, etc.)
– procesul de învătare se realizează într-o clasă virtuală;
– clasa virtuală lucrează sub îndrumarea unui lector (moderator) ce planifică cursurile, activitatea grupului de participanți, supune dezbaterii acestora aspecte ale cursului în conferinte asincrone (forumuri de discutii) sau sincrone, furnizeaza resurse auxiliare, comentează temele si îl indrumă pe fiecare cursant;
e-Learning conduce la dobandirea de noi cunoștinte prin metode moderne și eficiente de învatare, permite accesul la informatiile cele mai noi si mai mult decat atat, permite accesul de oriunde și nu în ultimul rand sprijină învatarea continuă. [ELEARNING2]
2 TEHNOLOGII Utilizate în dezvoltarea aplicației
Pentru dezvoltarea aplicației “Sistem de management al conținutului cu aplicații în e-learning” am folosit mai mulre limbaje de programare:
1. Baze de date MySQL
2. PHP ( Hypertext Preprocessor)
3. CSS și HTML
4. Javascript
5. JQuery
2.1 Baze de date MySQL
MySQL este o platforma de conținut disponibil cu un sistem de administrare a bazelor de date. Numele “MySQL” este o combinație dintre “My” ce vine de la numele fiicei cofondatorului “Michael Widenius(„https://en.wikipedia.org/wiki/Michael_Widenius”)’” și “SQL” ce reprezintă abrevierea de la “Structured Query Language”.
Limbajul de programare folosit în realizarea bazei de date MySQL este C și C++. Baza de date MySQL este compatibilă cu multe sisteme de operare: “Microsoft Windows”, “OpenSolaris” și “OracleSolaris” etc.
Programul MySQL este oferit pieței largi în două ediții diferite: programul cu conținut disponibil “MySQL Community Server” și “Enterprise Server”. Diferența dintre MySQL Enterprise Server și MySQL Community Server este bazată pe o serie de extensii proprii ce se instalează ca și conexiuni de server, în rest folosesc aceleali versiuni de sistem și sunt bazate pe același cod sursă.
MySQL este un sistem de baze de date web, ce ruleaza pe server și este ideal de folosit pentru aplicații de mici dimensiuni cât și pentru aplicații complexe. Este rapid, de încredere și ușor de folosit de către utilizatori.
Bazele de date MySQL sunt structurate în tabele. Tabelele sunt o colecție de date asemanatoare ce conțin rânduri și coloane.
Bazele de date MySQL sunt folosite pentru a stoca informații pe categorii. De exemplu o companie poate avea o bază de date cu urmatoarele tabele:
1. Angajați
2. Produse
3. Clienți
4. Comenzi
Pentru a putea scrie cod în MySQL se folosesc cereri sau intrari de tip Query.
Se poate căuta printr-o instrucțiune de tip query, iar apoi se va returna un rezultat al acestei instrucțiuni.
Exemplu de instrucțiune SELECT: “SELECT LastName FROM Admins”
Query-ul de mai sus selectează datele din coloana „LastName” a tabelului „Admins”.
Exemple de tipuri de instrucțiuni:
· SELECT(selectează date din baza de date și le returnează utilizatorului)
· UPDATE(actualizează conținutul nou introdus în baza de date)
· DELETE(este folosit pentru a șterge date introduse în tabelele din baza de date)
· INSERT(adaugă conținut nou în tabelele din baza de date creată)
2.2 PHP (Hypertext Preprocessor)
PHP (Hypertext Preprocessor) este un limbaj de programare cu ajutorul căruia se pot modifica conținutul paginilor web înainte ca acestea să fie transmise de server către motoarele de cautare ale utilizatorilor.
Limbajul de programare PHP, poate genera conținut HTML cu ajutorul unor fișiere existente sau pornind de la zero, poate afișa un element de tip imagine sau orice alt conținut ce poate fi interpretat de un motor de cautare. În cadrul acestui proces, PHP poate comunica cu baze de date, anumite fișiere externe sau alt tip de resurse. Deoarece procesarea se realizează la nivelul serverului web, înainte ca paginile web să ajunga în motorul de cautare, PHP este un limbaj de programare de tip server-side.
Modul în care limbajul de programare PHP genereaza conținut pentru o pagina web ce va fi afișată de motorul de cautare se face prin instrucțiunile delimitate de etichetele “”. Asadar, orice se află intre aceste etichete (tag-uri) va fi considerat cod-sursa și va fi executat de interpretorul PHP și inlocuit cu rezultatul executiei. conținutul ce se află în afara acestor etichete ( tag-urilor) ramane neschimbat și va fi transmis către motorul de cautare. De exemplu, este prezentată o pagină ca mai jos:

Astazi este

Rezultatul va fi o pagină HTML ce va conține cuvintele „Astazi este” și rezultatul codului PHP (in cazul acesta – dată curentă). Codul HTML final, transmis de server în urma procesarii PHP este urmatorul:

Astazi este 22.06.2017

Codul PHP nu este necesar să fie inclus în pagina HTML. Secventa de mai jos produce o pagină asemanatoare celei de mai sus (în acest caz PHP crează o pagină HTML de la zero).
‘;
print Astazi este’ . date( ‘d.m.Y’ );
print ‘‘;
?>
„PHP reprezintă un limbaj de programare de tip interpretat. Ceace înseamnă ca fișierele ce contin cod-sursă PHP sunt interpretate ca atare în momentul execuției, de către PHP. Astfel, pentru execuția unei portiuni de cod PHP este folosit codul-sursa asa cum a fost scris el, și nu este transformat într-o forma intermediara (binara sau cod-masina) cum se intampla la Java sau C/C++. Acest lucru oferă flexibilitate, întrucat orice modificare a fișierelor sursă va fi aplicata imediat la urmatoarea execuție, fara alti pasi intermediari. Există și dezavantaje la acest mod de lucru, cum ar fi timp mai mare de execuție a codului, dar în anumite situații avantajele pot cântari mai mult decât dezavantajele. Datorită faptului ca limbajul este unul interpretat, PHP mai este numit și limbaj de scripting.
În sens mai larg, PHP este un limbaj de programare universal (sau general-purpose), oferind toate facilitațile oricarui limbaj avansat. Codul scris în PHP poate face aproape aceleași lucruri ca un cod de C/C++ sau Java. Cu toate astea, PHP s-a impus în zona web, ca limbaj server-side, ce extinde funcționalitatea serverelor web. Din acest motiv programarea în PHP mai este denumită și programare web sau programare web server-side.”[PHP1].
Interpretorul de PHP este folosit ca o componenta adițională, reprezentant o extensie a serverului web ce este invocată ori de cate ori o pagina PHP este accesată. Componenta procesează codul-sursă din pagină, iar apoi trimite rezultatul înapoi la serverul web, ajungând în final în motoarele de cautare ale utilizatorilor. Acest proces este prezentat în prima imagine de mai jos.
Figura 1 Deservirea unei pagini statice, fara interventia interpretorului PHP
Figura 2 Deservirea unei pagini dinamice, modificata de PHP în momentul request-ului
PHP de tip static și dinamic
Prin intermediul imaginilor de mai sus, se poate observa ca atunci când nu există un interpretor PHP, paginile sunt trimise direct spre utilizatori în forma în care acestea sunt salvate pe disc, fara nici o altă modificare. Pentru a putea actualiza conținutul acestora, este nevoie de intervenția directă asupra lor și salvarea modificarilor pe server. Acest tip de pagină sunt denumită „pagina statica”.
Folosind o secventa de cod PHP se va putea prelua conținutul introdus într-o baza de date, eliminand problema actualizarii – scriptul de PHP va afișa automat noile date adaugate în baza de date. Astfel se poate rezolva și problema legaturilor personalizate toate elementele specifice unor date nou adaugate pot fi generate în mod automat.
Aceste pagini sunt, astfel, modificate de PHP la momentul accesarii lor de către utilizatori. în funcție de parametrii primiti și de secventa de cod definita de programator, aceași pagină poate avea conținut diferit. Aceasta proprietate este denumită dinamism, iar o astfel de pagina este considerata pagină dinamică.
2.3 CSS
Foile de stil în cascada (CSS) reprezintă un limbaj de stilizare al etichetelor HTML. Denumirea CSS este dată de expresia Cascading Style Sheets (Foi de stil în cascada). O variantă mai modernă de stilizare este cea în care se folosesc numai foile de stil în cascadă. Acest lucru reprezintă faptul ca de la culoarea literelor și a fundalului inclusiv pana la pozitionarea elementelor de pe o pagina web, totul este stilizat prin CSS. Stilurile folosite pe o pagina pot fi încorporate în pagina respectivă sau pot fi chemate din fișiere externe, fișiere de tip css.
Stilurile pentru o pagină web pot fi definite în partea de Head a documentului html sau se pot defini într-un fișier de tip css extern, pe care putem apela tot din partea de head a paginii sau putem aplica un stil diferit în partea Body a fișierului html, la fiecare etichetă html în parte.
Cu ajutorul stilurilor CSS se poate stiliza aplicații web întregi dintr-un singur fisier. Daca se va alege aceasta optiune pentru aplicația web va rezulta mai putin cod în conținutul fiecarei pagini, iar aplicația web se va incarca mult ma rapid în motoarele de cautare. Daca în viitor se va face o modificare asupra aplicației web, nu va mai fi necesară modificarea fiecarei pagini a aplicatiei, ci se va modifica un singur fisier, fișierul de tip css extern.
CSS-ul oferă libertatea de a suprascrie un stil deja definit, deoarece lucrează după o anumită ierarhie, adică:
1: – Prima dată se va lua în considerare stilul deja definit în fișierul extern, după care urmează
2- stilul definit în partea head a fisierului HTML, iar ultima dată
3- cu CSS-ul inline (in linie), adică stilul definit într-o etichetă html cu ajutorul atributului style se va putea suprascrie orice stil definit anterior.
Exemplu de sintaxa css:
p {
text-align:right; // alinierea textului la dreapta
color:green; // culoarea textului: verde
font-family:”times new roman”; // familia fontului „Times new roman” }[CSS1]
2.4 JavaScript
Limbajul de programare JavaScript (JS) este un limbaj de programare orientat pe obiect bazat pe conceptul prototipurilor. Adesea este folosit pentru introducerea unor funcționalități în paginile web. Astfel codul Javascript ce face parte din aceste pagini este rulat de către motorul de cautare. Limbajul este foarte cunoscut pentru folosirea sa în construirea aplicațiilor web, dar poate fi folosit și pentru acesul la obiecte încastrate (embedded objects) în alte aplicații.
Deși numele este asemanator și chiar există anumite similarități în sintaxă, între JavaScript și limbajul de programare Java nu există nicio legătură. Asemenea limbajului Java, JavaScript are o sintaxă apropiată de cea a limbajului de programare C.
“Programatorii web pot îngloba în paginile HTML script-uri pentru diverse activități cum ar fi verificarea datelor introduse de utilizatori sau crearea de meniuri și alte efecte animate.” [2]
Declararea variabilelor standard în JavaScript, acestea nu au tip atașat, și orice valoare poate fi stocată în orice variabilă.
Variabilele sunt declarate cu un var declarație și se pot declara mai multe variabile associate unei singure date.
Aici este un exemplu de declarații variabile și valori globale:
var x = 0 ; // o variabilă globală, deoarece nu este inclusa în nici o funcție
function f () {
var z = ‘foxes’ , r = ‘birds’ ; // 2 variabile locale
m = ‘fish’ ; // variabilă globală, deoarece nu a
fost declarat înainteniciunde
function child () {
var r = ‘monkeys’ ; // Această variabilă este locală și nu afectează „birds” r a functiei mamă.
z = ‘penguins’ ; // Funcția copil este capabilă de a accesa variabilele din funcția mamă
}
twenty = 20 ; //Această variabilă este declarată pe următoarea linie, dar utilizabilă oriunde în funcția child () ;
return x ; //Putem folosi x aici, deoarece este globală
}
Când JavaScript încearcă să rezolve un identificator, se pare, în funcție de domeniul de aplicare locală. Dacă acest identificator nu este găsit, se pare, în funcția de exterior, care a declarat una locală, și așa mai departe de-a lungul lanțului de domeniul de aplicare până când ajunge la domeniul global în cazul în care variabila este globală.
Dacă nu este încă găsit, Javascript va ridica o excepție ReferenceError.
Atunci când atribuirea unui identificator, Javascript face exact același proces pentru a prelua acest identificator, cu excepția faptului că în cazul în care nu se găsește în domeniul global, se va crea „variabila”, ca o proprietate a obiectului la nivel global.
Declararea unei variabile (cu cuvântul cheie var), în afara corpului oricărei funcții, va crea, de asemenea, o variabilă nouă la nivel mondial.
Mesaje de eroare [modificare | modificare sursă]
Mesaje de eroare personalizate pot fi create folosind clasa Error:
throw new Error („Ceva a mers prost.”);
Imbricate în instrucțiunile condiționate, aceste instanțe pot înlocui blocurile try/catch:
var emailAddress = („Va rugam să introduceti adresa de e-mail:”, „”);
if ( ! emailAddress || emailAddress. length === 0 ) {
throw new Error („Ne pare rău. Trebuie să introduceți o adresă de e-mail pentru a continua”); [JAVASCR1]
3 Implementarea aplicației web
3.1 MySQL
Proiectarea bazei de date este cel mai important element din acest proiect, deoarece în baza de date vor fi stocate informațiile paginilor web existente, informații privind etichetele de limbă introduse, informații cu privire la adaugarea și stocarea utilizatorilor.
Deoarece platforma de administrare a conținului este un proiect complex, baza de date va avea mai multe tabele ce se vor lega intre ele prin legaturi unu la unu și unu la mulți si mulți la mulți.
Deoarece platforma pentru administrarea conținutului va fi creată pe un server online, se vor prezenta pașii necesari pentru a crea și popula baza de date, structura tabelelor și a legaturilor dintre ele.
1. În bara de cautare a motorului de cautare folosit se va scrie numele domeniului urmat de semnul “/” și apoi se va scrie cpanel (exemplu: www.oprean.net/cpanel).
2. Utilizatorul va fi redirecționat către o paginș de autentificare în cpanel, aici se va introduce utilizatorul și parola aferenta contului după care se va apasa butonul de “Login”.
Figura 3 autentificare în cpanel
3. După autentificare, utilizatorul va fi redirecționat către pagina meniu a cpanel-ului. Se va cauta optiunea “MySQL Database Wizard” și o se va accesa pentru a putea crea baza de date.
4. După accesarea “MySQL Database Wizard” utilizatorul va fi redirectionat către pagina în care se va putea crea baza de date:
Figura 4 crearea bazei de date
5. Se va denumi baza de date “multilingual” și se va apasa butonul “Next Step”.
6. Se va putea selecta tipul de caractere pe care baza noastra de date le va asimila cât și limbă stabilita pentru aceasta.
Figura 5 setarile bazei de date
7. Fiecare bază de date trebuie să aiba un utilizator propriu, astfel după creerea bazei de date trebuie să se creeze și să se configureze utilizatorul aferent acesteia.
Din optiunea “MySQL Users” ce se gaseste tot în “MySQL Databases Wizard”, se adaugă numele utilizatorului, se setează o parolă și se va apasa pe butonul “Create User”.
Figura 6 adaugarea utlizatorului bazei de date
8. Acum urmează să se atribuie utilizatorului nou creat baza de date. Din optiunea “Add user to database”, se va selecta utilizatorul creat și baza de date și se va apasa pe butonul “Add”.
Figura 7 legatura dintre utilizator și baza de date aferentă
Adaugarea tabelelor în baza de date:
1. Se deschide “phpMyAdmin” și selectam baza de date.
2. Se va apasa pe butonul “New” , iar utilizatorul va fi redirecționat către creerea unui nou tabel:
Figura 8 crearea unui nou tabel în baza de date
Primul tabel este tabelul access, pentru adaugarea și stocarea utilizatorilor:
Figura 9 tabelul access
Astfel “id” reprezintă numarul de utilizatori, este setat ca și cheie primară cu atributul de “auto_increment”. Nu permite campuri goale.
Al doilea tabel este tabelul “Languages” în care vor fi stocate numele limbilor folosite în platforma și id-ul acestora:
Figura 10 tabelul languages
Al treilea tabel este tabelul “labels” ce reprezintă etichetele, aici vor fi stocate numele etichetelor, tipul acestora și id-ul.
Figura 11 tabelul labels
Al patru-lea tabel este tabelul labels_content, aici vor fi stocate conținutul etichetelor în limbile selectate, în acest caz, Româna, Engleza, Spaniola și Germana:
Figura 12 tabelul labels_content
Tabelul cu numarul cinci este “labels_types” aici vor fi stocate tipul etichetelor(Avertizari, Imagini, Confirmari și Etichete). Id este cheie primară, setata ca “auto_increment”(valoarea lui creste singura cu 1).
Figura 13 tabelul labels_types
Tabelul cu numarul șase este “labels_types_content”, câmpul Id este cheia primară a acestui tabel, setata ca “auto_increment” (valoarea să crește cu 1), aici vor fi stocate date despre etichete, limbi și conținutul acestora, nici unul dintre cele 4 campuri nu se poate salva fară a introduce informații în câmpurile respective(nu permite NULL). Tabelul prezintă o legătură de unu la mulți cu încă două tabele, „label” se leagă printr-o cheie de tip „foreign key” cu „label_types.id” din tabelul „label_types”. Iar „language” se leagă printr-o cheie de tip „foregin key” cu „languages.id” din tabelul „language”.
Figura 14 tabelul labels_types_content
Tabelul cu numarul șapte este “languages_content” aici se vor înregistra și stoca date despre conținutul limbilor pe care dorim să le introducem în platforma web de management al continutului. “Language_id” se va lega printr-o cheie de tip “foreign key” cu “languages.id” din tabelul “languages” precum și “language” se va lega prin acelasi tip de cheie cu “languages.id” din tabelul “languages.”
Figura 15 tabelul languages_content
Tabelul cu numarul opt este „access_content”, aici se vor înregistra și stoca date cu privire la utilizatorii ce se vor înregistra în platforma de management al continutului. Acest tabel prezintă legaturi de tipul unu la multi(one to many), „access” se leagă de „access.id” din tabelul „access” printr-o cheie straină de tip „foreign key”, iar „language” se leagă prin acelasi tip de cheie ci „languages.id” din tabelul „languages”.
Figura 16 tabelul access_content
Tabelul cu numarul 9 este tabelul „admins”, aici se înregistrează și stochează informații despre utilizatorii inregistrati (nume, prenume, email, parola etc.).
Figura 17 tabelul admins
Tabelul cu numarul 10 este tabelul „navigation_types”, aici se înregistrează și stochează informații despre tipul navigatiei.
Figura 18 tabelul navigation_types
Tabelul cu numarul 11 este tabelul „pages”, aici se înregistrează și stochează informații despre tipul titlul paginilor din aplicația web, și tipul acestora.
Figura 19 tabelul pages
Tabelul cu numarul 12 este tabelul „pages_content” aici se înregistrează și stochează informații despre conținutul paginilor incluse în alpicatia web, titlul paginilor, cuvintele cheie, descrierea meta și tipul acestora. Acest tabel prezintă legaturi de tipul unu la multi(one to many), „page” se leagă de „pages.id” din tabelul „pages” printr-o cheie straină de tip „foreign key”, iar „language” se leagă prin acelasi tip de cheie ci „languages.id” din tabelul „languages”.
Figura 20 tabelul pages_content
Tabelul cu numarul 13 este tabelul „navigation” aici se înregistrează și stochează informații despre tipul titlul paginilor din aplicația web, și tipul acestora. Acest tabel prezintă legaturi de tipul unu la multi(one to many), „type” se leagă de „navigation_types.id” din tabelul „pages” printr-o cheie straină de tip „foreign key”, iar „page” se leagă prin acelasi tip de cheie ci „pages.id” din tabelul „pages”.
Figura 21 tabelul navigation
Tabelul cu numarul 14 este tabelul „navigation_types_content”, aici se înregistrează și stochează informații despre tipul titlul paginilor din aplicația web, și tipul acestora. Acest tabel prezintă legaturi de tipul unu la multi(one to many), „navigation” se leagă de „navigation_types.id” din tabelul „navigation_types” printr-o cheie straină de tip „foreign key”, iar „language” se leagă prin acelasi tip de cheie ci „languages.id” din tabelul „languages”.
Figura 22 tabelul navigation_types_content
Figura 23 relatiile dintre tabelele bazei de date
3.2 PHP
După ce baza de date a fost creată iar, tabelele au fost configurate și legăturile au fost create se poate începe implementarea aplicației web prin definirea claselor cu ajutorul limbajului de programare PHP.
Realizarea structurii pentru a crea tema aplicației web:
In directorul „Template” se gasesc două directoare „admin” și „front” ce contin fiecare cate două fișiere „footer.php” și ” header.php”
Figura 24 directorul template
Figura 25 fisierele header.php și footer.php
Tema aplicației web este implementată atat pentru sectiunea “administrator” cat și pentru secțiunea vizibila utilizatorului final.
Astfel în directorul “front” este definit în php “header-ul” și “footer-ul” temei create pentru utilizatorul ce nu are drepturi de vizualizare asupra sectiunii de administrare a aplicației web.
Figura 26 cod header.php
In fișierul “header.php” se incepe prin declararea tipului de fișier pentru a putea fi recunoscut și citit de motorul de cautare.
Intre etichetele de tip și sunt definite titlul aplicației web, cuvintele cheie și descrierea meta a acestei aplicații precum și un link către fișierul extern de foi de stil în cascada.
Intre etichetele și sunt definite portiunile de “pre-header” și containerul inclus de acesta, logo-ul afisat al aplicației web precum și meniul ce va conține opțiunile de limbă disponibile, meniul principal pe care se vor regasi paginile afișsate ale aplicației web, meniul secundar sau cel din stanga în care puteam adauga de asemenea pagini ce vor fi afișsate în aplciatia web.
Conexiunea bazei de date se realizează în fișierul “Dbase.php” din directorul “Classes”.
Figura 27 cod clasa Dbase
Aici sunt definite, numele bazei de date, utilizatorul și parola pentru a putea avea acces la baza de date din phpMyAdmin.
Figura 28 cod conexiune catre baza de date
Se va seta conexiunea printr-un constructor ce apeleaza conexiunea, se vor seta proprietatiile bazei de date.
In fișierul “Core.php” din directorul Classes sunt definite ca și variabile publice variabilele: “language”, “lang_menu”, “Navigation” , “Admin”, cele trei tipuri de meniu “navigation_1”, “navigation_2”, “navigation_3”, cuvintele cheie, descrierea meta și titlul meta “meta_title”, “meta_description” și “meta_keywords” și continutul.
Figura 29 cod clasa Core
In fișierul “language.php” din directorul “Classes” sunt definite atributele limbii ce urmează a fi introdusa:
Figura 30 cod clasa Language
Aici sunt setate etichetele (“labels”), conținutul etichetelor (“labels_content”), tipul acestora (“labels_types”), conținutul paginilor (“pages_content”) și tipul și conținutul meniului (“navigation_types_content”).
In fișierul “Navigation.php” din directorul “Classes” este definita clasa “Navigation”.
Figura 31 cod clasa Navigation
In aceasta clasa sunt declarate ca și variabile private (“private”) tabelele “navigation”, “navigation_types”, “pages”, “pages_content” “navigation_types_content”.
In fișierul “page.php” din directorul “Classes” este definita clasa Page, ce conține variabilele private “pages” și “pages_content” și ca variabila declarata publica este variabila “objLanguage”.
Figura 32 cod clasa Page
în fișierul “Admin.php” din directorul “Classes” este definita clasa “Admin” în care sunt declarate ca variabile private (“private”) tabelele “admins”, “access” și “access_content”, conexiunea la baza de date “Db”, iar ca și variabila publica este declarant utilizatorul (“user”).
Figura 33 cod clasa Admin
In directorul “admin” sunt 4 directoare “admins”, “error”, “languages”, “login” și “pages”, în fiecare dintre cele patru directoare se gasesc fișiere de tip .php.
Astfel în directorul “admins” fișierul “index.php” daca utilizatorul de tip administrator are acces, acesta va fi redirectionat către pagina index.php de unde se va putea adauga un cont de administrator nous au va putea modifica conturi de administrator sau utilizator existente.
Figura 34 cod index.php
In fișierul “add.php” tot din directorul “admins” este implementata metoda de a putea adauga un nou cont de administrator sau de utilizator:
Figura 35 cod adaugă utilizator “add.php”
In fișierul “edit.php” din directorul “admins” este implementata medtoda prin cre utilizatorul va putea modifica informații ale conturilor de administrator sau de utilizator existente.
Figura 36 cod modifică urilizator – edit.php
In fișierul “remove.php” din directorul “admins” este implementata medtoda prin cre utilizatorul va putea șterge conturile de administrator sau de utilizator existente.
Figura 37 cod sterge utilizator – remove.php
In fișierul “index.php” din directorul “login” este implementata metoda prin care utilizatorul se va autentifica pentru a fi redirectionat către pagina administrator.
Figura 38 cod index.php
In fișierul “index.php” din directorul “pages” este implementata functionalitatea ce o prezintă o pagina noua. câmpurile pe care aceasta le contine: nume, continut, titlu meta, descriere meta și cuvintele cheie.
Figura 39 cod campuri pagină nouă – index.php
In fișierul “add.php” din directorul “pages” este implementata metoda prin care utilizatorul va putea adauga o pagina noua:
Figura 40 cod adauga o pagină nouă – add.php
Daca utilizatorul va folosi aceasi identitate a paginii de 2 ori va fi avertizat printr-o eroare și va fi redirectionat către pagina index.php
Figura 41 cod avertizare identitate folosită
In fișierul “edit.php” din directorul “pages” este implementata metoda prin care utilizatorul va putea modifica conținutul și tipul unei pagini existente:
Figura 42 cod modificare pagina existentă – edit.php
In fișierul “navigation.php” din directorul “pages” este implementat adaugarea paginilor existente în unul dintre cele 3 tipuri de navigatie (meniuri) create.
Figura 43 cod adaugare pagină în meniu – navigation.php
In fișierul “remove.php” din directorul “pages” este implementata metoda prin care utilizatorul va putea șterge paginile existente.
Figura 44 cod șterge pagină – remove.php
3.3 CSS
Definirea foilor de stil în cascada s-a facut în două fișiere externe .css, primul fișier este “core.css” în care sunt definite stilurile și culorile pe care le va putea vedea utilizatorul larg.
Figura 45 cod cloare si dimensiune heading
Titlurile h1 (“heading”), h2, h3, h4, și h5 prezintă aceasi culoare: “#3298FD”, după care se seteaza dimensiunea afișată a fiecarui titlu.
Figura 46 culoare titlu CSS
Logo-ul este setat ca avand o latime de 262 de pixeli și o inaltime de 51 de pixeli
Figura 47 inaltime și latime logo CSS
Lista cu limbile disponibile este afișată în dreapta ecranului, are o dimensiune de 5 pixeli și marginea cu dimensiunea de 1 pixel, de asemenea are culoarea setata este culoarea alba.
Figura 48 selector limbă CSS
Meniul sau navigatia are inaltimea de 50 de pixeli, culoarea de fundal este alba, este realizat dintr-o lista neordonata de elemente, prezintă font italic, iar atunci când utilizatorul pune cursorul deasupra unui element din meniu, culoarea textului afisat se schimba din alb în albastru.
Figura 49 cod navigatie front .css
Al doilea fișier de tip .css se află în directorul “admin” este denumit tot “core.css”, în acest fișier sunt stilizate elemente vazute de utilizatorul administrator:
Figura 50 cod stilizare elemente admin
Marginile sunt setate la 0 pixeli, la fel și spatierea, în câmpul corpul aplicației fontul are dimensiunea de 12 pixeli, codul de culoare #211f20, alinierea este centrala.
Figura 51 cod setare culoare si dimensiune heading admin
Dimensiunea titlului (heading 1) este de 21 de pixelu, codul de culoare este #333, ce reprezintă culoarea neagra.
Logo-ul este setat ca avand o latime de 262 de pixeli și o inaltime de 51 de pixeli
Figura 52 cod logo css admin
Lista cu limbile disponibile este afișată în dreapta ecranului, are o dimensiune de 5 pixeli și marginea cu dimensiunea de 1 pixel, de asemenea are culoarea setata este culoarea alba.
Figura 53 cod selector de limba admin
Meniul sau navigatia are inaltimea de 50 de pixeli, culoarea de fundal este alba, este realizat dintr-o lista neordonata de elemente, prezintă font italic, iar atunci când utilizatorul pune cursorul deasupra unui element din meniu, culoarea textului afisat se schimba din alb în albastru.
Figura 54 cod admin navgatie.css
3.4 JavaScript
Fiserul de tip .js denumit “core.js” se află în directorul “classes” prin intermediul limbajului de programare JavaScript este implemantata metoda de a selecta din lista optiunea de limbă disponibila.
Figura 55 cod Core.js
In fișierul “form.js” din directorul “classes” este implementata metoda de a trimite email către administrator prin apasearea butonului trimite sau “submit”.
Figura 56 cod form.js
3.5 Ckeditor
Editorul “CKeditor” este un editor de tip sursă deschisa careuia I se pot adauge imbunatatiri și al carui cod poate fi modificat de către utilizator.
Este realizat de Amazon, descarcarea acestuia se face gratuity și se poate implementa în aplicația web ce conține un câmp de tip “textarea” în care utilizatorul dorește să faca modificari asuprea textului, să insere poze, legaturi, să ordoneze crescator liste.
Acest editor facilitează utilizatorilor modificarea textului scris.
Implementarea acestuia se face destul de usor, dup ace editorul a fost descarcat se va urca în directorul radacina al aplicației web și se va extrage.
In fișierul în care este defint câmpul de text de tip “textarea” trebuie definite și adaugate calea în care se gaseste extras editorul precum și un script de JavaScript.
Figura 57 ckeditor implementare javascript
Urmatorul pas este acela de a crea clasa “ckeditor” utilizatorul poate să denumeasca câmpul asupra caruia I se va aplica acest editor cum doreste:
Figura 58 ckeditor cod creare clasa
Dup ace a fost implementat editorul va arata astfel:
Figura 59 exemplu funcții ckeditor
Prezintă opțiuni ușor de folosit asemanatoare meniului din neditoarele de text “Word”.
4 Prezentarea sistemului de management al conținutului cu aplicații in e-learning
Aplicația web de management al conținutului prezintă două zone, cea a utilizatorului și cea a administratorului.
Managementul conținutului se face de administratorul aplicației web în zona de management al paginilor, utilizatorilor și al optiunilor de limba.
Utilizatorul final va vedea numai o parte a aplicației web, cea pe care administratorul a droit să o afiseze.
Acesta va putea naviga printer paginile afisate, va putea schimba limbă în care este afișată pagina web, va putea trimite mesaje către administrator cu ajutorul formularului din pagina de contact.
Conținutul vizibil are apalicatii în conceptul de e-learning. Acest concept facilitează invatamantul la distanta, prin intermediul elementelor de redare multimedia.
Astfel aplicația web de sistem de management al conținutului facilitează atat adaugarea de conținut nou cum ar fii: cursuri, prezentari video, legaturi către fisiere, imagini și modificarea acestora facilitand astfel efortul depus de cadrele didactice în a prezenta studenților diferite forme ale cursului.
In plus, în funcție de categoriile de utilizatori ce urmaresc cu interes aceasta aplicatie, administratorul poate adauga conținutul în mai multe limbi pentru ca studenților interesati să le fie ușor să înteleagă cursurile în limbă lor natală.
Aplicația web este un site web pe un singur nivel
Se poate observa după modul de așezare al butoanelor și al paginilor din meniu pe un singur rând sau pe o singura coloană.
Figura 60 exemplu structură site web
Utilizatorul se poate întoarce la orice pagină dorește simplu, accesand paginile afișate din meniul principal.
Prima pagină pe care o va vedea utilizatorl este pagina “Acasa”
Figura 61 pagina Home
Aici sunt prezentate informații despre conținutul paginilor web și de asemenea utilizatorul este invitat să urmeze cursurile ce sunt prezentate.
Pagina CURS PHP oferă utilizatorului informații introductive despre limbajul de programare php, un curs video și un curs complet de tip pdf.
Figura 62 pagina curs php
Pagina Curs MYSQL oferă utilizatorului informații introductive despre bazele de date MySQL, un curs video și invită utilizatorul să citeasca un curs complet MySQL de tip pdf.
Figura 63 pagina curs MySQL
Pagina “CURS CSS” oferă utilizatorului informații introductive despre limbajul de programare CSS (Foi de stil în cascadă), un curs video și invită utilizatorul să parcurca un curs complet CSS de tip pdf.
Figura 64 pagina curs css
Pagina “CONTACT” prezintă un formular de contact în care utilizatorul poate pune întrebari pentru ca apoi administratorul aplcație web să îi raspundă.
Figura 65 pagina contact
Continutul paginilor web ce sunt vizibile pentru utilizatorul final este implementat în 4 limbi diferite: Romana, Engleza, Germana și Spaniola acelasi conținut fiind afișat în limba pe care utilizatorul o va selecta din lista de opțiuni disponibile
Figura 66 selector limbă
Zona accesibilă administratorului se face numai dupa ce acesta se va autentifica, pentru aceasta va trebui să scrie în bara de cautare a motorului de cautare domeniul aplicației web urmat de “/panel”, de exemplu www.oprean.net/panel. Utilizatorul va fi redirectionat către pagina de autentificare a aplicației web.
Figura 67 pagina de autentificare
Lista cu opțiunile de limbă este prezenta și pe aceasta pagina, conținutul acesteia fiind tradus în funcție de limbă selectata de exemplu engleza
Figura 68 inserarea utilizatorului si a parolei
Dupa ce utilizatorul se va autentifica folosind un email și o parolă valida va apasa pe butonul de “Autentificare” și va fi redirectionat către pagina de administrate a conținutului pentru aplicația web.
În caz contrar acesta va primii un mesaj de avertizare cu “Nume de utilizator incorrect sau parola incorecta”
Figura 69 avertizare utilizator sau parola incorectă
Pagina de administrare:
Figura 70 pagina de administrare pagini
În aceasta zona de administrare, utilizatorul de tip administrator are acces la trei meniuri “Pagini”, “Limbi” și “Utilizatori”.
De asemenea sunt afișsate paginile existente în aplicația web cu două posibilitati și anume “Modifica” și “Sterge”.
Sunt trei tipuri de pagini ce nu pot fi sterse deoarece un site web nu poate există fara acest tip de pagini și anume: “Acasa”, “Eroare 404” și “Contact”.
Daca utilizatorul va pune cursorul peste meniul “Pagini” vor aparea trei opțiuni
Figura 71 meniu pagini
Prima optiune este “Pagini” aceasta va afișa paginile existente pe care utilizatorul le va putea modifica sau sterge.
A două optiune este “Adauga o pagina noua” daca utilizatorul va alege aceasta optiune va fi redirectionat către o pagina în care va putea adauga nou continut.
Figura 72 adauga o pagină nouă
Sunt afișate câmpurile “Nume Pagina” aici utilizatorul va înregistra numele paginii pe care dorește să o publice, “Continut” în acest câmp se poate insera conținutul pagininii, se poate modifica tipul textului, se poate adauga o legătură și se pot adauga imagini sau insera cod php sau html.
Câmpul “Titlu cheie” în acest câmp utilizatorul poate pune un titlu sugestiv astfel încat pagina web să fie ușor de găsit în motoarele de cautare.
Câmpul “Descriere cheie” acest tip de descriere ajuta la promovarea pagnii web pe motoarele de cautare astfel după anumite căutari ce sunt introduse în acest câmp motoarele de cautare vor afișa pagina web.
Câmpul “Cuvinte cheie”, în acest câmp se pot introduce diverse cuvinte cheie representative pentru o mai buna promovare a paginii web.
Câmpul “Identitate” utilizatorul defineste tipul paginii pe care o va publica.
A treia opțiune “Meniu” va redirecționa utlizatorul către configurarea meniului.
Figura 73 inserare pagini în meniu
Sunt afișsate două liste de tip “drop-down” și paginile ce sunt incluse în fiecare meniu și anume meniu principal, meniu secundar sau meniul din stânga și meniul subsol.
Din prima lista de tip drop-down utilizatorul va putea alege tipul meniului în care acesta dorește să publice pagina creată.
Figura 74 listă meniu
Din a două lista de tip “drop-down” utilizatorul va allege pagina pe care dorește să o introduca în meniu.
Figura 75 listă pagini
Dupa ce va alege atat tipul meniului cât și pagina dorită utilizatorul va insera pagina în meniu apăsând pe butonul “Adauga”.
Al doilea element din meniul principal este elementul “LIMBI” atunci când este accesat redirecționează utilizatorul către o lista de etichete, din aceasta pagină, utilizatorul poate modifica denumirea etichetelor, le poate șterge sau poate adauga o etichetă nouă selectând tipul acesteia din lista de tip “drop-down” numită “selecteaza tipul”.
Figura 76 pagina administrare etichete
Utilizatorul poate naviga pentru a putea vizualiza etichetele cu ajutorul butoanelor “Urmatorul” și “Ultimul”.
Daca utilizatorul va ține cursorul deasupra elementului “Limbi” din meniul principal se vor afișa trei opțiuni disponibile: “Lista etichete”, “Lista Limbi” și “Tipuri de etichete”.
Figura 77 meniu etichete
Optiunea “Lista limbi” va redirecționa utilizatorul către o pagină în care sunt afișate lista limbilor existente în aplicația web. Se poate adauga o limbă nouă prin introducerea numelui limbii respective și apasarea butonului “Adauga” urmand ca etichetele limbii respective să fie traduse din pagina “Lista etichete”. De asemenea utilizatorul poate șterge una dintre limbile existente sau îi poate modifica denumirea.
Figura 78 lista limbi existente
A treia opțiune disponibilă este “Tipuri de etichete” utilizatorul va fi redirectionat la pagina ce afiseaza tipul etichetelor existente. Utilizatorul poate adauga un tip de etichetă nou sau poate modifica conținutul existent, dar nu poate șterge aceste tipuri de etichete. Stergerea lor se poate face doar din baza de date în care acestea au fost configurate.
Figura 79 pagina tipuri de etichete
Din meniul principal ultimul element afisat este cel de “Utilizatori”, daca va fi accesat utilizatorul va fi automat rediectionat către pagina “Lista utilizatori”, în aceasta pagina vor fi afisati utilizatorii existenti. Se pot modifica sau sterge.
Figura 80 pagină utilizatori
Daca utilizatorul va tine cursorul peste acest elemnt vor fi afișsate două opțiuni disponibile și anume “Lista utilizatori” și “Adauga administrator”.
Figura 81 meniu utilizatori
Cand utilizator va accesa optiunea “Adauga administrator” acesta va fi redirectionat către o pagina în care va putea adauga un nou cont de administrator sau utilizator. Toate câmpurile sunt obligatorii nu se accepta campuri goale. Se va introduce “Prenumele”, “Numele”, “Adresa de email” ce accepta numai conținut cu format de email (alina@yahoo.com) și setarea parolei ce va fi folosita pentru autentificare.
Figura 82 adaugă un utilizator nou
Campul “Acces” este de tip lista “drop-down” cu două opțiuni posibile și anume: “Administrator” și “Utilizator”.
Figura 83 listă selectare tip utilizator
Diferenta dintre aceste două tipuri de utilizator este destul de mare, utilizator de tip administrator poate modifica, adauga și șterge conținutul din aplicația web de management al contintului, iar utilizatorul de tip utilizator poate adauga, modifica și șterge pagini, poate adauga pagini și selecta tipul meniului, dar nu are acces la lista utilizatorilor, nu are acces la lista limbilor și nu poate face modificari în aceste zone.
Figura 84 perimisiuni restrictive cont utilizator
5 Concluzii
Prin implementarea bazei de date pentru a stoca conținutul sistemului de management al conținutului, prin crearea paginilor prin implementarea acestora cu ajutorul limbajelor de programare php, html, css si javascript s-a realizat o aplicație software menită să faciliteze administrarea conținutului multimedia pentru o pagină web.
Funcționalitațile de bază ale acestui sistem, permit utilizatorului de tip administrator să se autentifice în aplicație și să poată adaugă conținut nou, modifica sau șterge conținut existent, să poată alege meniul în care dorește să publice pagina creată, să poată aduga utilizatori de tip administrator ce vor avea același drepturi sau de tip utilizator ce pot face modificari numai în zona adăugarii și modificării paginilor web.
Deoarece conținutul poate fi adaugat în mai multe limbi în funcție de vizitatorul țintă, acest sistem de management al conținutului poate avea aplicații în e-Learning și permite atat moderatorului să publice conținut cu caracter educațional de tip text, legatură sau multimedia (imagini, video etc.) cât și vizitatorului final să selecteze din meniul ce afișază limbile disponibile în limba în care dorește să lectureze informația educațională.
Acest sistem poate fi folosit cu succes de catre universitatile partenere ERASMUS și poate facilita studenților străini accesul la informație în limba lor natală.
În concluzie acest sistem de management al conținutului facilitează atat moderatorul (utilizatorul de tip administrator) în adaugarea de conținut nou sau modificarea de conținut existent pe o pagină web fară a fi nevoie de modificarea paginii respective în codul sursă al acesteia, cât si vizitatorului final prin posibilitatea de a alege din mai multe limbi afișate conținutul aferent astfel încat procesul de lecturare al informațiilor cu caracter educațional să fie cât mai plăcut pentru vizitatori.
6
Bibliografie
Bibliografia va fi ordonată alfabetic dupa eticheta fiecărei element (de ex. DOOM05 în lista de mai jos este o etichetă). Etichetele materialelor consultate vor fi formatate folosind:
· primele litere ale primului autor urmate de cele două cifre semnificative ale anului apariției materialului, sau
· dintr-un acronim popular al lucrării respective, urmat din nou de cele două cifre semnificative ale anului apariției.
[DOOM05]
[JAVASCR01] – Dicționarul ortografic, ortoepic și morfologic al limbii române, Editura Univers Enciclopedic, București, 2005
7
Referințe web
[CMS1] – https://www.ultra-design.ro/sistemul-de-administrare-cms/
[ELEARNING1] – http://e-calificare.blogspot.ro/2013/01/conceptul-de-e-learning.html
[PHP1] – http://php.punctsivirgula.ro/serverside/
[JAVASCR1] – https://ro.wikipedia.org/wiki/JavaScript
[CSS1] – http://www.rasfoiesc.com/educatie/informatica/html/FOI-DE-STIL-IN-CASCADA-CSS84.php
A.
Codul sursă
A.1 Admin.php
objLanguage = is_object($objLanguage) ?
$objLanguage :
new Language();
$this->Db = new Dbase();
}
public function getOne($id = null) {
if (!empty($id)) {
$sql = „SELECT `id`, `first_name`, `last_name`,
`email`, `salt`, `access`,
CONCAT_WS(‘ ‘, `first_name`, `last_name`) AS `full_name`
FROM `{$this->table}`
WHERE `id` = ?”;
return $this->Db->getOne($sql, $id);
}
}
public function getByEmail($email = null) {
if (!empty($email)) {
$sql = „SELECT *
FROM `{$this->table}`
WHERE `email` = ?”;
return $this->Db->getOne($sql, $email);
}
}
public function isAdmin($email = null, $password = null) {
if (!empty($email) && !empty($password)) {
$this->user = $this->getByEmail($email);
if (!empty($this->user)) {
$password = $this->makePassword($password, $this->user[‘salt’]);
if ($this->user[‘password’] == $password) {
return true;
}
return false;
}
return false;
}
return false;
}
public function makePassword($password = null, $salt = null) {
return sha1($password.$salt.$password);
}
public function getAll($search = null) {
$fields = array();
$values = array($this->objLanguage->language);
$sql = „SELECT `u`.*,
CONCAT_WS(‘ ‘, `u`.`first_name`, `u`.`last_name`) AS `full_name`,
`a`.`label`
FROM `{$this->table}` `u`
LEFT JOIN `{$this->table_3}` `a`
ON (`a`.`access` = `u`.`access` AND `a`.`language` = ?)”;
if (!empty($search) && is_array($search)) {
$sql .= ” WHERE („;
foreach($search as $key => $value) {
$fields[] = „`u`.`{$key}` LIKE ?”;
$values[] = „%{$value}%”;
}
$sql .= implode(” OR „, $fields);
$sql .= „)”;
}
$sql .= ” ORDER BY `u`.`first_name`, `u`.`last_name` ASC”;
return $this->Db->getAll($sql, $values);
}
public function getAccess() {
$sql = „SELECT `a`.`id`, `c`.`label`
FROM `{$this->table_2}` `a`
LEFT JOIN `{$this->table_3}` `c`
ON (`c`.`access` = `a`.`id` AND `c`.`language` = ?)
ORDER BY `a`.`id` ASC”;
return $this->Db->getAll($sql, $this->objLanguage->language);
}
public function duplicate($email = null, $id = null) {
if (!empty($email)) {
$values = array($email);
$sql = „SELECT *
FROM `{$this->table}`
WHERE `email` = ?”;
if (!empty($id)) {
$sql .= ” AND `id` != ?”;
$values[] = $id;
}
return $this->Db->getAll($sql, $values);
}
return true;
}
public function update($array = null, $admin = null) {
if (!empty($array) && !empty($admin)) {
$array = Helper::makeArray($array);
$fields = array();
$values = array();
$sql = „UPDATE `{$this->table}` SET „;
foreach($array as $key => $value) {
if (!Helper::isEmpty($value)) {
switch($key) {
case ‘password’:
$fields[] = „`{$key}` = ?”;
$values[] = $this->makePassword($value, $admin[‘salt’]);
break;
default:
$fields[] = „`{$key}` = ?”;
$values[] = $value;
}
}
}
$sql .= implode(„, „, $fields);
$sql .= ” WHERE `id` = ?”;
$values[] = $admin[‘id’];
return $this->Db->execute($sql, $values);
}
return false;
}
public function remove($id = null) {
if (!empty($id)) {
$sql = „DELETE FROM `{$this->table}`
WHERE `id` = ?”;
return $this->Db->execute($sql, $id);
}
return false;
}
public function add($array = null) {
if (!empty($array)) {
$sql = „INSERT INTO `{$this->table}`
(`first_name`, `last_name`, `email`, `password`, `access`, `salt`)
VALUES (?, ?, ?, ?, ?, ?)”;
return $this->Db->insert($sql, array(
$array[‘first_name’],
$array[‘last_name’],
$array[‘email’],
$array[‘password’],
$array[‘access’],
$array[‘salt’]
));
}
return false;
}
}
A.2 Core.php
objLanguage = new Language();
$this->lang_menu = Helper::getPlug(
‘language’,
array(‘objLanguage’ => $this->objLanguage)
);
$this->objUrl = new Url();
$this->objNavigation = new Navigation($this->objUrl, $this->objLanguage);
switch($this->objUrl->module) {
case ‘panel’:
set_include_path(implode(PATH_SEPARATOR, array(
realpath(TEMPLATE_PATH.DS.’admin’),
get_include_path()
)));
$this->runAdmin();
break;
default:
set_include_path(implode(PATH_SEPARATOR, array(
realpath(TEMPLATE_PATH.DS.’front’),
get_include_path()
)));
$this->runFront();
}
}
public function runFront() {
$this->parseNavigation();
$this->parseColumn();
if (array_key_exists($this->objUrl->cpage, Router::$_modules)) {
$file = ROOT_PATH.DS.’mod’.DS.Router::$_modules[$this->objUrl->cpage].’.php’;
if (is_file($file)) {
ob_start();
require_once($file);
echo ob_get_clean();
} else {
$objPage = new Page($this->objLanguage);
$page = $objPage->getError();
$this->parsePage($page);
ob_start();
require_once(‘header.php’);
echo $this->content;
require_once(‘footer.php’);
echo ob_get_clean();
}
} else {
$objPage = new Page($this->objLanguage);
$page = $objPage->getByIdentity($this->objUrl->cpage);
if (empty($page)) {
$page = $objPage->getError();
}
$this->parsePage($page);
ob_start();
require_once(‘header.php’);
echo $this->content;
require_once(‘footer.php’);
echo ob_get_clean();
}
}
public function parsePage($page = null) {
if (!empty($page) && is_array($page)) {
$this->meta_title = $page[‘meta_title’];
$this->meta_description = $page[‘meta_description’];
$this->meta_keywords = $page[‘meta_keywords’];
$this->content = $page[‘content’];
}
}
public function parseNavigation() {
$this->navigation_1 = $this->objNavigation->get(1);
$this->navigation_2 = $this->objNavigation->get(2);
$this->navigation_3 = $this->objNavigation->get(3);
}
public function parseColumn() {
$array = array(
New Radicals‘,
Red Hot Chili Peppers‘,
Blur‘,
Henry Rollins
);
$keys = array_rand($array, 3);
$this->column = $array[$keys[0]].$array[$keys[1]].$array[$keys[2]];
}
public function addScript($path = null) {
if (!empty($path)) {
$this->script .= ‘‘;
}
}
public function runAdmin() {
$this->objAdmin = new Admin($this->objLanguage);
if ($this->objUrl->main == ‘logout’) {
Login::logout();
} else if ($this->objUrl->c == ‘login’ && Login::isLogged()) {
Helper::redirect(‘/panel/content/c/pages/a/index’);
} else if ($this->objUrl->c != ‘login’ && !Login::isLogged()) {
Helper::redirect(‘/panel’);
} else if (Login::isLogged()) {
$this->admin = $this->objAdmin->getOne($_SESSION[Login::$key_user_id]);
}
$file = ROOT_PATH.DS.’admin’.DS.’core’.DS.$this->objUrl->c.DS.$this->objUrl->a.’.php’;
if (!is_file($file)) {
$file = ROOT_PATH.DS.’admin’.DS.’core’.DS.’error’.DS.’index.php’;
}
ob_start();
require_once($file);
echo ob_get_clean();
}
}
A.3 Dbase. Php
setProperties($dbconn);
$this->connect();
}
public function setProperties($array = null) {
if (!empty($array) && is_array($array) && count($array) == 4) {
foreach($array as $key => $value) {
$this->$key = $value;
}
}
}
private function connect() {
$this->setDriverOptions(array(
PDO::MYSQL_ATTR_INIT_COMMAND => „SET NAMES utf8”
));
try {
$this->_db_object = new PDO(
„mysql:dbname={$this->_db_name};host={$this->_db_host}”,
$this->_db_user,
$this->_db_password,
$this->_driver_options
);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
}
public function setDriverOptions($options = null) {
if (!empty($options)) {
$this->_driver_options = $options;
}
}
private function query($sql = null, $params = null) {
if (!empty($sql)) {
$this->_last_statement = $sql;
if ($this->_db_object == null) {
$this->connect();
}
try {
$statement = $this->_db_object->prepare($sql, $this->_driver_options);
$params = Helper::makeArray($params);
if (!$statement->execute($params) || $statement->errorCode() != ‘0000’) {
$error = $statement->errorInfo();
throw new PDOException(„Database error {$error[0]} : {$error[2]}, driver error code is {$error[1]}”);
exit;
}
return $statement;
} catch (PDOException $e) {
echo $this->formatException($e);
exit;
}
}
}
public function formatException($exception = null) {
if (is_object($exception)) {
$out = array();
$out[] = ‘Message: ‘.$exception->getMessage();
$out[] = ‘Code: ‘.$exception->getCode();
$out[] = ‘File: ‘.$exception->getFile();
$out[] = ‘Line: ‘.$exception->getLine();
$out[] = ‘Trace: ‘.$exception->getTraceAsString();
$out[] = ‘Last statement: ‘.$this->_last_statement;
return ‘

‘.implode(‘
‘, $out).’

‘;
}
}
public function getLastInsertId($sequenceName = null) {
return $this->_db_object->lastInsertId($sequenceName);
}
public function getAll($sql = null, $params = null) {
if (!empty($sql)) {
$statement = $this->query($sql, $params);
return $statement->fetchAll(PDO::FETCH_ASSOC);
}
}
public function getOne($sql = null, $params = null) {
if (!empty($sql)) {
$statement = $this->query($sql, $params);
return $statement->fetch(PDO::FETCH_ASSOC);
}
}
public function execute($sql = null, $params = null) {
if (!empty($sql)) {
$statement = $this->query($sql, $params);
$this->_affected_rows = $statement->rowCount();
return true;
}
return false;
}
public function insert($sql = null, $params = null) {
if (!empty($sql)) {
if ($this->execute($sql, $params)) {
$this->_id = $this->getLastInsertId();
return true;
}
return false;
}
return false;
}
}
A.4 Email. Php
$from);
$to = is_array($to) ? $to : array($to => $to);
$file = EMAILS_PATH.DS.$case.’.php’;
if (is_file($file)) {
ob_start();
require_once($file);
$body = ob_get_clean();
} else {
$body = ‘Missing email template’;
}
$transport = Swift_SmtpTransport::newInstance($this->_smtp_host, $this->_smtp_port);
$transport->setUsername($this->_smtp_user);
$transport->setPassword($this->_smtp_pass);
$objMailer = Swift_Mailer::newInstance($transport);
switch($case) {
case 1:
$message = Swift_Message::newInstance(‘Contact from My Website’);
$message->setMaxLineLength(700);
$message->setPriority(2);
$message->setFrom($from);
$message->setTo($to);
$message->setBody($body, ‘text/html’);
$message->addPart(strip_tags($body), ‘text/plain’);
break;
}
$result = $objMailer->send($message);
return empty($result) ? false : true;
}
return false;
}
}
A.5 Form.php
objUrl = is_object($objUrl) ? $objUrl : new Url();
}
public function post2Array($expected = null, $do_not_strip = null, $special = null) {
if ($_POST) {
$expected = Helper::makeArray($expected);
$do_not_strip = Helper::makeArray($do_not_strip);
$out = array();
foreach($_POST as $key => $value) {
$value = stripslashes($value);
if (!empty($special) && array_key_exists($key, $special)) {
$value = $this->special($special[$key], $value);
}
if (empty($do_not_strip) || !in_array($key, $do_not_strip)) {
$value = strip_tags($value);
}
if (!empty($expected)) {
if (in_array($key, $expected)) {
$out[$key] = $value;
}
} else {
$out[$key] = $value;
}
}
return $out;
}
}
public function special($key = null, $value = null) {
switch($key) {
case ‘sanitise’:
return Helper::sanitise($value);
break;
default:
return $value;
}
}
public function stickyText($key = null, $value = null) {
if (!empty($key)) {
if ($_POST && array_key_exists($key, $_POST)) {
return stripslashes($_POST[$key]);
} else {
if (!empty($value)) {
return $value;
}
}
}
}
public function post2Url($key = null) {
if (!empty($key) && isset($_POST[$key])) {
$url = $this->objUrl->getCurrent($key);
$post_key = urlencode(stripslashes($_POST[$key]));
$url = !empty($post_key) ?
$url.’/’.$key.’/’.$post_key :
$url;
Helper::redirect($url);
}
}
public function stickySelect($key = null, $value = null, $data = null) {
if (!empty($key)) {
if ($_POST) {
if (array_key_exists($key, $_POST) && $_POST[$key] == $value) {
return ‘ selected=”selected”‘;
}
} else {
if (!empty($data) && $value == $data) {
return ‘ selected=”selected”‘;
}
}
}
}
}
A.6 Helper.php
$value) {
$string = str_replace($value, ”, $string);
}
return $string;
}
}
public static function isEmpty($value = null) {
return empty($value) && !is_numeric($value) ? true : false;
}
public static function redirect($location = null) {
if (!empty($location)) {
header(„Location: {$location}”);
exit;
}
}
}
A.7 Language.php
language = $_COOKIE[‘lang’];
}
$this->Db = new Dbase();
$this->getLabels();
}
public function getLabels() {
$sql = „SELECT `l`.`id`, `c`.`content`
FROM `{$this->table_2}` `l`
LEFT JOIN `{$this->table_3}` `c`
ON `c`.`label` = `l`.`id`
WHERE `c`.`language` = ?
ORDER BY `l`.`name` ASC”;
$labels = $this->Db->getAll($sql, $this->language);
if (empty($labels)) {
setcookie(‘lang’, 1, time() + 31536000, ‘/’);
$this->language = 1;
$sql = „SELECT `l`.`id`, `c`.`content`
FROM `{$this->table_2}` `l`
LEFT JOIN `{$this->table_3}` `c`
ON `c`.`label` = `l`.`id`
WHERE `c`.`language` = ?
ORDER BY `l`.`name` ASC”;
$labels = $this->Db->getAll($sql, $this->language);
}
if (!empty($labels)) {
foreach($labels as $row) {
$this->labels[$row[‘id’]] = $row[‘content’];
}
}
}
public function getAll($search = null) {
$fields = array();
$values = array($this->language);
$sql = „SELECT `l`.`id`, `l`.`name`, `c`.`label`
FROM `{$this->table}` `l`
LEFT JOIN `{$this->table_5}` `c`
ON `c`.`language_id` = `l`.`id`
WHERE `c`.`language` = ?”;
if (!empty($search) && is_array($search)) {
$sql .= ” AND („;
foreach($search as $key => $value) {
$fields[] = „`c`.`{$key}` LIKE ?”;
$values[] = „%{$value}%”;
}
$sql .= implode(” OR „, $fields);
$sql .= „)”;
}
$sql .= ” ORDER BY `l`.`name` ASC”;
return $this->Db->getAll($sql, $values);
}
public function getAllLabels($search = null) {
$fields = array();
$values = array($this->language, $this->language);
$sql = „SELECT `l`.`id`, `l`.`name`, `l`.`type`,
`c`.`content`, `t`.`content` AS `type_name`
FROM `{$this->table_2}` `l`
LEFT JOIN `{$this->table_3}` `c`
ON `c`.`label` = `l`.`id`
LEFT JOIN `{$this->table_6}` `t`
ON `t`.`label` = `l`.`type`
WHERE `c`.`language` = ?
AND `t`.`language` = ?”;
if (!empty($search) && is_array($search)) {
$sql .= ” AND („;
foreach($search as $key => $value) {
$fields[] = „`c`.`{$key}` LIKE ?”;
$values[] = „%{$value}%”;
}
$sql .= implode(” OR „, $fields);
$sql .= „)”;
}
$sql .= ” ORDER BY `l`.`type`, `l`.`name` ASC”;
return $this->Db->getAll($sql, $values);
}
public function getTypes($search = null) {
$fields = array();
$values = array($this->language);
$sql = „SELECT `c`.*, `t`.`name`,
IF (
(
SELECT COUNT(`id`)
FROM `{$this->table_2}`
WHERE `type` = `t`.`id`
) > 0,
1,
0
) AS `is_assigned`
FROM `{$this->table_4}` `t`
LEFT JOIN `{$this->table_6}` `c`
ON `c`.`label` = `t`.`id`
WHERE `c`.`language` = ?”;
if (!empty($search) && is_array($search)) {
$sql .= ” AND („;
foreach($search as $key => $value) {
$fields[] = „`c`.`{$key}` LIKE ?”;
$values[] = „%{$value}%”;
}
$sql .= implode(” OR „, $fields);
$sql .= „)”;
}
$sql .= ” ORDER BY `t`.`name` ASC”;
return $this->Db->getAll($sql, $values);
}
public function updateAll($array = null) {
if (!empty($array)) {
$array = Helper::makeArray($array);
$errors = array();
foreach($array as $key => $value) {
$sql = „UPDATE `{$this->table_3}`
SET `content` = ?
WHERE `label` = ?
AND `language` = ?”;
if (!$this->Db->execute($sql, array($value, $key, $this->language))) {
$errors[] = $key;
}
}
return empty($errors) ? true : false;
}
return false;
}
public function add($content = null, $type = null) {
if (!empty($content) && !empty($type)) {
$sql = „INSERT INTO `{$this->table_2}`
(`name`, `type`) VALUES (?, ?)”;
if ($this->Db->insert($sql, array($content, $type))) {
$id = $this->Db->_id;
$errors = array();
$languages = $this->getAll();
if (!empty($languages)) {
foreach($languages as $row) {
$sql = „INSERT INTO `{$this->table_3}`
(`label`, `language`, `content`)
VALUES (?, ?, ?)”;
if (!$this->Db->insert($sql, array($id, $row[‘id’], $content))) {
$errors[] = $row[‘id’];
}
}
return empty($errors) ? true : false;
}
return false;
}
return false;
}
return false;
}
public function remove($id = null) {
if (!empty($id)) {
$sql = „DELETE FROM `{$this->table_2}`
WHERE `id` = ?”;
return $this->Db->execute($sql, $id);
}
return false;
}
public function updateLanguages($array = null) {
if (!empty($array)) {
$array = Helper::makeArray($array);
$errors = array();
foreach($array as $key => $value) {
$sql = „UPDATE `{$this->table_5}`
SET `label` = ?
WHERE `language_id` = ?
AND `language` = ?”;
if (!$this->Db->execute($sql, array($value, $key, $this->language))) {
$errors[] = $key;
}
}
return empty($errors) ? true : false;
}
return false;
}
public function addLanguage($label = null) {
if (!empty($label)) {
$sql = „INSERT INTO `{$this->table}`
(`name`) VALUES (?)”;
if ($this->Db->insert($sql, $label)) {
$id = $this->Db->_id;
$languages = $this->getAll();
$values = array();
if (!empty($languages)) {
$sql = „START TRANSACTION;”;
foreach($languages as $language) {
$sql .= „INSERT INTO `{$this->table_5}`
(`language_id`, `language`, `label`)
VALUES (?, ?, ?);”;
$values[] = $id;
$values[] = $language[‘id’];
$values[] = $label;
$sql .= „INSERT INTO `{$this->table_5}`
(`language_id`, `language`, `label`)
VALUES (?, ?, ?);”;
$values[] = $language[‘id’];
$values[] = $id;
$values[] = $language[‘label’];
}
$sql .= „INSERT INTO `{$this->table_5}`
(`language_id`, `language`, `label`)
VALUES (?, ?, ?);”;
$values[] = $id;
$values[] = $id;
$values[] = $label;
$objPage = new Page();
$pages = $objPage->getAll();
if (!empty($pages)) {
foreach($pages as $page) {
$sql .= „INSERT INTO `{$this->table_7}`
(`page`, `language`, `name`, `content`,
`meta_title`, `meta_description`,
`meta_keywords`)
VALUES (?, ?, ?, ?, ?, ?, ?);”;
$values[] = $page[‘id’];
$values[] = $id;
$values[] = $page[‘name’];
$values[] = $page[‘content’];
$values[] = $page[‘meta_title’];
$values[] = $page[‘meta_description’];
$values[] = $page[‘meta_keywords’];
}
}
$objNavigation = new Navigation();
$navigation_types = $objNavigation->getAllTypes();
if (!empty($navigation_types)) {
foreach($navigation_types as $navigation_type) {
$sql .= „INSERT INTO `{$this->table_8}`
(`navigation`, `language`, `label`)
VALUES (?, ?, ?);”;
$values[] = $navigation_type[‘navigation’];
$values[] = $id;
$values[] = $navigation_type[‘label’];
}
}
$label_types = $this->getTypes();
if (!empty($label_types)) {
foreach($label_types as $label_type) {
$sql .= „INSERT INTO `{$this->table_6}`
(`label`, `language`, `content`)
VALUES (?, ?, ?);”;
$values[] = $label_type[‘label’];
$values[] = $id;
$values[] = $label_type[‘name’];
}
}
if (!empty($this->labels)) {
foreach($this->labels as $key => $value) {
$sql .= „INSERT INTO `{$this->table_3}`
(`label`, `language`, `content`)
VALUES (?, ?, ?);”;
$values[] = $key;
$values[] = $id;
$values[] = $value;
}
}
$sql .= „COMMIT;”;
return $this->Db->execute($sql, $values);
}
return false;
}
return false;
}
return false;
}
public function removeLanguage($id = null) {
if (!empty($id)) {
$sql = „DELETE FROM `{$this->table}`
WHERE `id` = ?”;
return $this->Db->execute($sql, $id);
}
return false;
}
public function updateTypes($array = null) {
if (!empty($array)) {
$array = Helper::makeArray($array);
$errors = array();
foreach($array as $key => $value) {
$sql = „UPDATE `{$this->table_6}`
SET `content` = ?
WHERE `label` = ?
AND `language` = ?”;
if (!$this->Db->execute($sql, array($value, $key, $this->language))) {
$errors[] = $key;
}
}
return empty($errors) ? true : false;
}
return false;
}
public function addType($label = null) {
if (!empty($label)) {
$sql = „INSERT INTO `{$this->table_4}`
(`name`) VALUES (?)”;
if ($this->Db->insert($sql, $label)) {
$id = $this->Db->_id;
$types = $this->getAll();
if (!empty($types)) {
$errors = array();
foreach($types as $type) {
$sql = „INSERT INTO `{$this->table_6}`
(`label`, `language`, `content`)
VALUES (?, ?, ?)”;
if (!$this->Db->insert($sql, array($id, $type[‘id’], $label))) {
$errors[] = $type[‘id’];
}
}
return empty($errors) ? true : false;
}
return false;
}
return false;
}
return false;
}
public function getType($id = null) {
if (!empty($id)) {
$sql = „SELECT `c`.*, `t`.`name`,
IF (
(
SELECT COUNT(`id`)
FROM `{$this->table_2}`
WHERE `type` = `t`.`id`
) > 0,
1,
0
) AS `is_assigned`
FROM `{$this->table_4}` `t`
LEFT JOIN `{$this->table_6}` `c`
ON `c`.`label` = `t`.`id`
WHERE `t`.`id` = ?
AND `c`.`language` = ?”;
return $this->Db->getOne($sql, array($id, $this->language));
}
}
public function removeType($id = null) {
if (!empty($id)) {
$sql = „DELETE FROM `{$this->table_4}`
WHERE `id` = ?”;
return $this->Db->execute($sql, $id);
}
return false;
}
}
A.8 Login.php
objUrl = is_object($objUrl) ? $objUrl : new Url();
$this->objLanguage = is_object($objLanguage) ? $objLanguage : new Language();
$this->Db = new Dbase();
}
public function getOne($id = null) {
if (!empty($id)) {
$sql = „SELECT *
FROM `{$this->table}`
WHERE `id` = ?”;
return $this->Db->getOne($sql, $id);
}
}
public function active($main = null, $pairs = null, $single = true) {
if (!empty($main)) {
if (empty($pairs)) {
if ($main == $this->objUrl->main) {
return !$single ? ‘ ‘.$this->classActive : ‘ class=”‘.$this->classActive.'”‘;
}
} else {
$exceptions = array();
foreach($pairs as $key => $value) {
$paramUrl = $this->objUrl->get($key);
if ($paramUrl != $value) {
$exceptions[] = $key;
}
}
if ($main == $this->objUrl->main && empty($exceptions)) {
return !$single ? ‘ ‘.$this->classActive : ‘ class=”‘.$this->classActive.'”‘;
}
}
}
}
public function getAllTypes() {
$sql = „SELECT *
FROM `{$this->table_5}`
WHERE `language` = ?
ORDER BY `navigation` ASC”;
return $this->Db->getAll($sql, $this->objLanguage->language);
}
public function getRecords($case = null) {
if (!empty($case)) {
$sql = „SELECT `n`.*, `t`.`label`, `p`.`identity`, `c`.`name`
FROM `{$this->table}` `n`
JOIN `{$this->table_5}` `t`
ON `t`.`navigation` = `n`.`type`
JOIN `{$this->table_3}` `p`
ON `p`.`id` = `n`.`page`
JOIN `{$this->table_4}` `c`
ON `c`.`page` = `n`.`page`
WHERE `n`.`type` = ?
AND `c`.`language` = ?
AND `t`.`language` = ?
ORDER BY `n`.`order` ASC”;
return $this->Db->getAll($sql, array($case, $this->objLanguage->language, $this->objLanguage->language));
}
}
public function get($case = null) {
if (!empty($case)) {
$list = $this->getRecords($case);
if (!empty($list)) {
$out = array();
switch($case) {
case 1:
foreach($list as $row) {
$item = ‘active($row[‘identity’]);
$item .= ‘>‘.implode(”, $out).’

‘;
break;
case 2:
$i = 1;
foreach($list as $row) {
$item = ‘active($row[‘identity’], null, false);
$item .= ‘”‘;
} else {
$item .= $this->active($row[‘identity’]);
}
$item .= ‘>
‘.implode(”, $out).’

‘;
break;
case 3:
foreach($list as $row) {
$item = ‘

Copyright Notice

© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.

Acest articol: FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ (ID: 700551)

Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.

Similar Posts