Documente Academic
Documente Profesional
Documente Cultură
LUCRARE DE LICEN
Coordonator tiinific,
Prof. univ. dr. FLOAREA NSTASE
Absolvent,
ADINA MIHAELA CHIRI
Bucureti
2009
LUCRARE DE LICEN
Coordonator tiinific,
Prof. univ. dr. FLOAREA NSTASE
Absolvent,
ADINA MIHAELA CHIRI
Bucureti
2009
Cuprins
Introducere.............................................................................................................. 3
Capitolul 1. Elemente teoretice.................................................................................. 5
1.1
1.2
3 Anexe
Introducere
Obiectul prezentei lucrri este s urmreasc paii parcuri n dezvoltarea produsului
software CiberArt. Scopul acestei aplicaii web este s creeze o interfa ntre
comunitile de artiti romni i iubitorii de art att cei care doresc s achiziioneze
obiecte de art, ct i cei care doresc s se familiarizeze cu piaa lucrrilor artitilor
romni.
Pe de o parte, necesitatea aplicaiei
4 Anexe
online romnesc. De asemenea, sunt descrise conceptele folosite pentru fundamentarea
teoretic a dezvoltrii aplicaiei web: e-commerce, e-auctions, ntreprinderea virtual.
Cel de-al doilea capitol descrie paii fcui n dezvoltarea aplicaiei, ncepnd cu
documentarea despre aplicaiile web. Urmeaz apoi descrierea alegerii tehnologiilor web
i a instrumentelor auxiliare pentru programare, structura aplicaiei: schema bazei de
date i descrierea claselor i funciilor principale.
Capitolul trei descrie cerinele software i paii care trebuie parcuri pentru
instalarea aplicaiei web pe un sistem de calcul. De asemenea, este expuns succint
utilizarea aplicaiei i funcionalitile sale pentru fiecare categorie de utilizator.
Capitolul patru reprezint de fapt concluziile personale la care am ajuns n urma
dezvoltrii i implementrii aplicaiei.
5 Anexe
IMM-uri
dein
site-uri
proprii
7,51%
din
intreprinderi
recurg
la
computere/site-uri
proprii
nu
utilizeaz
internetul,
e-mail-ul
6 Anexe
Al doilea factor major care indic potenialul n cretere al comerului online este
numrul de carduri existent pe pia. Astfel, dac n iunie 2003 existau n Romnia 4,3
milioane de carduri active, iar n iunie 2005 aproximativ 6,3 milioane, n ultimul an s-a
ajuns la un numr de 8,3 milioane de carduri active. Iar viitorul sun bine pentru comerul
electronic din Romnia, dup cum apreciaz specialitii, avnd n vedere c mbuntirea
serviciilor de curierat i securizarea plilor se numr printre factorii decisivi n favoarea
acestui tip de comer.
n opinia specialitilor din pia, cea mai bun metod de a reui ntr-o afacere de
comer electronic este aceea de a crea magazine de ni, care se adreseaz unei categorii
restrnse de cumprtori, magazinele generaliste fiind greu de creat, de ntreinut i de
pstrat o bun gestiune a stocurilor, clienii devenind anevoie fideli.
7 Anexe
livrare a acestuia. Venitul acestor site-uri const n comisionul perceput din preul de
vnzare al obiectului licitat i n publicitatea gzduit pe site-ul de licitaie.
Beneficiile pentru ofertani i cumprtori sunt eficiena mrit i economia de timp,
precum i prezena global, ceea ce elimin necesitatea transportului fizic n locul unde
are loc licitaia.
Costul redus al cheltuielilor de licitaie face posibil i licitarea de stocuri mici sau a
obiectelor cu valoare mic. De asemenea, datorit posibilitii de achiziionare a unor
produse la preuri sczute, a unei game largi de produse i servicii disponibile i a
accesului uurat ctre acestea, site-urile de licitaii online atrag un numr mare de
cumprtori. De asemenea, ofertanii vd n numrul mare de cumprtori posibilitatea
de a vinde la un pre ct mai mare cu costuri reduse i deci i vor ndrepta atenia ctre
astfel de site-uri ce atrag numeroi cumprtori. Astfel, se creaz un cerc virtuos, n care
numrul mare de cumprtori atrage un numr mare de vnztori, care la rndul lor atrag
un numr mare de cumprtori, amd. Cu ct acest cerc devine mai mare, cu att
sistemul se dezvolt mai mult i afacerea devine mai profitabil.
Printre cele mai importante caracteristici pe care trebuie s le ntruneasc un site de
licitaie sunt: suportul pentru marea diversitate de metode de licitare care exist,
uurina integrrii cu diferite afaceri existente, mecanisme de securitate care s
mpiedice triarea sau sabotarea licitailor i un mecanism eficient de a informa licitatorii
despre modul n care decurge licitaia.
n viitor, licitaiile electronice vor avea un efect profund asupra multor aspecte ale
afacerilor pe Internet, de la stabilirea preurilor pentru diferite produse pn la lichidarea
activelor. Exist numeroase tipuri de practici ce folosesc licitaiile. PNC Bank folosete
licitaiile online pentru a determina nivelul dobnzii pe care clienii l vor primi. Alt
exemplu l reprezint firma BMW care a licitat online prima main din seria BMW X5
Sport, ca parte n cadrul unei aciuni de caritate.
Pentru licitaiile online de tipul afacere ctre afacere i afacere ctre consumator
este prevzut o cretere important n viitor. Forrester Research preconizeaz o cretere
de pn la 52,6 milioane de dolari n vnzri prin licitaii online de tipul afacere ctre
afacere.
Pe piaa romneasc nu mai exist nicio alt galerie de art care desfoar licitaii
online. Exist site-uri de licitaii online pentru lucrri de art, dar n general liciteaz
colecii private. Un exemplu de astfel de site este www.ha.com Heritage Auction
Gallery.
8 Anexe
textelor i
9 Anexe
Aplicaiile sunt de obicei mprite n mai multe buci logice, cunoscute sub
denumirea de straturi, iar fiecare strat are atribuit un anumit rol. n mod tradiional,
aplicaiile de tip desktop au un singur strat, care se afl pe maina client. Aplicaiile web
sunt alctuite prin definiie din mai multe straturi. Cea mai des ntlnit structur este
cea a aplicaiilor din trei straturi: prezentare, aplicaie i stocare. Un navigator web
reprezint primul strat, acela de prezentare; un motor capabil s interpreteze coninut
web dinamic (tehnologii precum ASP, ASP.NET, CGI, ColdFusion, JSP/Java, PHP, Perl,
Python, Ruby on Rails) reprezint cel de-al doilea strat, aplicaia logic, iar stratul de
stocare poate fi o baz de date. Browser-ul va trimite cereri ctre stratul al doilea, care
la rndul su va genera interogri sau update-uri ctre baza de date i va genera interfaa
cu utilizatorul.
SERVER
CLIENT BROWSER
INTERFAA
CU
UTILIZATOR
UL
CERERI
HTTP
DATE HTML +
CSS
WEB
SERVER
BAZE DE
DATE
aplicaiilor
este
portabilitatea lor. Astfel, pot fi accesate la distan aplicaii, documente, date prin
intermediul diferitelor aplicaii, medii disponibile pe web. De asemenea, aplicaiile web
nu necesit spaiu de stocare pe staia clientului, i poate efectua update-urile automat
i este uor de integrat n alte aplicaii web complexe. Poate unul dintre cele mai mari
avantaje ale unei aplicaii web este compatibilitatea acesteia cu diferite platforme
Windows, Linux, MacOS accesul efectundu-se strict n fereastra navigatorului web.
Companiile care produc software au adoptat n ultima vreme strategia de a furniza
accesul online la aplicaiile distribuite local anterior. n funcie de tipul aplicaiei, poate fi
necesar dezvoltarea unei ntregi interfee bazate pe navigatorul web, sau doar adaptarea
aplicaiei deja existente pentru a folosi o tehnologie diferit de prezentare. Aceste
programe i permit utilizatorului s foloseasc aplicaia fr a o instala pe calculatorul su
n schimbul unei taxe de utilizare. Compania care urmeaz aceast strategie de afaceri se
mai numete si ASP Application Service Provider, iar acest mod de operare este foarte
popular n prezent.
Pentru a nelege mai bine noiunile legate de o aplicaie web, vom exemplifica:
10 Anexe
Vom considera c CiberArt are 2 aplicaii, una implicit i o aplicaie web numit
galerie. Vom folosi urmtorii identificatori:
Server: http://localhost/licenta
URL-ul serverului: http://localhost/licenta
Aplicaia web: aplicaia web implicit cu URL-ul aplicaiei web:
http://localhost/licenta
Aplicaia
web:
aplicaia
galerie
cu
URL-ul
aplicaiei
web:
http://localhost/licenta/galerie
Lund n considerare faptul c tot mai multe aplicaii tind s migreze spre Internet,
limitrile impuse de platforma suport sau cerinele pentru instalare ncep s dispar, iar
modelul SaaS (Software as a Service) este din ce n ce mai potrivit nevoilor actuale.
Realizarea interfeei unei aplicaii web presupune, n fond, web design, dar cu o mai
mare concentrare asupra funcionalitii. Pentru a putea concura cu aplicaiile desktop,
aplicaiile web trebuie s ofere interfee simple, intuitive i interactive, care s permit
utilizatorilor s i desfoare activitatea cu un consum de timp i efort minim.
n continuare, voi enumera cteva dintre caracteristicile unei interfee user-friendly,
care definete o aplicaie web de succes:
Elemente de interfa vizibile la cerere Pentru o interfa cu utilizatorul este
foarte important simplitatea, astfel c pentru a uura munca utilizatorului n
folosirea aplicaiei, nu este bine ca toate controalele disponibile s fie afiate n
acelai timp. Cnd alegerile pe
care utilizatorul trebuie s le fac
sunt mai puine, funciile devin
mai vizibile i mai uor de gsit. O
modalitate de a simplifica lucrurile
este de a ascunde sau de a
estompa funciile avansate prin
meniuri i controale de tipul popup sau meniuri drop-down.
11 Anexe
Controale specializate dup
cum
diferite
situaii
pot
fi
interfa
specializate
pe
control
de
tipul
unui
calendar picker. Acesta ajut la luarea rapid a unei decizii mai bine informate
prin afiarea lunii, a sptmnilor i a zilelor.
Seciunea Help Ajutorul de pe un site poate mbrca forma unui FAQ (Frequently
Asked Questions), a unei vederi de ansamblu pentru noii vizitatori, a unei hri a
site-ului sau a unor instruciuni pentru utilizarea i personalizarea site-ului web. De
asemenea, aplicaia web poate conine mesaje i linkuri pentru mai multe
informaii n cadrul funciilor folosite.
Pentru a putea instala i rula aplicaia CiberArt trebuie ndeplinite o serie de cerine
software i hardware:
Cerin
Minim
Recomandat
Vitez procesor
300 MHz
>1,5 GHz
Memorie (RAM)
128 MB
1 GB
Hard disk
Sistem de operare
Server Web
Baza de date
MySQL
Mozilla Firefox 3
Navigator Web
12 Anexe
13 Anexe
#pagina #content
{
background: white;
float:left;
width:747px;
min-height:500px;
color:black;
font-family: arial;
font-size:12px;
}
Exemplu de cod CSS
JavaScript
JavaScript este cel mai popular limbaj de scripting de pe internet, i funcioneaz n
browserele principale, cum ar fi Internet Explorer, Firefox, Chrome, Opera, i Safari. A fost
inventat de ctre Brendan Eich de la Netscape Communications Corporation (o dat cu
Navigator 2.0) sub numele de Mocha, apoi LiveScript, i denumit n final JavaScript. Acest
limbaj de programare este foarte popular n rndul dezvoltatorilor web i datorit faptului
c scripturile create folosind JavaScript sunt scripturi care ruleaz pe staia client, i nu
pe server, economisind astfel resursele fizice i logice ale serverului.
JavaScript a fost conceput pentru a aduga interactivitate paginilor web, oferind un
instrument cu o sintax simpl pentru a putea fi folosit i de cei care nu sunt programatori
avansai. De asemeanea, cu ajutorul su se poate aduga text dinamic ntr-o pagin HTML,
se pot citi i scrie elemente HTML; poate fi folosit pentru a valida date, pentru a reaciona
la o anume aciune ori eveniment, pentru a detecta browser-ul vizitatorului i a ncrca
astfel pagina proiectat special pentru acesta. De asemenea, poate fi folosit pentru a crea
cookies (fiiere n care sunt stocate i din care sunt preluate informaii pe computerul
vizitatorului paginii).
DHTML
DHTML (Dynamic HyperText Markup Language) nu este un limbaj, ci un termen care
descrie modalitile crerii paginiilor web dinamice i interactive. DHTML, practic
presupune mbinarea mai multor tehnologii web: HTML, Javascript, DOM i CSS.
Conceptele fundamentale cu care opereaz DHTML sunt viziunea orientat-obiect a unei
pagini web i a elementelor sale, structurarea coninutului pe straturi i aplicarea CSS-ului
asupra sa; se pune accent pe programarea tuturor sau a majoritii elementelor unei
pagini i se utilizeaz fonturi dinamice fonturi care se descarc o dat cu pagina n
memoria cache. De asemenea, DTHML permite modificri ulterioare asupra paginilor HTML
dup publicarea acestora pe Internet. Aceste modificri se realizeaz asupra unor
14 Anexe
variabile din limbajul de definire a paginii web, care la rndul lor vor afecta coninutul de
altfel static al paginii HTML. Astfel, principala caracteristic dinamic a DHTML const n
faptul c funcioneaz n timp ce o pagin este vizualizat, i nu n abilitatea de a construi
o pagin unic de fiecare dat cnd fiecare pagin este ncrcat.
PHP
PHP (PHP: HyperText Preprocessor) este un limbaj de programare pentru aplicaiile
server, folosit pentru crearea paginilor web, mpreun cu limbajul de marcare HTML. PHP
poate fi utilizat pe majoritatea serverelor web i cu toate sistemele de operare, fr
costuri materiale PHP este open source.
Spre deosebire de o pagin obinuit HTML, un script PHP nu este trimis de ctre
server clientului, ci este parsat de ctre un modul PHP instalat pe serverul web. Astfel,
doar elementele de PHP sunt interpretate i executate, nu i cele de HTML. Prin
intermediul codului PHP pot fi interogate baze de date, pot fi create imagini, pot fi citite
sau scrise fiiere sau pot fi apelate de la distan diferite servere. Paginile web care
rezult din combinarea codului PHP cu HTML sunt trimise apoi clientului prin intermediul
browserului web care afieaz simple pagini HTML, codul PHP nefiind transmis de ctre
server.
15 Anexe
PHP conine librrii gratuite i open source pre-compilate. PHP este destinat utilizrii
n aplicaiile pentru Internet, fiind compus din module realizate pentru a accesa servere
FTP, servere de baze de date, librrii SQL integrate n module, precum Oracle, PostgreSQL,
MySQL sau SQLite, servere LDAP (Lightweight Directory Access Protocol).
Multe din funciile ntlnite n librriile standard folosite n limbajul C, precum stdio,
sunt disponibile i n structura standard a PHP. PHP permite programatorilor s creeze
extensii n C pentru a crea noi funcionaliti limbajului PHP. Acestea pot fi compilate n
PHP sau ncrcate dinamic la rulare. Extensiile respective trebuie scrise astfel nct s
suporte API-urile pentru Windows, managementul proceselor sub sistemele de operare pe
platform Unix, diferite formate de compresie. De asemenea pot fi implementate i
caracteristici mai puin obinuite, precum integrarea de Internet Relay Chat (IRC), imagini
dinamice, coninut Flash (Adobe), sau chiar sintetizarea vorbirii. Astfel, a fost creat
proiectul PECL (PHP Extension Community Library) ce are ca scop depozitarea tuturor
extensiilor aduse limbajului PHP.
Alte caracteristici foarte utilizate ale PHP sunt funcionalitile de nlocuire a
apostroafelor i ghilimelelor din irurile de caractere, pentru a preveni atacurile prin
injecii de SQL magic_quotes_gpc i magic_quotes_runtime.
Printre argumentele care au dus la alegerea limbajului PHP ca limbaj de programare
pentru funciile aplicaiei se numr de asemenea i viteza dezvoltrii aplicaiilor PHP
permite separarea codului HTML de elementele de programare, ceea ce conduce la o
scdere semnificant a timpului alocat dezvoltrii proiectului i la nlturarea obstacolelor
care stau n calea unui design eficient i flexibil.
Smarty
Smarty este un motor de abloane pentru PHP, dar poate fi privit ca i un cadru pentru
abloane i prezentri (Template/Presentation Framework). Mai precis, faciliteaz
separarea coninutului i a funcionalitii unei aplicaii de prezentarea sa. Aceast
funcie este cel mai bine evideniat n situaia n care programatorul i proiectantul
ablonului sunt dou persoane diferite, punndu-le acestora la dispoziie o serie de
instrumente pentru a automatiza sarcinile des ntlnite n
Astfel, Smarty poate fi folosit ca un simplu motor de abloane pentru nlocuirea tag-urilor,
dar principala preocupare este dezvoltarea i implementarea aplicaiei cu eforturi
minime, pstrnd un nivel nalt de performan, scalabilitate, securitate i dezvoltare
ulterioar.
16 Anexe
17 Anexe
Sublinierea inteligent a sintaxei exist un schimb automat ntre sublinierile
pentru PHP i cele pentru HTML, CSS sau JavaScript, n funcie de poziionarea n
cadrul fiierului editat. Astfel, este evideniat codul redactat, iar restul textului
este estompat pentru a mbunti focalizarea.
Programarea orientat-obiect n PHP PHP Designer susine programarea
orientat-obiect
prin
funcionalitatea
de
completare a codului
structurat
sfaturi
cod avansate.
PHP
Designer
poate
contribui semnificativ
la
mbuntirea
cunotinelor
programatorului
ceea
ce
privete
integrat
de PHP.
Interfaa mediului de
18 Anexe
sugestii la adresa dezvoltrii ulterioare a PhpMyAdmin. Dei exist o serie de unelte
ajuttoare realizate de programatori, pentru programatori, dezvoltatorii phpMyAdmin au
realizat i o documentaie bogat sub forma unei cri disponibile n limbile: englez,
ceh, german i spaniol Mastering phpMyAdmin for Effective MySQL Management.
Principalele particulariti ale phpMyAdmin sunt:
Interfaa cu utilizatorul este intuitiv.
phpMyAdmin suport majoritatea funcionalitilor din bazele de date MySQL:
Consultarea bazelor de date, a tabelelor, view-urilor, cmpurilor i indecilor.
Crearea, copierea, tergerea, redenumirea i modificarea bazelor de date, a
tabelelor, a cmpurilor i a indecilor.
Mentenana serverului, a bazelor de date i a tabelelor.
Executarea, editarea i salvarea comenzilor SQL.
Gestiunea utilizatorilor de MySQL i a privilegiilor lor.
Gestiunea procedurilor stocate i a triggerilor folosii.
phpMyAdmin permite importul datelor din format CSV sau SQL i exportul n
diferite formate: CSV, SQL, XML, PDF, OpenDocumentText, OpenSpreadsheet, Word
Excel, i multe altele.
phpMyAdmin permite administrarea multiplelor servere.
phpMyAdmin permite suport graficelor pentru schema bazei de date n format
PDF.
Cu ajutorul phpMyAdmin se pot crea interogri complexe folosind QBE(Query-byexample).
Se pot efectua cutari n ntreaga baz de date.
19 Anexe
20 Anexe
mbuntirea procesului de management se poate folosi Event Scheduler pentru
a programa sarcini recurente SQL pentru a fi executate ulterior pe baza de date din
server. De asemenea, durata medie de instalare dup downloadarea MySQL este de
mai puin de 15 minute.
Libertatea de folosire a unui software open-source i suport pentru instalare i
utilizare 24 ore din 24, 7 zile din 7.
Schema conceptual a bazei de date a galeriei, numit ciberart, arat c au fost
create n total 14 tabele relaionale, 6 tabele pentru a stoca informaii despre lucrrile de
art, 2 tabele pentru meniurile de administrare si de navigare n cadrul aplicaiei, 3
tabele pentru stocarea datelor utilizatorilor i 3 tabele pentru administrarea licitaiilor:
cib_galerie este tabela n care se stocheaz informaiile principale despre o
lucrare de art, informaii comune oricrui tip de lucrare: denumirea lucrrii, id-ul
artistului care a realizat-o, tipul lucrrii pictur, desen, fotografie, sculptur - ,
stilul n care se ncadreaz lucrarea tradiional, modern, realist, expresionist,
pop-art, etc - , tematica compoziiei, identificatorul pentru detalii, starea sa pe
site daca este aprobat, n ateptare sau respins i statusul licitaiei.
cib_detalii_desen, cib_detalii_fotografie, cib_detalii_sculptura, cib_detalii_
pictura i cib_detalii_unicate sunt tabelele n care sunt reinute informaii
detaliate despre fiecare lucrare, n funcie de tipul su. De exemplu, pentru o
sculptur, informaiile generale vor fi reinute n tabela cib_galerie, iar
informaiile specifice precum nimea, greutatea, materialele folosite, vor fi
stocate n tabela cib_detalii_sculptura.
cib_artisti i cib_clienti sunt tabele n care se vor memora datele utilizatorilor
aplicaiei. Dup cum se poate observa, aplicaia permite nregistrarea a 2 tipuri de
utilizatori: artii i clieni. n timp ce clienii pot licita pentru lucrri de art i i
pot modifica datele din profil, artitii au la dispoziie mai multe unelte ce le
permit s efectueze aceleai operaiuni ca i clienii, dar n plus pot publica lucrri
sau pot modifica informaiile despre lucrri i pot crea o licitaie nou. Tabelele
conin pe lng datele frecvent ntlnite ntr-o aplicaie precum nume, prenume,
adres, email, parol i descriere, un cmp numit privilegii. n funcie de valoarea
acestui cmp, se poate determina daca utilizatorul este client, un simplu artist sau
chiar administratorul aplicaiei: nivelul de privilegii 0 este aplicat unui client,
nivelul de privilegii 1 este destinat artitilor, nivelul de privilegii 10 este folosit
pentru administrator. Privilegiile administratorului i ofer, pe lng privilegiile de
21 Anexe
care se bucur un artist, posibilitatea de a aproba/respinge lucrrile ncrcate de
ctre artiti i de a gestiona licitaiile active i cele ncheiate.
cib_licitaii_active este tabela folosit pentru licitaiile aflate n curs de
desfurare. Cmpurile sale sunt: id, id_produs id-ul produsului scos la licitaie,
ce corespunde cmpului id din tabela cib_galerie; val_start valoarea de la care se
liciteaz, val_curent ultima valoare licitat, pas valoarea cu care crete
valoarea licitat, data_start cmp de tipul timestamp, care nregistreaz data i
ora la care a nceput licitaia i data_sfrit data la care se va ncheia licitaia
curent.
cib_licitaii_history este tabela n care vor fi inserate nregistrrile terse din
cib_licitaii_active. Cmpurile din aceast tabel sunt comune cu cele din tabela
cib_licitatii_active i n plus va salva status-ul licitaiei dac licitaia s-a ncheiat
la data prestabilit sau dac aceasta a fost tears, valoarea comisionului pe care
l va reine casa de licitaii n cmpul val_comision i data_arhivare - data la care
licitaia a fost arhivat pentru detectarea eventualelor neconcordane.
cib_participani_licitaie conine istoria licitrilor efectuate n cadrul aplicaiei.
Aceast tabel reine n cmpul id_licitaie id-ul licitaiei pentru care s-a licitat,
id_user i tip_user sunt folosite pentru identificarea utilizatorului care a licitat,
suma reprezint valoarea licitat, iar data este data la care s-a efectuat licitaia.
cib_menu i admin_menu sunt tabelele corespunztoare meniului din galerie,
vizibil tuturor categoriilor de utilizator i meniului din panoul de administrare.
cib_menu are urmtoarea structur: id, parent, categorie, continut, nume, ordine.
Fiecare nregistrare n tabel va reprezenta o opiune din meniu. Astfel, parent va
reprezenta id-ul categoriei printe, categoria este cea din care face parte
opiunea, iar cmpul nume reprezint denumirea afiat n meniu. Cmpul ordine
determin poziia opiunii n submeniu. Tabela pentru meniul de administrare este
asemntoare, dar conine n plus cmpul privilegii, care determin nivelul de
acces necesar pentru ca un utilizator s poat vizualiza opiunea meniului.
cib_judete este o tabel auxiliar ce conine judeele disponibile la nregistrarea
unui utilizator pe site.
Pentru a putea gestiona corect tabelele din baza de date am creat o serie de triggeri.
De exemplu, triggerul pentru update-ul statusului licitaiei de la NOU la LICITAT n
momentul deschiderii licitaiei:
22 Anexe
Galeria
Galeria constituie partea care gestioneaz prezentarea lucrrilor de art din cadrul
aplicaiei. Clasele aferente acestei funcionaliti sunt:
Load aceast clas este inclus n fiierul index.php iar funciile sale begin() i
middle() sunt apelate n acelai fiier. Metoda begin() este responsabil pentru mai multe
aspecte:
asigur protecia aplicaiei, protejnd-o de injecii SQL prin apelarea
funciei php mysql_escape_string(). Aceast funcie este apelat att pentru
metoda GET, ct i pentru metoda POST:
foreach($_GET as &$row)
{
$row = trim(mysql_escape_string($row));
unset($row);
foreach($_POST as &$row)
{
$row = trim(mysql_escape_string($row));
unset($row);
}
}
MySQL este clasa folosit pentru comunicarea aplicaiei cu baza de date MySQL a
aplicaiei. Conectarea la baza de date se realizeaz n constructorul clasei MySQL:
23 Anexe
if(!$this->connection = mysql_connect($host, $user, $pass, $db))
{
die('Nu ma pot conecta la BD : ' . mysql_error());
}
else
$this->sel = mysql_select_db('ciberart',$this->connection);
}
24 Anexe
}
return $this->getAll($sql);break;
case "insert":
$this->genericSQL($sql);
if(mysql_insert_id())
return mysql_insert_id();
else
echo "Comanda INSERT nu are id. Este
posibil sa existe o eroare.";break;
default:
$this->genericSQL($sql);break;
}
}
return false;
}
Funcia getALL() este funcia care execut interogarea SQL furnizat de ctre
programator ca i parametru de intrare. n cazul n care interogarea nu se efectueaz cu
succes, va fi returnat un mesaj de eroare. Metoda doSQL() efectueaz, n funcie de
coninutul irului de caractere furnizat, comanda SQL pentru SELECT sau pentru INSERT.
Dac irul de caractere conine subirul de caractere select, se va efectua ramura
corespunztoare n cadrul instruciunii switch. Dup ce se va insera prin concatenare n
irul de caractere al instruciunii SQL condiia pentru ca lucrarea din site asupra creia se
efectueaz interogarea, este apelat funcia getAll() pentru executarea interogrii. n
cazul n care comanda este pentru insert, se vor efectua instruciunile de pe ramura a
doua a switch-ului.
Printre cele mai importante funcii ale aplicaiei web CiberArt este funcia save() din
clasa MySQL:
public function save($tabela = false, $id = false, $date = false)
{
if($tabela)
{
$array = Array();
if($id)
{
//update
if($date)
$array = $date;
else
$array = $_POST;
$aux = '';
foreach($array as $k=>$r)
$aux .= ", $k = '$r'";
$aux = substr($aux,1);
$sql = "UPDATE {$tabela} SET {$aux} WHERE id =
'{$id}'";
}
else
{
//insert
25 Anexe
if($date)
$array = $date;
else
$array = $_POST;
$fields = '';
$values = '';
foreach($array as $k=>$r)
{
$fields .= ', '.$k;
$values .= ", '$r'";
}
$values = substr($values,1);
$fields = substr($fields,1);
$sql = "INSERT INTO {$tabela} ({$fields}) VALUES
({$values})";
}
$this->doSQL($sql);
}
}
Aceast funcie se comport ca o comand php pentru execuia fie a unei interogri
de tipul select, fie a unei instruciuni SQL de tipul insert. Salvarea se va realiza deci n
baza de date n funcie de existena id-ului n tabel. Att tabela i cmpurile n care se
vor stoca noile informaii, ct i id-ul cu care va fi identificat nregistrarea vor fi trimise
funciei ca i parametrii de intrare tabela va fi transmis ca un ir de caractere i
cmpurile ca un vector asociativ.
Funcii - este clasa care conine funciile cele mai utilizate n aplicaie i extinde
clasa MySQL. Metodele din clasa Funcii sunt folosite i n alte clase php din cadrul galeriei
i sunt: funcii de validare a datelor introduse n aplicaie de ctre utilizator (validarea
parolei, a e-mailului), funcii pentru afiarea produselor n pagin paginare(), sau pentru
atribuirea variabilelor assign().
26 Anexe
$paginare['total_pagini']=
ceil($paginare['nr_prod']/$paginare['nr_poze_per_pag']);
Fig 2.6
Formularul de
autentificare
function login()
{
global $db;
if($_POST['login'])
{
$login['email'] = strip_tags($_POST['email']);
$login['parola']= $_POST['parola'];
}
if(!$this->esteEmail($login['email']))
$_SESSION['error']['login'] = "Email sau parola incorecte";
if(!$this->estePassword($login['parola']))
$_SESSION['error']['login'] = "Email sau parola incorecte";
if(!isset($login['eroare']))
{
if($_POST["tip"]=="client")
$user = $db->doSql("SELECT * from cib_clienti where email
= '".$login['email']."' AND parola = '".md5($login['parola'])."' ");
else
$user = $db->doSql("SELECT * from cib_artisti where email
= '".$login['email']."' AND parola = '".md5($login['parola'])."' ");
if($user[0]['id'])
{
$_SESSION['user']['id'] = $user[0]['id'];
$_SESSION['user']['nume'] = $user[0]['nume'];
$_SESSION['user']['prenume'] = $user[0]['prenume'];
$_SESSION['user']['email'] = $user[0]['email'];
$_SESSION['user']['tip'] = $_POST['tip'];
$_SESSION['user']['privilegii']=$user[0]['privilegii'];
$useru['privilegii'] = $_SESSION['user']['privilegii'];
$this->assign("useru",useru);
header('Location: '.ROOT);
die();
}else
{ $_SESSION['error']['login'] = "Email sau parola incorecte!";
header('Location: '.ROOT);
}
}
global $categorie,$content;
27 Anexe
$categorie = "home";
$content = "index";
}
Funcia de nregistrare a unui nou utilizator pe site va stoca informaiile despre noul
utilizator, n funcie de un radio button cu opiunile client i artist, n una dintre tabelele
cib_clienti sau cib_artisti. Dup ce are loc o serie de validri a datelor, se va efectua
inserarea lor n tabela corespunztoare.
Galerie, Stil_tip i Tematica sunt clase asemntoare, destinate afirii lucrrilor
de art din cadrul galeriei. Motivul pentru care am folosit trei clase este pentru a clasifica
lucrrile n funcie de trei criterii: tipul lucrrilor (pictur, sculptur, fotografie), stilul n
care se ncadreaz lucrrile (realist, expresionist, impresionist, fantastic) i tematica
lucrrii (arhitectur, tematic floral, natur static, peisaj, portret). Voi exemplifica
pentru clasa Galerie selectarea lucrrilor din categoria pictur:
28 Anexe
<div id="na">Nu exista inca produse in aceasta categorie.</div>
{/if}
{if $paginare.total_pagini gt 1 }
<div>
{foreach from = $paginare.pagini item = v key = k}
{if $k neq 1}, {/if}<a href=
"{$root}galerie/picturi&page ={$k}.html">{$k}</a>
{/foreach}
</div>
{/if}
Fiierul ablon display.tpl este un fiier folosit pentru afiarea denumirii unei lucrri i
a imaginii cu rol de iconi (thumbnail):
<div id="thumbs">
<a href="{$v.link}"><img src="{$v.img}" /></a><br />
<p class="par" >{$v.denumire} </p>
</div>
Rezultatul afirii abloanelor va arat astfel:
paginrii
acestora
prin
intermediul
funciei
29 Anexe
Licitaie este clasa care permite unui utilizator s liciteze pentru o anumit
lucrare. Funcia principal a acestei clase este funcia liciteaza() anexat n A2 ca i
A2.3. Aceast metod are mai multe funcionaliti: interognd baza de date va determina
dac userul logat n sesiunea curent de lucru este ultimul licitant al lucrrii selectate.
Dei ablonul pentru licitare conine condiia pentru ca utilizatorul s nu fie ultimul
licitant, acest lucru nu este de ajuns, ntruct nu protejeaz baza de date de licitri
accidentale, nedorite. De aceea vom testa si n cadrul funciei php acest lucru, iar n cazul
n care condiia este ndeplinit, utilizatorul va fi nregistrat ca i ultimul licitant n cadrul
licitaiei active folosind funcia save() motenit din clasa Funcii. Tot n aceast funcie
sunt selectate i date despre lucrare, care apoi vor fi afiate prin intermediul ablonului
liciteaza.tpl.
Stat reprezint clasa folosit pentru paginile statice ale aplicaiei pagina de
contact, pagina de ajutor, pagina cu informaii despre galerie. Aceast clas va fi folosit
mpreun cu abloanele statice corespunztoare: contact.tpl, ajutor.tpl, desprenoi.tpl.
Panoul de administrare
Clasele implementate n panoul de administrare sunt:
MySQL este clasa care, la fel ca i n cazul galeriei, gestioneaz comunicarea cu
baza de date ciberart. Funciile folosite n aceast clas sunt similare clasei folosite
pentru Galerie.
Funcii n plus fa de clasa cu nume identic folosit pentru galerie, aceast clas
permite i selectarea tabelei din care vor fi utilizate detaliile despre lucrarea n cauz.
Selectarea tabelei se efectueaz cu ajutorul unei instruciuni de tipul switch, care are ca
parametru de intrare variabila $tip:
30 Anexe
Profil clasa profil este destinat tuturor categoriilor de utilizatori. Funcia
profil() este cea care permite editarea informaiilor personale att a clienilor ct i a
artitilor, prin interogarea bazei de date n funcie de variabilele de sesiune. Tot n aceeai
funcie are loc i validarea datelor, pentru a asigura o acuratee ct mai mare a
informaiilor personale. Funcia profil() este ataat n anexa A2 sub numrul A2.4.
Produse aceast clas conine trei funcii importante pentru gestiunea lucrrilor
din cadrul aplicaiei: load_produs(), edit_produs() i delete(). Metoda load_produs() are
scopul de a selecta din baza de date toate lucrrile artistului logat n sesiunea curent.
31 Anexe
clase,
createThumb(),
getImageSize(),
$size = getimagesize($dest);
if($size[0] > 650)
{
$width = 650;
$procent = $width/$size[0];
$height = $size[1] * $procent;
}
32 Anexe
Pentru afiarea unei imaginii din pagina de editare a produsului i pentru a putea realiza
crop-ul iconiei am folosit setul de librrii JavaScript script.aculo.us. Acest set de librrii
este de obicei folosit pentru a mbuntii interfaa cu utilizatorul a aplicaiilor web
deoarece ofer posibilitatea crerii unei serii de efecte vizuale, o librrie pentru operaia
de drag and drop i chiar controale pentru auto-complete, elemente de tipul slider.
Aprobare clasa Aprobare este cea care permite administratorului galeriei s
proceseze lucrrile ncrcate de ctre utilizatori i s evalueze dac pot fi aprobate
pentru a aprea n galerie sau nu. Pentru a uura munca administratorului i pentru o mai
bun vizibilitate, am mprit lucrrile ncrcate de artiti n 3 categorii: lucrri aprobate,
lucrri respinse i lucrri aflate n ateptare.
Funcia care este responsabil pentru selectarea lucrrilor aprobate din baza de date
este urmtoarea:
din
directorul
aprobare.
edit_licitatie(),
licitatii_active()
licitatii_history().
Funcia
licitatii_active() este cea care selecteaz toate licitaiile active spre a putea fi
administrate. Cu ajutorul unui ablon, aceste licitaii sunt afiate sub forma unei liste de
lucrri ale cror licitaii sunt editabile. Funcia pentru licitaiile ncheiate este
asemntoare, cu diferena c o licitaie ncheiat nu mai poate fi editat.
33 Anexe
Funcia liciteaza_produs() este practic cea care deschide licitaia pentru o anumit
lucrare. Ea poate fi apelat doar de ctre utilizatorul care este autorul lucrrii. Pentru a
putea fi creat o licitaie, trebuie ndeplinite o serie de condiii: lucrarea nu trebuie s
mai fi fcut obiectul unei licitaii anterioare acest lucru este asigurat prin cmpul status
din tabela cib_galerie; lucrarea trebuie s fi fost aprobat anterior de ctre
administratorul bazei de date verificabil cu ajutorul cmpului aprobare din tabela
cib_galerie. Dup validarea datelor introduse de utilizator cu privire la termenii licitaiei
preul de pornire, pasul cu care se va licita, data la care se sfrete licitaia, are loc
inserarea datelor n tabela cib_licitatii_active.
Pentru a ncheia o licitaie, am folosit un instrument furnizat chiar de sistemul de
operare Windows XP schtasks (scheduled tasks). Comenzile i programele planificate
sunt acelea programate s ruleze fie periodic, fie la un anumit moment. Acest utilitar
permite adugarea i tergerea sarcinilor din plan, pornirea i oprirea la cerere i afiarea
i modificarea sarcinilor planificate. Sintaxa comenzii este:
schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier] [/d day] [/m
month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s
computer [/u [domain\]user /p password]] [/ru {[Domain\]User | "System"}
[/rp Password]] /?
n funcia de licitare a unui produs am utilizat funcia php exec() pentru rularea unui
program extern:
34 Anexe
licitaiilor active vor fi terse, iar statusul lucrrii din cadrul tabelei cib_galerie se va
schimba din LICITAT n VANDUT.
rewrite_module
modules/mod_rewrite.so
din
fiierul
httpd.conf. Acest modul, fiind activ, v-a permite rescrierea link-urilor din aplicaie
n modul proprietar.
PHP Server Poate fi instalat i ca plugin pentru Serverul HTTP de la Apache. Este
nevoie ca n fiierul php.ini s fie decomentat linia extension=php_gd2.dll
35 Anexe
s fie decomentat pentru ca serverul PHP s poat suporta funcii pentru lucrul cu
fiierele grafice.
Baz de date MySQL Pentru a administra baza de date se poate folosi fie modul
comand, fie poate fi folosit o interfa grafic disponibil gratuit pe Internet,
precum MySQL Administrator sau aplicaia scris n PHP, phpMyAdmin. Pentru a
putea accesa i interoga baza de date, va fi nevoie ca n constructorul clasei
MySQL a aplicaiei s fie completate corect datele de conectare: denumirea bazei
de date, userul, parola i host-ul.
Pentru a facilita instalarea acestor componente pe sistemul de calcul, poate fi instalat
aplicaia XAMPP (X simbolizeaz compatibilitatea cu orice platform, A-Apache, MMySQL, P-PHP, P-Perl) sau aplicaia WAMP (W-Windows, A-Apache, M-MySQL, P-PHP).
Aceste aplicaii sunt de fapt pachete compuse din produsele software Apache HTTP Server,
baza de date MySQL i interpretoare pentru script-uri PHP. Instalarea unui astfel de pachet
se realizeaz ca i instalarea unei aplicaii, iar componenta Monitor permite monitorizarea
serviciilor funcionabile.
Pentru a continua instalarea este nevoie s fie copiat sistemul de directoare i fiiere surs
n directorul public al serverului web, pstrndu-se structura neschimbat. Pentru ca
partea de licitare s fie funcional este necesar ca fiierele .php s se deschid automat
cu php.exe, CLI-ul(Command Line Interface) php. n final, pentru ca baza de date s fie
folosibil, se va importa n MySQL baza de date ciberart din fiierul ciberart.sql.
36 Anexe
login exist link-ul ctre pagina de nregistrare pe site. Se observ c pe site nu se pot
nregistra dect utilizatori cu privilegii de clieni i artiti. Rolul de administrator nu poate
fi jucat dect de un anumit utilizator, setat din baza de date. Cu toate acestea,
administratorul galeriei se va autentifica pe site ca i un artist.
Pe prima pagin este inclus un badge de
Twitter, care joac rolul unui micro centru
de tiri. Aici vor fi afiate maxim 5 updateuri preluate de pe site-ul twitter.com, de la
utilizatorul prestabilit.
Pentru navigarea n cadrul galerie se va
folosi meniul, care este intuitiv i clar,
opiunea de cutare pe site i linkurile
disponibile.
n pagina de licitare a unui produs,
utilizatorul va putea vizualiza informaiile
importante referitoare la licitaia curent:
data la care a nceput licitaia, data la care se va finaliza licitaia, preul de pornire,
pasul minim al licitaiei, ultimul pre licitat i chiar i ultimul utilizator care a licitat
pentru lucrarea respectiv.
Pentru a accesa panoul de administrare, se va folosi linkul care va aprea sub butonul
pentru delogare. Pentru clieni, panoul de administrare const n posibilitatea modificrii
datelor din profilul nregistrat.
Panoul de administrare destinat artitilor i
administratorului, de asemenea conine un meniu care ofer
accesul ctre toate funciile. Meniul este mprit n trei
categorii: Administrare cont, Aprobare lucrri i Licitaii.
Opiunea Administrare cont este singura opiune
disponibil artitilor, celelalte dou fiind destinate numai
administratorului.
Opiunea Lucrrile mele va afia o list a lucrrilor
artistului autentificat, sub forma unui tabel ce va conine:
iconia lucrrii, denumirea, buton pentru tergerea acesteia,
37 Anexe
starea licitaiei i starea lucrrii. Dnd click pe iconi este posibil editarea datelor
referitoare la lucrare, chiar i a imaginii i a iconiei. Pentru ncrcarea unei noi lucrri se
va utiliza butonul Adaug produs nou care se afl deasupra listei lucrrilor.
deja
evaluate
poate
fi
galeriei,
pentru
ceea
ce
privete
licitaii
active
se
pot
preul
curent
sau
pasul
de
vizualizai utilizatorii care au licitat pentru lucrarea respectiv, suma licitat i data
licitrii.
38 Anexe
Capitolul 4. Concluzii
Aplicaia web CiberArt a fost realizat folosind unele dintre cele mai noi instrumente i
tehnologii web disponibile n totalitate open-source sau gratuit. Funcionalitile acesteia
au fost implementate n vederea acoperirii nevoilor unei galerii de art cu suport pentru
licitaii online, dar n acelai timp pstrnd o linie de dezvoltare simpl, uor de neles i
folosit de ctre utilizator i uor de mbuntit de ctre un programator care nu a
participat la crearea aplicaiei. Gruparea funcionalitilor comune, folosirea unor
controale specializate, interfaa simpl i intuitiv, mesajele ajutatoare din cadrul
aplicaiei i administrarea facil a galeriei definesc o aplicaie light, potrivit cerinelor
utilizatorilor.
Folosirea motorului Smarty i a sistemului de ablonare reduce considerabil timpul i
efortul de programare, refolosind o mare parte din cod. Template-urile pot fi folosite de
asemenea pentru afiarea unor elemente n pagini total diferite, pstrnd astfel un anumit
stil de formatare pe toat ntinderea aplicaiei i un grad de omogenitate n stratul de
prezentare al aplicaiei web.
Dei scopul ei a fost facilitarea unui sistem de licitaii online, aplicaia web poate fi
folosit de asemenea, cu mici modificri i ca o simpl galerie de prezentare a unor
produse. Diferite funcionaliti pot fi adugate cu uurin, pentru dezvoltri ulterioare
ale aplicaiei. Opiunile din meniu pot fi modificate din utilitarul phpMyAdmin, modificnd
tabela cib_meniu. n acest mod, pot fi adgate sau schimbate categoriile i subcategoriile
39 Anexe
n care se ncadreaz lucrrile. De asemenea, pot fi adugate link-uri ctre alte pagini
statice sau ctre alte site-uri web.
Alte funcionaliti adugate aplicaiei o pot dezvolta pentru a deveni o comunitate de
artiti prin implementarea unor unelte specifice unei reele sociale online precum: chat
online, mesagerie n cadrul aplicaiei, focalizarea asupra profilului unui utilizator, un
sistem de votare al lucrrilor din galerie, sau diferite widget-uri. O alt posibil dezvoltare
a aplicaiei poate viza transformarea acesteia ntr-o galerie n cadrul creia s fie expuse
i licitate mai multe colecii de obiecte de art.
Indiferent de hotrrea luat n ceea ce privete dezvoltarea aplicaiei web CiberArt,
aceasta va rmne o aplicaie cu un aspect curat, o interfa simpl i uor de folosit,
chiar i de ctre utilizatorul nespecialist.
Bibliografie
[IWS01]
[UCK01]
Underclick: http://www.underclick.ro/E-commerce/index.html
[ASEC01]
[SBAPP01]
[WIKI01]
Wikipedia: http://en.wikipedia.org/wiki/Web_application
[WIKI02]
Wikipedia: http://en.wikipedia.org/wiki/Smarty
[WIKI03]
Wikipedia: http://en.wikipedia.org/wiki/Auction
[WIKI04]
Wikipedia: http://en.wikipedia.org/wiki/Online_auction_business_model
[HAG01]
[WMP01]
[DVM01]
[W3S01]
W3Schools: http://www.w3schools.com/html/default.asp
[W3S02]
W3Schools: http://www.w3schools.com/css/
[W3S03]
W3Schools: http://www.w3schools.com/jsref/
[W3S04]
W3Schools: http://www.w3schools.com/php/default.asp
40 Anexe
[PHP01]
PHP.net: http://www.php.net/manual/en/
[SMT01]
Smarty: http://www.smarty.net/manual/en/what.is.smarty.php
[SSOA01]
[PJS01]
[DW01]
[SCR01]
Scriptaculous: http://script.aculo.us/
[SCRW01]
[MSSCH01]
Microsoft:
http://www.microsoft.com/resources/documentation/windows/xp/all/prod
docs/en-us/schtasks.mspx?mfr=true
Anexe
A1 SCHEMA CONCEPTUAL A BAZEI DE DATE
41 Anexe
42 Anexe
{
$search_str=str_replace(" ","%",trim($_POST['search_text']));
$sql="SELECT * FROM ( SELECT denumire,poza,cib_galerie.id,cib_galerie.tip
FROM cib_galerie
INNER JOIN cib_detalii_desen ON cib_galerie.detalii = cib_detalii_desen.id
INNER JOIN cib_artisti ON cib_artisti.id = cib_galerie.id_artist
WHERE cib_galerie.tip='DESEN' AND (cib_galerie.denumire LIKE '%{$search_str}
%' OR concat(cib_artisti.nume,' ',cib_artisti.prenume) LIKE '%{$search_str}%' OR
cib_detalii_desen.descriere LIKE '%{$search_str}%' OR
cib_detalii_desen.materiale LIKE '%{$search_str}%') AND
cib_galerie.aprobare='APROBAT'
UNION
SELECT denumire,poza,cib_galerie.id,cib_galerie.tip FROM cib_galerie
INNER JOIN cib_detalii_fotografie ON cib_galerie.detalii =
cib_detalii_fotografie.id
INNER JOIN cib_artisti ON cib_artisti.id = cib_galerie.id_artist
WHERE cib_galerie.tip='FOTOGRAFIE' AND (cib_galerie.denumire LIKE '%
{$search_str}%' OR concat(cib_artisti.nume,' ',cib_artisti.prenume) LIKE '%
{$search_str}%' OR cib_detalii_fotografie.descriere LIKE '%{$search_str}%' OR
cib_detalii_fotografie.tehnica LIKE '%{$search_str}%') AND
cib_galerie.aprobare='APROBAT'
UNION
SELECT denumire,poza,cib_galerie.id,cib_galerie.tip FROM cib_galerie
INNER JOIN cib_detalii_pictura ON cib_galerie.detalii =
cib_detalii_pictura.id
INNER JOIN cib_artisti ON cib_artisti.id = cib_galerie.id_artist
WHERE cib_galerie.tip='PICTURA' AND (cib_galerie.denumire LIKE '%
{$search_str}%' OR concat(cib_artisti.nume,' ',cib_artisti.prenume) LIKE '%
{$search_str}%' OR cib_detalii_pictura.descriere LIKE '%{$search_str}%' OR
cib_detalii_pictura.materiale LIKE '%{$search_str}%' ) AND
cib_galerie.aprobare='APROBAT'
UNION
SELECT denumire,poza,cib_galerie.id,cib_galerie.tip FROM cib_galerie
INNER JOIN cib_detalii_sculptura ON cib_galerie.detalii =
cib_detalii_sculptura.id
INNER JOIN cib_artisti ON cib_artisti.id = cib_galerie.id_artist
WHERE cib_galerie.tip='SCULPTURA' AND ( cib_galerie.denumire LIKE '%
{$search_str}%' OR concat(cib_artisti.nume,' ',cib_artisti.prenume) LIKE '%
{$search_str}%' OR cib_detalii_sculptura.descriere LIKE '%{$search_str}%' OR
cib_detalii_sculptura.materiale LIKE '%{$search_str}%' ) AND
cib_galerie.aprobare='APROBAT'
UNION
SELECT denumire,poza,cib_galerie.id,cib_galerie.tip FROM cib_galerie
INNER JOIN cib_detalii_unicate ON cib_galerie.detalii =
cib_detalii_unicate.id
INNER JOIN cib_artisti ON cib_artisti.id = cib_galerie.id_artist
WHERE cib_galerie.tip='UNICATE' AND ( cib_galerie.denumire LIKE '%
{$search_str}%' OR concat(cib_artisti.nume,' ',cib_artisti.prenume) LIKE '%
{$search_str}%' OR cib_detalii_unicate.descriere LIKE '%{$search_str}%' OR
cib_detalii_unicate.materiale LIKE '%{$search_str}%' ) AND
cib_galerie.aprobare='APROBAT' ) AS t GROUP BY t.id";
$paginare=$this->paginare_caut($sql);
$produse=$this->doSQL($sql." limit ".$paginare['limit']);
foreach ($produse as &$produs )
{
$produs['img']=ROOT."img/".strtolower($produs['tip'])."/thumbs/".
$produs['poza'];
$produs['link']=ROOT."galerie/produs/".$produs['id'].".html";
}
$this->assign("produse",$produse);
$this->assign("paginare",$paginare);
}
43 Anexe
$sql="SELECT * FROM cib_licitatii_active WHERE id_produs='{$id_produs}'";
$licitatie=$this->doSQL($sql);
$licitatie=$licitatie[0];
$this->assign("licitatie",$licitatie);
if($_POST['save'])
{
$last=$this->doSQL('SELECT max( data ),
cib_participanti_licitatie.id_user, lower(cib_participanti_licitatie.tip_user) as
tip_user FROM cib_participanti_licitatie WHERE id_licitatie = "'.
$licitatie["id"].'" GROUP BY DATA order by data DESC');
$last=$last[0];
if($last['id_user']!=$_SESSION['user']['id'] OR $last['tip_user']!
=$_SESSION['user']['tip'])
{
$save=array(
"suma"=>$_POST['suma'],
"id_user"=>$_SESSION['user']['id'],
"tip_user"=>$_SESSION['user']['tip'],
"id_licitatie"=>$licitatie["id"]
);
$this->save("cib_participanti_licitatie",false,$save);
}
}
$sql="SELECT cib_galerie.denumire, cib_galerie.tip, cib_galerie.poza,
concat(cib_artisti.prenume,' ', cib_artisti.nume) AS autor FROM cib_galerie INNER
JOIN cib_artisti ON cib_galerie.id_artist = cib_artisti.id WHERE
cib_galerie.id='{$id_produs}'";
$produs=$this->doSQL($sql);
$produs=$produs[0];
$produs['back']=$_SERVER['HTTP_REFERER'];
$produs['poza']=ROOT."img/".strtolower($produs['tip'])."/thumbs/".
$produs['poza'];
$this->assign("produs",$produs);
$sql="SELECT * FROM (SELECT
cib_participanti_licitatie.suma,cib_participanti_licitatie.data,
cib_participanti_licitatie.id_user, lower(cib_participanti_licitatie.tip_user) as
tip_user, concat(cib_clienti.prenume,' ',cib_clienti.nume) as name FROM
cib_participanti_licitatie INNER JOIN cib_clienti ON
cib_clienti.id=cib_participanti_licitatie.id_user INNER JOIN cib_licitatii_active
ON cib_participanti_licitatie.id_licitatie=cib_licitatii_active.id WHERE
cib_participanti_licitatie.tip_user='CLIENT' AND
cib_licitatii_active.id_produs='{$id_produs}' UNION
SELECT
cib_participanti_licitatie.suma,cib_participanti_licitatie.data,cib_participanti_li
citatie.id_user, lower(cib_participanti_licitatie.tip_user) as
tip_user,concat(cib_artisti.prenume,' ',cib_artisti.nume) FROM
cib_participanti_licitatie INNER JOIN cib_artisti ON
cib_artisti.id=cib_participanti_licitatie.id_user INNER JOIN cib_licitatii_active
ON cib_participanti_licitatie.id_licitatie=cib_licitatii_active.id WHERE
cib_participanti_licitatie.tip_user='ARTIST' AND
cib_licitatii_active.id_produs='{$id_produs}') AS t ORDER BY data DESC";
$biders=$this->doSQL($sql);
$this->assign("biders",$biders);
}
44 Anexe
if($_SESSION['user']['tip']=='artist')
{
$tabela='cib_artisti';
}
else $tabela='cib_clienti';
if($_POST['save'])
{
unset($_POST['save']);
$error=array();
foreach($_POST as $k=>$c)
{
if(strlen($c)<1)
$error[$k]='Toate campurile sunt obligatorii.';
}
if(count($error)<1)
{
$this->save($tabela,$_SESSION['user']['id']);
$mesaj = 'Salvare efectuata cu succes :)';
$this->assign("mesaj",$mesaj);
}
$this->assign("error",$error);
}
$sql="SELECT * FROM $tabela where id= '".$_SESSION['user']['id']."' ";
$date=$this->doSQL($sql);
$date=$date[0];
$judete=$this->doSQL("SELECT * FROM cib_judete");
$select = array();
$select['judet']=array('values'=>array(''),'output'=>array('--'),'selected'=>$date[
'judet']);
foreach($judete as $x)
{
$select['judet']['values'][]=$x['id'];
$select['judet']['output'][]=$x['judet'];
}
$this->assign("select",$select);
$this->assign("date",$date);
}
45 Anexe
break;
default:
return false;
break;
}
//creez o instanta a imaginii.
$dst = imageCreateTrueColor($t_width,$t_height);
//setez background-ul imaginii
$bg = imagecolorallocate ( $dst, 255, 255, 255 );
imagefill ( $dst, 0, 0, $bg );
ImageCopyResampled($dst,$src,0,0,$src_left,$src_top,$t_width,
$t_height,$t_width,$t_height);
// scriu poza pe hdd
switch ($type) {
case $type == "jpeg" OR $type=="jpg":
ImageJPEG($dst,$dest);
break;
case "gif":
ImageGIF($dst,$dest);
break;
case "png":
ImagePNG($dst,$dest);
break;
case "bmp":
ImageWBMP($dst,$dest);
break;
default:
return false;
}
return true;
}
return false;
}
46 Anexe
else {
$error['data_sfarsit'] = 'Alegeti data la care se finalizeaza
licitatia';
}
if(count($error)<1)
{
$save = array(
'data_sfarsit'=>$_POST['data_sfarsit'],
'val_start'=>$_POST['val_start'],
'val_curenta'=>0,
'id_produs'=>$id,
'pas'=>$_POST['pas']
);
$this->save('cib_licitatii_active', false, $save);
$insert_id=mysql_insert_id();
if($insert_id)
{
$time=explode(' ',trim($_POST['data_sfarsit']));
$data=explode('-',$time[0]);
$output=array();
exec('schtasks /create /TN licitatie'.$insert_id.' /SC
ONCE /ST '.$time[1].' /SD '.$data[1].'/'.$data[2].'/'.$data[0].' /TR
"'.UPLOAD_ROOT.'admin\classes\adauga_lic.php" /RU "Adi" /RP "adi"',$output);
if(strpos($output[0],'SUCCESS') < 0)
{
$error['task']="Licitatia nu a putut fi creata.
Contactati administratorul websiteul-ui";
}
else
{
header("Location:".ROOT."produse/load_produs.html
");
}
}
}//afisez erorile
else
{
$str="";
foreach($error as $r)
{
$str.="\\n - {$r}";
}
$this->assign('error',$str);
}
}
$tabela = $this->get_table($date['tip']);
$detalii = $this->doSQL("SELECT * FROM {$tabela} where id =
'{$date['detalii']}'");
$detalii = $detalii[0];
$date['poza'] = SITE_ROOT.'img/'.strtolower($date['tip']).
'/thumbs/'.$date['poza'];
$this->assign("date",$date);
$this->assign("detalii",$detalii);
$this->assign('post',$_POST);
}
47 Anexe
$save=array(
'id_produs'=>$licitatie['id_produs'],
'val_start'=>$licitatie['val_start'],
'val_vanzare'=>$licitatie['val_curenta'],
'data_start'=>$licitatie['data_start'],
'data_sfarsit'=>$licitatie['data_sfarsit'],
'val_comision'=>$licitatie['val_curenta']*0.1
);
$sql->save('cib_licitatii_history',false,$save);
$sql->delete_prod("cib_licitatii_active",$licitatie['id']);
$sql->save("cib_galerie",$licitatie['id_produs'],array("status"=>"VANDUT"));
?>