Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Aplicatie informatica pentru cresterea eficientei serviciilor IT
Introducere
Managementul serviciilor IT
Cresterea complexitatii sistemelor creeaza departamentelor IT din organizatii problema managementului serviciilor si a proceselor pentru operatiunile IT.
Departamentele IT sunt puse sub presiunea de a oferi servicii din ce in ce mai complexe si la nivele de performanta crescuta, dar in acelasi timp cu reducerea cheltuielilor operationale asociate.
Ce inseamna de fapt managementul serviciilor IT
"IT Service Management (ITSM) is a discipline for managing information technology (IT) systems, philosophically centered on the customer's perspective of IT's contribution to the business."
Ca o observatie importanta, in aceasta definitie conteaza perspectiva clientului (beneficiarul serviciilor) in contrast cu abordarea centrata pe tehnologie pe care o au in general cei care lucreaza in departamentele IT. Pe scurt trebuie sa ne punem in locul beneficiarului si sa gandim care sunt beneficiile pe care IT-ul le aduce organizatiei.
Ca o observatie importanta, in aceasta definitie conteaza perspectiva clientului (beneficiarul serviciilor) in contrast cu abordarea centrata pe tehnologie pe care o au in general cei care lucreaza in departamentele IT. Pe scurt trebuie sa ne punem in locul beneficiarului si sa gandim care sunt beneficiile pe care IT-ul le aduce organizatiei.
Managementul Serviciilor versus Managementul Sistemelor
Un alt termen care este amintit destul de des in lumea IT este cel de management al sistemelor. Acesta priveste infrastructura IT doar din punctul de vedere operational. Din nou apelam la definitie:
"Systems management refers to enterprise-wide administration of distributed computer systems."
Trebuie sa observam perspectiva orientata pe tehnologie a acestei definitii.
Managementul sistemelor implica de fapt existenta unor produse si tehnologii de management.
Cresterea numarului de statii de lucru si a numarului de aplicatii care trebuie gestionate creeaza dificultati personalului departamentelor IT in pastrarea controlul configuratiei sistemelor, realizarea de modificari controlate asupra sistemelor IT si introducerea de sisteme si aplicatii noi cu minim de intreruperi in activitate.
Managementul sistemelor poate include mai multe dintre urmatoarele activitati:
Inventariere hardware si software;
Monitorizarea sistemelor si metrici de performanta;
Instalare automatizata de software;
Managementul patch-urilor;
Managementul solutiilor de antivirus si anti-malware;
Monitorizarea capacitatii;
Managementul securitatii sistemelor;
Managementul stocarii;
Monitorizarea retelei si comunicatiilor.
Toate aceste functii ale departamentului de IT le regasim intr-o forma sau alta si in managementul serviciilor. Putem spune insa ca managementul serviciilor se afla pe un nivel de abstractizare superior pentru ca trateaza lucrurile din perspectiva serviciilor oferite, cu toate componentele acestora.
Standarde pentru managementul operatiunilor IT
In elaborarea procedurilor pentru managementul operatiunilor IT ale organizatiei trebuie sa tinem cont de standardele si metodologiile existente in domeniu cum ar fi:
IT Infrastructure Library (ITIL), care este un standard de facto pentru operatiunile IT, a fost realizat de catre Office for Government Commerce din Marea Britanie cu scopul de a evalua activitatea departamentelor de IT din administra ia publica si serviciile oferite de furnizorii IT si care in prezent el a fost standardizat ca ISO 20000
Microsoft Operations Framework (MOF) este un o colectie de modele, procese si cele mai bune practici pentru operarea infrastructurilor IT bazate pe produse si tehnologii Microsoft. MOF este bazat pe ITIL adoptand procesele prescrise de acesta, la care se adauga functiii si practici specifice
De ce avem nevoie de standarde si metodologii?
Standardele si metodologiile ne servesc drept referinta si recomandari privind cele mai bune practice pentru implementarea si operarea infrastructurilor IT. Nu sunt obligatorii, nu trebuie sa le implementam ca atare, ci trebuie sa luam din acestea lucrurile care ne folosesc cu adevarat.
O greseala tipica atunci cand o organizatie de IT ia decizia: implementam ITIL sau MOF este de a adopta toate procesele descrise in metodologie, fara discriminare. In contrast ar trebui sa ne gandim care dintre aceste procese ne sunt chiar utile, sa le adaptam la specificul organizatiei noastre.
Managementul serviciilor insemna in primul rand o schimbare de filozofie in cadrul organizatiei IT. Inseamna in primul rand sa privim serviciile oferite din perspectiva beneficiarului si sa ne organizam departamentul in asa fel incat sa imbunatatim nivelul acestora. Organizarea modulara, pe procese si functii recomandata de ITIL sau MOF nu ne poate fi decat de folos.
Cerintele aplicatiei informatice
Analiza mediului in care a aparut nevoia dezvoltarii aplicatiei
In cadrul departamentului IT s-a constatat nevoia unui sistem de monitorizare a interventiilor tehnicienilor pentru rezolvarea diverselor solicitari ale utilizatorilor sistemelor IT din firma.
Avand in vedere ca numarul solicitarilor a crescut o data cu dezvoltarea firmei (atat prin cresterea numarului de angajati, dar mai ales prin cresterea complexitatii sistemului informatic - implementarea AD, implementare Exchange, implementarea sistemului de back-up si storage; aparitia altor publicatii cu noi tehnologii de redactare etc.), departamentul de suport IT se confrunta cu probleme de organizare si raportare.
Tehnicienilor IT le-au crescut numarul de responsabilitati, interventiile lor au crescut in complexitate si diversitate. Astfel, un sistem de centralizare si gestionare a interventiilor a devenit necesar. De asemenea, cu ajutorul unui sistem de raportare complex, sursele majore de probleme putand fi identificate si astfel diminuate. In plus, activitatea departamentului este mult mai transparenta prin prezentarea unor rapoarte si grafice in fata superiorilor ierarhici.
Avand in vedere diversitatea si numarul mare de solicitari s-a gasit ca o aplicatie software este cea mai buna solutie.
Schema generala a arhitecturii softului. Caiet de sarcini:
Se doreste centralizarea tuturor interventiilor efectuate de tehnicienii departamentului de suport IT. Pentru a avea relevanta in rapoarte, trebuie gasita o cuantificare a diverselor interventii. Astfel s-au identificat urmatoarele intrariiesiri:
Intrari:
reclamarea incidentului:
clasa in care se incadreaza problema (hardware - problema a aparut din cauza
defectarii s-au functionarii gresite a unui echipament hardware, software - problema a aparut din cauza defectarii s-au functionarii gresite a unei aplicatii software, tehnica - problema a aparut din cauza unor erori ale departamentului de suport IT, user - problema a aparut din cauza unei erori de utilizare a echipamentelor IT, furnizor - problema a aparut din cauza unui partener cu care lucreaza departamentul IT);
tipul problemei (incadrarea in nomenclatorul de probleme);
dataora reclamatiei;
divizia in cadrul careia a aparut problema; Numele reclamantului; Interiorul
(telefonic) al reclamantului;
descrierea problemei;
dificultatea rezolvarii (dificultatea este stabilita de tehnicianul ce a rezolvat
interventia)
dataora rezolvarii;
durata rezolvarii;
descrierea rezolvarii si alte mentiuni;
Iesiri:
Rapoarte si grafice:
Raport dupa departament;
Raport dupa tipul problemei;
Raport pe om;
Raport dupa data;
Raport customizat;
Grafic pe departament;
Grafic interventii pe zile;
Grafic cauze probleme;
Grafic cauze pe departament;
Grafic cauze pe tip problema;
Argumente la alegerea acestui soft. Alte softuri asemanatoare. Comparatie cu softul prezentat.
A urmat o analiza asupra posibilitatilor pe care departamentul IT le avea la dispozitie pentru a alege cea mai buna posibilitate:
Solutie la cheie externa
S-au identificat cateva aplicatii din piata care puteau fi folosite in scopurile dorite, dintre care, in scopul comparatiei si analizei deciziei luate de manager-ul IT am ales Helpdesk - dezvoltator MBM Software
Figura Numarul 3. Solutie la cheie externa
Reliable HelpDesk este o solutie proiectata special pentru a permite mai tipuri de asistenta pentru clienti utilizand o singura solutie integrata. Solutia noastra este utila atunci cand aveti nevoie de o baza de date pentru a raspunde intrebarilor frecvente sau de o aplicatie eficienta de ticketing.
Reliable HelpDesk este solutia la cheie pentru dezvoltarea afacerii si pastrarea unui avantaj competitiv. In mediul de afaceri complex si dinamic actual, mentinerea serviciilor oferite clientilor la un nivel calitativ ridicat si reducerea costurilor, constituie principalele avantaje prin care solutia noastra software de tip hepldesk ofera aceste facilitati. Interfata de tip Web, usor de utilizat, va va permite sa sprijiniti eficient toate departamentele companiei dvs.
Beneficii
Posibilitatea de customizare a solutiei de helpdesk pentru facilitarea nevoilor speciale ale operatorilor
Prioritizarea si centralizarea tichetelor printr-un sistem scalabil si configurabil
Integrare cu solutia proprie de asset management
Posibilitatea generarii de rapoarte si grafice
Figura Numarul 2. Rapoarte si grafice
Securizarea accesului la interfata de oriunde si oricand
Posibilitatea de a primi rapid suport tehnic postvanzare prin e-mail
Autentificarea automata pentru verificarea statusului unei problem
Posibilitatea de accesare a unei baze de date/cunostinte
Posibilitatea de a discuta on-line cu un specialist pentru a rezolva rapid problemele
Posibilitatea de interactiune intre membrii ariei de acoperire a solutiei de helpdesk
Timp redus de implementare
Module complexe pentru managementul infrastructurii IT
Instalarea foarte rapida si ergonomia aplicatiei justifica pe deplin investitia
Avantaje:
timpul scurt de implementare (fiind o solutie la cheie durata implementarii consta
doar in introducerea aplicatiei in sistemul IT deja existent, fara alte costuri (in timp sau bani)
fiind o solutie la cheie, dezvoltatorii au identificat in prealabil modalitatea in care
ar trebui sa functioneze un departament de suport IT astfel incat aplicatia se muleaza pe necesitatile generale ale clientilor;
fiind vorba de un produs dezvoltat in prealabil, stabilitatea aplicatiei este garantata
fiind testate de firma dezvoltatoare;
interfata ergonomica si ingrijita;
mentenanta este asigurata de firma dezvoltatoare;
Dezavantaje:
costul aplicatiei - fiind o aplicatie la cheie, orice nevoie suplimentara va fi resimtit
in costuri (bani, dar si timp);
in cazul unor avarii aparute in aplicatie, rezolvarea unei astfel de problem
depinde de dezvoltator;
Solutie dezvoltata la cerere de un dezvoltator extern;
S-au identificat parteneri externi carora li s-a cerut o oferta pe baza caietului de sarcini.
Avantaje:
costuri mai mici decat in cazul aplicatiei la cheie;
interfata ergonomica si ingrijita;
mentenanta este asigurata de firma dezvoltatoare;
Dezavantaje:
costuri inca ridicate de dezvoltare si implementare;
timp mai mare de integrare in sistemul informatic din cadrul departamentului de
suport IT (la timpul de implementare se adauga cel de dezvoltare si testare);
in cazul unor avarii aparute in aplicatie, rezolvarea unei astfel de problem
depinde de dezvoltator;
Solutie dezvoltata in cadrul departamentului;
S-a mai analizat si posibilitatea de a dezvolta o astfel de aplicatie in cadrul departamentului. Si dat fiind faptul ca departamentul dispune de resursele umane capabile sa dezvolte acest proiect acesta variant de dezvoltare a softului s-a dovedit a fi solutia optima pentru firma.
Avantaje:
costiile mici de dezvoltare;
aplicatia se va mula exact pe cerintele identificate;
orice avarie aparuta in sistem poate fi rezolvata in cadrul departamentului castigand
astfel timp;
Dezavantaje:
timp mare de integrare;
firma dezvoltatoare specializata poate garanta o interfata ergonomica si ingrijita,
dar si o stabilitatea sporita (datorita experientei in domeniu . );
Uneltele folosite
PHP
PHP este un limbaj de programare. Numele PHP provine din limba engleza si este un acronim recursiv : Php: Hypertext Preprocessor. Folosit initial pentru a produce pagini web dinamice, este folosit pe scara larga in dezvoltarea paginilor si aplicatiilor web
Se foloseste in principal inglobat in codul HTML, dar incepand de la versiunea 4.3.0 se poate folosi si in mod "linie de comanda" (CLI), permitand crearea de aplicatii independente. Este unul din cele mai importante limbaje de programare web open-source si server-side, existand versiuni disponibile pentru majoritatea web serverelor si pentru toate sistemele de operare. Conform statisticilor este instalat pe 20 de milioane de situri web si pe 1 milion de servere web. Este disponibil sub Licenta PHP si Free Software Foundation il considera a fi un software liber.
Initial, limbajul a fost dezvoltat de inventatorul sau, Rasmus Lerdorf. Odata cu cresterea numarului de utilizatori, dezvoltarea a fost preluata de o noua entitate, numita The PHP Group (Grupul PHP).
Istorie Php
PHP a insemnat initial Personal Home Page. PHP a fost inceput in ca o extensie a limbajului server-side Perl, si apoi ca o serie de CGI-uri compilate de catre Rasmus Lerdorf, pentru a genera un curriculum vitae si pentru a urmari numarul de vizitatori ai unui site.
Apoi a evoluat in PHP/FI 2.0, dar proiectul open - source a inceput sa ia amploare dupa ce Zeev Suraski si Andi Gutmans, de la Technion au lansat o noua versiune a interpretorului PHP in vara anului , aceasta versiune primind numele de PHP 3.0.
Tot ei au schimbat si numele in acronimul recursiv de acum, pana atunci PHP fiind cunoscut ca Personal Home Page Tools. Apoi Suraski si Gutmans au rescris baza limbajului, producand astfel si Zend Engine in . In mai a fost lansat PHP 4.0, avand la baza Zend Engine 1.0.
Pe 13 iulie a fost lansat PHP 5, cu Zend Engine II, ce a adus si o orientare obiect mai pronuntata si suportand mai multe caracteristici ale acestui tip de programare.
PHP 5
PHP5 aduce mai multe noutati fata de versiunea 4:
Suport imbunatatit pentru OOP
Introduce extensia PDO - PHP Data Objects, care defineste o modalitate facila si consistenta de accesare a diferitelor baze de date
Imbunatatiri de performanta
Suport imbunatatit pentru MySQL si MSSQL
Suport nativ pentru SQLite
Suport SOAP integrat
Iteratori pentru date
Controlul erorilor prin tratarea de exceptii
La sfarsitul lui 2007 doar versiunea 5.x mai era intretinuta, deoarece in data de 13 iulie (exact la 3 ani dupa lansarea PHP5), PHP Group a anuntat ca PHP4 va fi scos din uz pe 31 decembrie , desi prognozeaza ca anumite upgrade-uri de securitate se vor oferi pana pe 8 august . Dezvoltarea la PHP 6 incepuse deja in decembrie 2007 si urmeaza sa fie oferit odata cu scoaterea din uz a PHP4.
PHP6
PHP 6 are urmatoarea agenda de imbunatatiri si modificari:
imbunatatirea suportului pentru Unicode
retragerea definitiva a unor functii ca register_globals si
magic_quotes, si a variabilelor tip $HTTP_*_VARS
var va fi un alias pentru public, si folosirea lui va ridica o
atentionare E_STRICT.
suport pentru int pe 64 biti.
taguri tip ASP sunt retrase definitiv.
XMLReader, XMLWriter, Fileinfo vor face parte din distributia
principala
urmatoarele pachete au fost scoase din distributia principala:
Freetype1, GD1, mime_magic
functia ereg() nu mai este disponibila
instantierea obiectelor prin referina (& new Obiect()) genereaza o
eroare E_STRICT.
erorile tip E_STRICT sunt incluse in E_ALL.
adaugarea instructinuii gnoto permite salturi la un alt bloc de
comenzi.
namespace, import, si goto devin cuvinte rezervate.
accesarea caracterelor intr-un sir (strang) se face prin operatorul [].
se scoate din uz ( ex: $str[42] functioneaza, $str nu functioneaza)
constantele FILE_BINARY si FILE_TEXT devin disponibile
pentru folosirea in functii de citire/scriere fisiere
foreach va suporta array multi dimensional: foreach($a as $b =>
list($c, $d))
pentru operatorul ternar expresia pentru valoarea true nu mai este
obligatoriu ($a = $s ?: 'b'; // returns $a = $s;)
optiunea safe_mode a fost inlaturata.
operatorul and a fost inlaturat.
functia microtime() returneaza un float.
zend.ze1_compatibility_mode a fost inlaturat.
Popularitate
PHP-ul este unul din cele mai folosite limbaje de programare server-side, conform unui studiu efectuat de Netcraft in aprilie , aparand pe 9 din cele 37 milioane de domenii cercetate in studiu. De asemenea, exista un grafic al cresterii folosirii PHP-ului pe site-ul oficial. Popularitatea de care se bucura acest limbaj de programare se datoreaza urmatoarelor caracteristici :
Familiaritatea : sintaxa limbajului este foarte usoara combinand
sintaxele unora din cele mai populare limbaje Perl sau C
Simplitatea : sintaxa limbajului este destul de libera. Nu este nevoie de
includere de biblioteci sau de directive de compilare, codul PHP inclus intr-un document executandu-se intre marcajele speciale;
Eficienta : PHP-ul se foloseste de mecanisme de alocare a resurselor,
foarte necesare unui mediu multiutilizator, asa cum este web-ul;
Securitate : PHP-ul pune la dispozitia programatorului un set flexibil si
eficient de masuri de siguranta;
Flexibilitate : fiind aparut din necesitatea dezvoltarii web-ului, PHP a
fost modularizat pentru a tine pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Apache IIS Zeus, server, etc.;
Gratuitate : este probabil cea mai importanta caracteristica a PHP-ului.
Dezvoltarea PHP-ului sub licenta open-source a determinat adaptarea rapida a PHP-ului la nevoile web-ului, eficientizarea si securizarea codului.
Utilizare
PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca si C-ul, Perl-ul sau incepand de la versiunea 5 chiar Java, sintaxa limbajului fiind o combinatie a celor trei. Datorita modularitatii sale poate fi folosit si pentru a dezvolta aplicatii de sine statatoare, de exemplu in combinatie cu PHP-GTK sau poate fi folosit ca Perl sau Python in linia de comanda. Probabil una din cele mai importante facilitati ale limbajului este conlucrarea cu majoritatea bazelor de date relationale, de la MySQL si pana la Oracle, trecand prin MS Sql Server PostgreSQL, sau DB2
PHP poate rula pe majoritatea sistemelor de operare, de la UNIX Linux Windows, sau Mac OS X si poate interactiona cu majoritatea serverelor web
Codul dumneavoastra PHP este interpretat de serverul WEB si genereaza un cod HTML care va fi vazut de utilizator (clientului -browserului- fiindu-i transmis numai cod HTML).
Arhitectura tip LAMP a devenit populara in industria web ca modalitate rapida, gratuita si integrata de dezvoltare a aplicatiilor. Alaturi de Linux, Apache si Mysql, PHP reprezinta litera P, desi unori aceasta se refera la Python sau Perl. Linux ocupa rolul de sistem de operare pentru toate celelalte aplicatii, Mysql gestioneaza bazele de date, Apache are rol de server web, iar PHP are rol de interpretator si comunicator intre acestea.
PHP foloseste extensii specifice pentru fisierele sale: .php, .php3, .ph3, .php4, .inc, .phtml. Aceste fisiere sunt interpretate de catre serverul web iar rezultatul este trimis in forma de text sau cod HTML catre browser-ul clientului.
Tipuri de date interne
Boolean - valori logice tip adevarat sau false, similare cu
cele din C++ sau Perl.
Integer - numere intregi (in baza 10, 2 sau 16). Valoarea
maxima depinde de sistem si de tipul de integer. Tipul poate fi 'signed' sau
'unsigned', adica dependent de semnul + sau - sau independent de acestea.
Valorile pentru integer unsigned sunt mai mari decat cele pentru signed. Sistemele pe 32 bits pot crea numere intregi intre -2147483648 si 2147483647
(2^32-1 ). Maximul pentru sisteme pe 64 bits este 9223372036854775807.
Float - cunoscute ca numere reale. Valorile maxime sunt de
asemenea dependente de platforma, in general cu un maxim de ~1.8e308 cu o
precizie de 14 zecimale dupa virgula (formatul 64 bits IEEE).
Strang - siruri de caractere. Inainte de PHP6, un caracter era
echivalent cu un byte. Nu exista limitari pentru lungimea unui sir, in afara
memoriei alocate PHP.
Array - in PHP un array este un tip de data care contine un
grup de elemente. Fiecare element are un indice intern in grup, iar fiecarui
indice ii corespunde o valoare - elementul in sine.
Un astfel de grup poate fi folosit ca o simulare pentru diverse situatii matematice precum vectori, serii, dictionare de elemente, liste ordonate, matrici sau matrici de matrici. Indicii si valorile unui grup pot fi orice tip de data interna PHP (cu exceptii: obiectele, resursele si null nu pot fi indici).
Obiecte - O clasa este o colectie de proprietati si functii
avand o logica comuna. Obiectele sunt instante ale unei clase, in care
proprietatile obiectului primesc valori specifice.
Resurse- aceastea sunt variabile speciale care contin legaturi
cu resurse externe PHP. De exemplu, conexiunea cu o baza de date este o
resursa deschisa si mentinuta cu ajutorul unor functii special definite pentru aceasta munca.
Null- este un tip special de data, care semnifica ca variabila
respectiva nu a fost definita si ca nu are valoare.
Functii
PHP are sute de functii incorporate si alte cateva mii disponibile
prin intermediul extensiilor
Versiunile 5.2 si anterioare
In aceste versiuni functiile nu sunt obiecte de prima clasa. Aceasta inseamna ca functiile nu pot fi create dinamic in timpul executarii programului si ca pot fi chemate doar prin numele dat cand au fost definite. Utilizatorul poate crea functii in orice moment in program. In acest exemplu cuvantul cheie function defineste functia cu numele adauga care primeste un numar de doi parametrii de intrare si returneaza suma acestora.
Versiunile 5.3 si mai noi
PHP are suport pentru functii de rangul intai si pentru functii anonime, precum cele folosite in Javascript
Obiecte
Functionalitati bazice de programare orientata pe obiecte au fost adaugate in PHP 3. In PHP 3 si 4 obiectele erau tratate ca un tip de data bazic, insemnand ca de fiecare data cand o variabila era asignata sau folosita intr-o functie tot obiectul era copiat.
Felul in care obiectele sunt tratate a fost complet rescris in PHP 5 iar acum obiectele sunt referentiale printr-un vector intern si nu dupa valoarea pe care o au.
PHP 5 a introdus metode private si protejate, clase abstracte, constructori si destructori, functionalitati similare cu cele din alte limbaje de programare care folosesc paradigma OOP, precum C++
Sintaxa
Clasicul program hello-world in PHP:
<?php
echo 'Salut lume!';
?>
My SQL
MySQL este un sistem de management de baze de date relationale (RDBMS) care ruleaza ca un server multi-user oferind acces la o serie de baze de date.
Produs de compania suedeza MySQL AB si distribuit sub Licenta Publica Generala GNU
Licenta GNU GPL nu permite incorporarea MySQL in softuri comerciale; cei care doresc sa faca acest lucru pot achizitiona, contra cost, o licenta comerciala de la compania producatoare, MySQL AB.
In multe carti de specialitate este precizat faptul ca MySQL este mult mai usor de invatat si folosit decat multe din aplicatiile de gestiune a bazelor de date, ca exemplu comanda de iesire fiind una simpla si evidenta: "exit" sau "quit".
Pentru a administra bazele de date MySQL se poate folosi modul linie de comanda sau, prin descarcare de pe internet, o interfata grafica: MySQL Administrator si MySQL Query Browser. Un alt instrument de management al acestor baze de date este aplicatia gratuita, scrisa in PHP, phpMyAdmin
Utilizari
MySQL este cel mai popular SGBD open-source la ora actuala, fiind o componenta cheie a stivei LAMP Linux Apache, MySQL, PHP
MySQL este componenta integrata a platformelor LAMP sau WAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicatie web este strans legata de cea a PHP-ului care este adesea combinat cu MySQL si denumit Duo-ul Dinamic
Desi este folosit foarte des impreuna cu limbajul de programare PHP, cu MySQL se pot construi aplicatii in orice limbaj major.
Mai multe site-uri web trafic (inclusiv Flickr, Facebook , Wikipedia , Yahoo (nu pentru cautari), Nokia si YouTube ) folosesc MySQL pentru utilizarea de stocare a datelor de logare si date de utilizator.
Platforma si interfe e
Exista multe scheme API disponibile pentru MySQL ce permit scrierea aplicatiilor in numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip specific API.
O interfata de tip ODBC denumita MyODBC permite altor limbaje de programare ce folosesc aceasta interfata, sa interactioneze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. In sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul carora respectivele limbaje sa poata folosi acest SGBD mult mai usor decat prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.
MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows
Toate limbajele majore de programare cu API-uri specifice limbajului includ biblioteci pentru accesarea bazelor de date MySQL. In plus, o interfa a ODBC numita MyODBC permite limbajului suplimentar de programare care suporta interfa a ODBC pentru a comunica cu o baza de date MySQL, cum ar fi ASP sau ColdFusion. MySQL server si bibliotecile oficiale sunt cel mai adesea puse in aplicare in ANSI C/ANSI C + +.
Desfasurare
MySQL, ajuns momentan la versiunea 4.x (5.x beta) - este recunoscuta ca singura baza de date, open-source, destul de capabila pentru a face fata la proiecte de dimensiuni mici, medii sau mari.
Desi nu la fel de avansata ca Oracle, sau PostgreSQL fiecare versiune noua de MySQL aduce imbunatatiri, prin functii sau facilitati noi.
MySQL este un SGBD, un sistem de gestionare a bazelor de date. Se bazeaza pe limbajul SQL ( Structured Query Language ) care a ajuns sa devina standard pentru orice tip de baza de date relationara.
MySQL este totodata un sistem relational de gestionare a bazelor de date. Aceasta inseamna ca o baza de date stocheaza datele in mai multe tabele separate, mai degraba decat sa stocheze toate datele in acelasi loc (in aceeasi tabela).
Caracteristici
Incepand cu aprilie 2009 , MySQL ofera MySQL 5.1 in doua variante diferite: MySQL Server, care este open source si versiunea Enterprise Server, care este unul comercial. Ei au o baza de cod comun si include urmatoarele caracteristici
un larg subgrup de ANSI SQL 99 , precum si extensii
cross-platform de sprijin
proceduri stocate
declansari
cursoare
vizualizari
True Varchar supor
schema de informatii
Strict mode
X / Open XA distribuite de procesare a tranzactiilor (DTP) de sprijin; doua faze, ca parte a savarsi acest lucru, folosind motorul Oracle InnoDB
motoare independente de stocare (pentru viteza de citire MyISAM, InnoDB pentru tranzactii si integritatea referentiala, MySQL Arhiva pentru stocarea datelor istorice in spatiu mic)
tranzactii cu InnoDB, BDB si motoare Cluster depozitare; savepoints cu InnoDB
SSL support SSL de sprijin
solicitare cache
sub-Selecteaza (adica selecteaza imbricate)
Text intreg indexarea si cautarea utilizand motorul MyISAM
Integrate de baze de date biblioteca
Siruri de caractere Unicode partiala de sprijin (UTF-8 si UCS-2 codificate sunt limitate la BMP)
Partiala ACID conformitate (deplina numai atunci cand se utilizeaza motoarele de stocare non-default InnoDB, BDB si grup)
nimic comun din gruparea MySQL Cluster
MySQL pune in aplicare urmatoarele caracteristici, pe care alte sisteme RDBMS nu pot:
Mai multe motoare de stocare, care sa permita sa se aleaga unul care este cel mai eficient pentru fiecare tabel in cerere (in MySQL 5.0, motoarele de depozitare trebuie sa fie intocmite; in MySQL 5.1, motoare de stocare poate fi incarcate dinamic in timpul de rulare):
o motoare nativ de stocare (MyISAM, Falcon, Merge, Memory (heap), Federated, Archive, CSV, Blackhole, Cluster, Berkeley DB, de exemplu, si Maria)
o motoare pararele de dezvoltate si de stocare (InnoDB, solidDB, NitroEDB, Infobright (fosta Brighthouse), Kickfire, XtraDB, IBM DB2)
o motoare comunitare de dezvoltate si de stocare (motor Memcache, httpd, PBXT, Revizia Engine)
o motoare de depozitare
gruparii, colectare de tranzactii multiple de la mai multe conexiuni pentru a creste numarul ce se angajeaza pe secunda
Catalog de istorie
Momente importante in dezvoltarea MySQL includ:
dezvoltarea initiala a MySQL de Michael Widenius si Axmark David la inceputu lui 1994,
Versiune Windows a fost lansata pe 08 ianuarie 1998 pentru Windows 95 si NT
Versiunea 3.23: beta din iunie 2000, a lansarii productiei ianuarie 2001
Versiunea 4.0: beta din august 2002, a lansarii productiei martie 2003
Versiunea 4.01: beta din august 2003, Jyoti adopta MySQL pentru baze de date de urmarire
Versiunea 4.1: beta din iunie 2004, productia de presa octombrie 2004
Versiunea 5.0: beta din martie 2005 , productia de eliberare octombrie 2005 (cursor, proceduri stocate, triggere, vizualizari, tranzactiile XA)
Dezvoltatorul Federated Storage Engine afirma ca 'The Federated Storage Engine este o dovada a motorului de stocare-concept', dar principalele distributiile ale versiuni MySQL 5.0 este inclusa si transformata in mod implicit
Sun
Microsystems a achizitionat
Versiunea 5.1: a lansarii productiei 27 niembrie 2008 (Scheduler eveniment, partitionare, plug-in API, replicare rand pe baza de tabele de log server)
Oracle a achizitionat Sun Microsystems pe 27 ianuarie 2010. Oracle si Sun
Asistenta de acordare a licentelor
In plus fata de sprijinul produs oficial, alte companii ofera sprijin si servicii legate de utilizarea MySQL. De exemplu, Pythian ofera administrare de baze de date complete, arhitectura, optimizare si servicii de formare profesionala. Percona si servicii 42sql oferta optimizare si Monty Ab ofera programe de inginerie non-recurente, cum ar fi patch-uri pentru MySQL. OpenQuery ofera cursuri de formare MySQL.
Cumparatorii MySQL au acces la software certificate pentru sistemul lor de operare special, precum si acces la actualizari lunare binare cu ultimele bug-fixate. Mai multe nivele de vizitare sunt disponibile, cu diferiti timpi de raspuns si caracteristici variind de la modul in care sprijinul de urgenta prin intermediul server de optimizare a performantelor si consiliere arhitecturii sistemului. Reteaua de monitorizare MySQL instrument de monitorizare si Serviciul de consiliere pentru servere de baze de date este disponibila numai pentru MySQL Enterprise personalizate.
Utilizatorii
potentiali pot instala MySQL Server ca software gratuit sub
GNU-General. Public License (GPL),
precum si abonamentele MySQL
Atat software de tip server MySQL insine si bibliotecile-client folosesc dubla utilizeaza de acordare a licentelor de distributie. Utilizatorii pot alege GPL, MySQL prelungit cu o licenta FLOSS exceptie. Aceasta permite software-ului licentiat sa lucreze pe baza licentelor de alte surse de OSI-conforme deschis, care nu sunt compatibile cu GPL, pentru a lega bibliotecile-client MySQL.
Clientii care nu doresc sa urmeze punctul de vedere al GPL poate achizitiona o licenta de proprietate.
Ca multe programe open-source, MySQL are marca inregistrata numele sau, pe care altii il pot folosi doar cu acordul titularului marcii.
Apache
Apache HTTP Server este un web server pentru sisteme ca si Unix, Microsoft Windows, Novell NetWare si alte sisteme de operare .
Apache este remarcabil pentru ca joaca un rol cheie in cresterea initiala a Internetului din lumea intreaga. Cand a fost pentru prima data eliberat, Apache a fost singura sursa alternativa viabila la Netscape Communications Corporation web server ( in mod current cunoscut ca si Sun Java System Web Server ). De atunci a evoluat la rivalul Unix- servere web in termeni de functionalitate si performanta.
Din Aprilie 1996 Apache a fost cel mai popular server HTTP din intreaga lume a internetului, servind ca platforma de referinta impotriva careia alte server web sunt intentionate si apreciate; ca si in Ianuarie 2007, Apache a servit la 60% din toate website-urile. Apache continua sa fie cel mai popular server web care este utilizat.
Apache este dezvoltat si mentinut de o comunitate deschisa de dezvoltatori de aplicatii sub auspiciile Fundatiei Apache Software . Eliberata sub licenta Apache, serverul Apache HTTP este un program gratis
Istorie si nume.
Prima versiune a web serverului Apache a fost creeata de Ro bert McCool, care a fost serios implicat in Centru National pentru Supercomputing Applications web server, cunoscut simplu ca si NCSA HTTPd . Cand Rob a parasit NCSA la mijlocul anului 1994 a lasat o varietate de modele pentru a imbunatati circulatia prin email. Rob McCool nu a fost singur in eforturile sale.
Multi alti dezvoltatori de aplicatii au ajutat la formarea originalului 'Apache Group': Brian Behlendorf, Roy T. Fielding, Rob Hartill, David Robinson, Cliff Skolnick, Randy Terbush, Robert S. Thau, Andrew Wilson, Eric Hagberg, Frank Peters, si Nicolas Pioch.
FAQ afirma pe site-ul oficial al proiectului: "Numele Apache a fost ales din respect pentru Tribul nativ indian American al apasilor ", bine cunoscut pentru indemanarile superioare in strategia lor si inepuizabila anduranta.
Cea mai raspandita interpretare este aceea ca numele provine din faptul ca atunci cand a aparut la inceputul anului 1995, web serverul a constat intr-un set de patches la codul de baza al NCSA HTTPd 1.3 si de aceea a fost 'a patchy' server .Aceasta a fost explicatia initiala a website-ului acestui proiect.
Versiunea 2 a serverului Apache a fost o rescriere substantiala din codul Apache 1.x, cu o mare concentrare asupra ulterioarei modulatii si dezvoltarea unei retele portabile ,Apache Portable Runtime.
Partea centrala din Apache 2 x are mai multe intensificari majore fata de Apache 1.x . Acestea include filetarea UNIX, suport mai bun pentru platforme non-UNIX , (cum ar fi Microsoft Windows), un nou Apache API, si suport IPv6 .
Prima eliberare a Apache 2 a fost in Martie 2000 cu prima disponibilitate generala in Mai 2002.
Versiunea 2.2 a introdus o autorizatie mai flexibila API. De asemenea, ofera module imbunatatite: memoria cache si modulele proxy
Caracteristici
Apache suporta o varietate de caracteristici, multe puse in aplicare ca compilati, module care extind functionalitatea de baza. Acestea pot varia de la sprijinirea limbajului de programare server-si de la scheme de autentificare.
Unele interfete sunt comune limbajelor Perl, Python, Tcl si PHP. Modulele de autentificare includ mod_access, mod_auth, mod_digest, si mod_auth_digest, succesorul mod_digest. Un esantion de alte caracteristici includ suport pentru SSL si TLS (mod_ssl), un modul de proxy (mod_proxy), o rescriere URL (cunoscut si ca un motor de rescriere mod_rewrite), fisierele particularizate in tip jurnal (mod_log_config), si suport de filtrare (mod_include si mod_ext_filter).
Popular metodele de compresie pe Apache includ modul de extensie extern, mod_gzip, puse in aplicare pentru a ajuta la reducerea dimensiunii de pagini web deservit peste HTTP. ModSecurity este o deschidere sursa Intrusion Detection si motorul de prevenire pentru aplicatii web. Jurnalele Apache pot fi analizate prin intermediul unui browser web, folosind scripturi gratuite, cum ar fi AWStats/W3Perl.
Ma ina virtuala permite sa se instalare Apache pentru a servi mai multe site-uri diferite reale. De exemplu, o masina virtuala cu o singura instalare Apache, ar putea servi simultan www.example.com, www.test.com, test47.test-server.test.com, etc
Utilizare
Apache este utilizat in principal pentru a servi atat continutului static si pagini Web dinamice pe World Wide Web. Multe aplicatii web sunt conceputeexact pentru a folosii mediul si caracteristicile care le ofera Apache.
Apache este
redistribuit, ca parte a diferitelor pachete de software inclusiv baza de date
Oracle si IBM WebSphere Application server. Mac OS X integreaza
Apache ca si built-in server de web si ca suport pentru server,
aplicarea sa fiind WebObjects. De asemenea, este sustinuta de
catre Borland in Kylix si instrumentele de dezvoltare
Apache este folosit pentru multe alte activitati in cazul in care continutul trebuie sa fie pus la dispozitie intr-un mod sigur si fiabil. Un exemplu este schimbul de fisiere de pe un calculator personal pe internet. Un utilizator care are Apache instalat pe desktop-ul sau poate pune fisierele arbitrar in document root Apache care pot fi accesate apoi in comun.
Programatorii dezvoltatori de aplicatii web folosesc adesea o versiune instalata local de Apache pentru a previzualiza si Cod text care este in curs de dezvoltare.
Microsoft Internet Information Services (IIS) este principalul concurent la Apache, urmat de Sun Microsystems Sun Java System Web Server si o serie de alte aplicatii, cum ar fi Zeus Web Server.
Performanta
Desi obiectivul principal al proiectului Apache nu este de a fi cel mai rapid server de web, Apache are performante comparabile cu alte 'servere de inalta performanta', servere de web. In loc de a punere in aplicare o arhitectura unica, Apache ofera o varietate de multiprocesare Module (MPMs), care permit a rula intr-un proces bazat pe procesul de hibride sau modul de eveniment-hibrid, pentru a se potrivi mai bine cerintele speciale a infrastructurilor.
Aceasta implica faptul ca alegerea MPM corecte si configurarea corecta este importanta. In cazul in care compromisuri de performanta trebuie sa fie facute, designul de Apache este de a reduce latenta si cresterea throughput, fata de manipulare, pur si simplu mai multe cereri, asigurandu-se astfel o prelucrare coerenta si fiabila de solicitari in termeni rezonabili.
Licenta
Licentele software in care software-ul de la Fundatia Apache este distribuit este o parte a istoriei distinctiv Apache HTTP Server si prezenta in cadrul comunitatii open source. Licenta Apache permite distribuirea de deschidere si inchidere derivatiilor sursa a codului sursa.
Free Software Foundation nu considera licenta Apache pentru a fi compatibila cu versiunea 2 a GNU General Public License (GPL) in care software-ului licentiat sub licenta Apache nu poate fi integrat cu software-ul care este distribuit sub GPL. Cu toate acestea, versiunea 3 a GPL include o dispozitie (sectiunea 7e), care ii permite sa fie compatibile cu licentele care au clauze de brevet de represalii, inclusiv licenta Apache
Proiectarea softului
Rolul softului
Rolul comunicarii este vital in preintampinarea tensiunilor si conflictelor interne intr-o firma.
Pentru departamentul tehnic IT al unei organizatii, indiferent ca este numeros sau redus, definirea unei organigrame corecte reprezinta un proces complex si dificil. Realizarea lui defectuoasa are implicatii in desfasurarea si chiar sustinerea activitatii companiei.
Departamentul tehnic IT are cerinte specifice, iar analizarea acestor nevoi necesita o intelegere clara si o anticipare a activitatii IT, capacitati de care personalul departamentului Resurse Umane nu dispune.
Construirea unei organigrame corecte este dependenta de o analiza specializata a activitatii IT a organizatiei, prin care sa se releve anumiti factori ce vor impune structura departamentului TSO.
Pentru a se intelege acesti factori, sunt necesare:
examinarea activitatilor IT din cadrul organizatiei
investigarea tehnicii de calcul si a softurilor utilizate
calcularea estimativa a volumului de munca.
identificarea activitatilor care necesita personal - cheie specializat.
interviul personalului tehnic
studierea exigentelor privind calificarile necesare
crearea unei ierarhii decizionale clara
desemnarea responsabilitatilor
Departamentul IT trebuie sa tina la un loc toate informatiile detinute de firma, astfel incat sa fie disponibile in orice moment in timp util, sa ofere rapoarte permanente conducerii, privitoare la activitatea si situatia firmei, sa asigure permanent toate serviciile informatice posibile si chiar sa creeze unele noi, sa mentina in stare optima de functionare toata tehnica de calcul utilizata de firma, sa gaseasca, obtina si organizeze toate informatiile care sunt sau ar putea fi utile firmei la un moment dat.
De asemenea, trebuie sa pastreze integritatea bazei de date si
securitatea datelor, sa pastreze un echilibru optim intre calitatea tehnicii de
calcul detinuta de firma si pretul acesteia, prin utilizarea la maxim a sistemului informatic existent si rezolvarea intr-un timp cat mai scurt a tuturor sincopelor aparute in folosirea acestuia.
Acest sistem are rolul hotarator in crearea unei imagini de ansamblu
asupra starii firmei, asupra posibilitatilor sau oportunitatilor existente precum
si suportul logistic necesar deciziilor conducerii in ceea ce priveste directiile de
actiune sau de dezvoltare.
Baza de date
Pentru realizarea aplicatiei este nevoie de crearea unei baze de date.
Modelarea bazei de date are in vedere in primul rand definirea entitatilor, interventii (incidentele IT ce pot aparea in cadrul unei firme, interventii deschise) si istoric interventii (interventii rezolvate, inchise).
Trebuie stabilite ce informatii sunt necesare pentru fiecare dintre aceste entitati si prin ce anume se identifica in mod unic o inregistrare.
O interventie trebuie introdusa de un utilizator, apare in cadrul unui departament (divizie), are asociata o descriere, o data si ora de introducere si trebuie incadrata intr-o categorie de probleme (incidente). O inregistrare va fi identificata in mod unic prin ID. in consecinta, o inregistrare din tabela INTERVENTII ar trebui sa aiba urmatoarele campuri: ID, problema, datastart, orastart, divizie, user si o descriere.
Tabelele bazei de date
De exemplu, am putea avea o tabela cu urmatoarele inregistrari:
Tabela INTERVENTII
ID |
Problema |
Datastart |
Orastart |
Divizie |
User |
Descriere |
Internet |
Accounting |
User1 |
Nu merge internetul la Elena de la Contabilitate |
|||
Hardware PC |
Accounting |
User1 |
Hard disk-ul Monei a inceput sa scoata zgomote ciudate |
|||
Software servere |
Bravo |
User3 |
Nu mai este loc pe serverul de fi iere de la Reviste |
Tabela numarul 1
Coloana Divizie este de tip VARCHAR, deci stringul "Accounting" ocupa 10 octeti in memorie.
In exemplul de mai sus avem doua inregistrari de incidente care sunt asociate diviziei Accounting (Contabilitate), deci memoria ocupata de coloana Divizie pentru aceste doua inregistrari va fi de 20 octesi. Daca modelam divizia printr-o tabela separata, care sa contina un identificator unic (de tip INT) pentru fiecare divizie si denumirea efectiva a starii asociata acestui identificator (de tip VARCHAR), Denumire, vom avea tabela:
Tabela DIVIZII
ID |
Denumire |
ID |
Denumire |
IT |
Advertising Magazines |
||
Administration |
Marketing Magazines |
||
CFO |
Publishing Magazines |
||
Analyses/Controlling |
Advertising Newspapers |
||
Accounting |
Marketing Newspapers |
||
Subscription |
Publishing Newspapers |
||
General Management |
Evenimentul Zilei |
||
Legal |
Evenimentul Zilei Sunday |
||
HR |
Evenimentul Zilei Friday |
||
Marketing Infra Ringier |
Metrobus |
||
Distribution |
Advertising Expres |
||
Capital |
Marketing Expres |
||
Libertatea |
Publishing Expres |
||
Prosport |
Tipografie |
||
Lumea Femeilor |
PR |
||
TvMania |
Libertatea pentru femei |
||
TvSatelit |
Protectia Muncii |
||
Unica |
Depozit |
||
Bolero |
Volanti |
||
Bravo |
Crush |
||
BravoGirl |
E-Media |
||
Web Ringier |
Tabela numarul 2
In tabela DIVIZII, in acest moment, memoria ocupata s-a redus de la 10 octesi ocupasi de stringul "Romania" la 4 octesi ocupasi de valoarea intreaga "1", deci de la 20 de octesi, la 8 octesi.
Din acelasi motiv se vor modela si alte doua tabele: probleme (tabela cu categoriile de probleme standard - tabela ce va fi folosita mai apoi si pentru rapoarte si grafice; de aceea apare un nou camp: dificultate; si users (tabela users va fi completata si cu alte informatii utile: nume, prenume, adresa e-mail, username si parola). Astfel
Tabela PROBLEME
ID |
Denumire |
Dificultate |
Internet | ||
Centrala telefonica | ||
Curent / Genereator | ||
Hardware PC | ||
Hardware MAC | ||
Hardware Servere | ||
Software PC | ||
Software MAC | ||
Software Servere | ||
Network active | ||
Imprimante | ||
Telefoane | ||
Alte echipamente | ||
Site | ||
| ||
Laptop-uri/Carduri | ||
Service/Garantii | ||
Network pasive | ||
Fonturi | ||
Legitimatii | ||
Inventare/Hartii |
Tabela numarul 3
Tabela USERS
ID |
Nume |
Prenume |
Username |
Password |
|
nume 1 |
prenume 1 |
user1 |
pass1 |
nume.prenume1@ringier.ro |
|
nume 2 |
prenume 2 |
user2 |
pass2 |
nume.prenume2@ringier.ro |
|
nume 3 |
prenume 3 |
user3 |
pass3 |
nume.prenume3@ringier.ro |
|
nume 4 |
prenume 4 |
user4 |
pass4 |
nume.prenume4@ringier.ro |
Tabela numarul 4
Tabela INTERVENTII
Astfel, avand in acelasi timp in vedere si nevoia de alte informatii aditionale (interiorul telefonului de la care a fost facuta sesizarea cat si numele persoanei in cauza), dorinta de a putea asigna o interventie unui anumit user inca de la introducerea sa, dar si dorinta de a modifica eventuale modificari ale detaliilor interventiei, tabela devine:
ID |
IDproblema |
Datastart |
Orastart |
IDdivizie |
Interior |
Nume |
Descriereproblema |
IDuser |
Iduserrecomandat |
IDuseredit |
Elena |
Nu merge internetul . | |||||||||
Mona |
Hard disk-ul Monei . | |||||||||
|
Oxy |
Nu mai este loc pe . |
Tabela numarul 5
De aici rezulta tabelele DIVIZII, PROBLEME, USERS si INTERVENTII cu urmatoarea structura:
Tabela numarul 6
Dupa rezolvarea incidentului respectiv, interventia este trecuta in istoricul de interventii prin completarea unor noi campuri, iar tabela ISTORICINTERVENTII devine:
Tabela ISTORICINTERVENTII
ID |
IDproblema |
Datastart |
Orastart |
Datastop |
Orastop |
IDdivizie |
Interior |
Nume |
Descriereproblema |
Oxy |
Nu mai este loc . |
||||||||
Vina |
Dificultate |
Alte mentiuni |
IDuser1 |
IDuser2 |
IDuseredit |
Zile |
|
Minute |
Descriererezolvare |
Le-am si arhivat |
Am mutat niste log-uri . |
Tabela numarul 7
Workflow-ul unui departament IT nu permite introducerea de fiecare data a unui incident, ci, pentru a se castiga timp, se doreste introducerea incidentului impreuna cu rezolvarea sa.
Nevoia de a putea identifica o interventie in mod unic, indiferent daca interventia respectiva a dus si la rezolvarea incidentului sau nu, a dus la crearea unei noi tabele ce unifica cele doua tabele prin introducerea incidentelor si intr-o tabela separata al carei ID va reprezenta identificatorul unic.
Acest identificator ajuta in cadrul departamentului IT la referirea in mod unic la un anumit incident, atat pentru a se putea cere ajutorul unor colegi, cat mai ales pentru accesarea interventiei respective ca baza de cunostinte ulterioare (acesta fiind rolul principal al acestei tabele).
Tabela Problemeunice
ID |
IDinterventie |
Tip |
Tabela numarul 8
IDinterventie reprezinta ID-ul interventiei fie din tabela INTERVENTII, fie din tabela ISTORICINTERVENTII, iar Tip este codificarea tabelei respective (tip = 1 pentru tabela ISTORICINTERVENTII, respective tip = 2 pentru tabela INTERVENTII).
Structura bazei de date devine:
Tabela numarul 9
In cazul in care un user are nevoie de asistenta in timpul rezolvarii unui incident sau daca un alt user doreste sa-si ajute colegul ce se ocupa de o interventie, se poate da o indicatie legata de incidentul respectiv.
Tabela INDICATII
ID |
IDproblema |
userID |
Data |
Text |
Fa-i un back-up inainte. |
Tabela 10
Din motive de securitate, dar si din dorinta de a se putea sterge eventuale interventii introduse gresit (cu sau fara rezolvare), s-au mai creat doua tabele pentru istoricul interventiilor sterse (practic con in aceleasi campuri ca si tabelele INTERVENTII si ISTORICINTERVENTII, adaugandu-se in plus id-ul user-ului care a efectuat aceasta stergere: tabelele INTERVENTIISTERSE si ISTORICINTERVENTIISTERSE.
Tabela INTERVENTIISTERSE
ID |
IDproblema |
Datastart |
Orastart |
IDdivizie |
Interior |
Nume |
Descriereproblema |
IDuser |
IDuserrecomandat |
Iduseredit |
IDuserdel |
Elena |
Nu merge internetul la Elena de la Contabilitate |
Tabela 11
De asemenea, in timpul dezvoltarii proiectului, aplicatia a fost lansata in productie inainte de a fi in forma sa finala. Pentru a aduce imbunatatiri aplicatiei si pentru a rezolva eventuale greseli s-a creat o ultima tabela.
Tabela WISHLIST
ID |
userID |
Text |
Stare |
Data |
De terminat tabela de sugestii si reclamatii | ||||
sa se bage informatii despre societati pe site | ||||
pentru tipul data sa fie ceva mai usor poate un calendar!?!?! | ||||
de creat Productie ca si sectiune |
Tabela 12
Structura completa a bazei de date este:
Tabela 13
Descrierea tabelelor
Tabela PROBLEME
Tabela are 3 coloane: ID (cheia primara a tabelei; are auto incrementare), Denumire (numele efectiv al categoriei de probleme) si Dificultate (un grad de dificultate al categoriei respective folosit la raportare; se va explica ulterior cum se foloseste) - reprezinta nomenclatorul de probleme identificate de departamentul IT.
Tabela DIVIZII
Tabela are 2 coloane: ID (cheia primara a tabelei; are auto incrementare), Denumire (numele efectiv al diviziei) - reprezinta nomenclatorul de divizii din cadrul firmei.
Tabela USERS
Tabela are 6 coloane: ID (cheia primara a tabelei; are auto incrementare), Nume, Prenume, Username, Password si Email (denumire sunt sugestive) - reprezinta lista cu utilizatorii aplicatiei, tehnicieni din departamentul IT.
Tabela INTERVENTII
Tabela are 11 coloane: ID (cheia primara a tabelei; are auto incrementare), ITproblema (cheie externa din tabela PROBLEME ce reprezinta categoria de probleme pentru interventia respective), IDdivizie (cheie externa pentru tabela DIVIZII), Datastart, Orastart (ambele sunt folosite pentru a identifica momentul de timp cand este introdusa interventia; nu se foloseste o singura intrare de timp DATETIME pentru ca s-a dorit o mai usoara folosire ulterioara pentru sortari si rapoarte), Interior, Nume (ambele sunt folosite pentru identificarea utilizatorului de echipament IT din cadrul firmei care a semnalizat incidental), Descrierea problemei (pentru o descriere amanuntita a incidentului), IDuser (cheie externa din tabela USERS ce retine user-ul aplicatiei care a facut introducerea interventiei), IDuserrecomandat (cheie externa din tabela USERS ce retine user-ul ce se recomanda a rezolva incidental) si IDuseredit (cheie externa din tabela USERS ce retine user-ul ce a facut ultima editare a interventiei) - reprezinta lista cu incidente ce se doresc a fi rezolvate.
Tabela ISTORICINTERVENTII
Tabela are 20 coloane: cele 11 corespunzatoare celor 11 din tabela INTERVENTII (IDuser1 reprezinta aici user-ul ce a introdus problema , iar iduser2 reprezinta user-ul ce a rezolvat incidental), Descrierea rezolvarii (descrierea amanuntita a modului in care s-a efectuat interventia), Altementiuni (detalii suplimentare a interventiei, detalii ce nu au legatura cu rezolvarea propriu-zisa a problemei), Datastop, Orastop (momentul in care s-a incheiat interventia), Zile, Ore, Minute (numarul de zile, ore si minute a duratei propriu-zise a interventiei, aceasta nefiind neaparat diferenta dintre momentul de stop si de start a interventiei; se foloseste la rapoarte in vederea compararii cu SLA-ul departamentului IT), Dificultate (dificultatea estimata de tehnicianul IT ce s-a ocupat de rezolvarea incidentului: mica, normala, mare; se foloseste la rapoartare), Vina (vina estimata de tehnicianul IT pentru interventia respective: echipamentul hardware, aplicatia software, un furnizor, departamentul IT sau utilizatorul echipamentului IT; se foloseste la rapoartele) - reprezinta lista cu interventiile efectuate (cu tot cu rezolvare).
Tabela PROBLEMEUNICE
Tabela are 3 coloane: ID (cheia primara a tabelei; are auto incrementare), IDinterventie (cheie externa fie din tabela INTERVENTII, fie din tabela ISTORICINTERVENTII in functie de tabela in care s-a facut introducerea interventiei sursa), tip (codificarea interna a tabelei in care s-a facut introducerea interventiei sursa: tip = 1 pentru tabela ISTORICINTERVENTII si tip =2 pentru tabela INTERVENTII) - reprezinta tabela ce unifica cele doua tabele de interventii (deschise sau inchise) pentru identificarea cu un numar unic a unui incident.
Tabela INTERVENTIISTERSE
Tabela are 12 coloane: cele 11 din tabela INTERVENTII sursa, IDuserdel (cheie externa a tabelei USERS ce retine user-ul ce a sters interventia respectiva) - reprezinta lista cu interventiile deschise care au fost sterse.
Tabela ISTORICINTERVENTIISTERSE
Tabela are 12 coloane: cele 11 din tabela ISTORICINTERVENTII sursa, IDuserdel (cheie externa a tabelei USERS ce retine user-ul ce a sters interventia respsectiva) - reprezinta lista cu interventiile deschise care au fost sterse.
Tabela INDICATII
Tabela are 5 coloane: ID (cheia primara a tabelei; are auto incrementare), IDproblema (cheie externa din tabela PROBLEMEUNICE ce codifica interventia pentru care s-a acut indicatia), userID (cheie externa din tabela USERS ce codifica user-ul ce a dat indicatia), Data (momentul - de tip DATETIME - in care s-a facut indicatia), Text (indicatia propriu-zisa) - reprezinta lista cu indicatiile date de colegi user-ului (tehnicianului IT) ce se ocupa de o anumita interventie.
Tabela WISHLIST
Tabela are 5 coloane: : ID (cheia primara a tabelei; are auto incrementare), userID (cheie externa din tabela USERS ce codifica user-ul ce a lansat propunerea), Data (momentul - de tip DATETIME - in care s-a facut propunerea), Text (propunerea propriu-zisa), Starea (codificarea interna pentru starea in care se afla propunerea: 0 - in asteptare, 1 - aprobata, 2 - rezolvata, 3 - respinsa) - reprezinta lista cu propuneri pentru imbunatatirea sau corectarea aplicatiei.
Interfata grafica
Acest soft a fost creat pentru a ajuta la desfasurarea activitatii departamentului IT, atat la resursele hardware cat si software, in functie de utilizarea acestora de catre angajati firmei. Astfel, dupa introducerea datelor in baza de date angajatii departamentului IT raspund la solicitari intr-un timp mult mai scurt si astfel se asigura rezolvarea tuturor problemelor aparute
Inainte de a continua cu prezentarea pe larg a softului trebuie facuta o mica descriere a unui fisier care este folosit de toate paginile si anume bd.php, un fisier in care face o indexare a tebelelor din baza.
Acest fisier este folosit pentru a defini constantele aplicatiei si este inclus prin comanda include('bd.php') in toate fisierele php ale aplicatiei. Elementele definite aici sunt:
<?php
// ip-ul masinii pe care se afla baza de date (in cazul de fata, baza de date este stocata local);
$mysql_host='127.0.0.1';
// credentialele folosite pentru conectarea la baza de date;
$mysql_user='root';
$mysql_pass=''
// denumirea bazei de date;;
$baza='itaffairs';
// denumirile tutuor tabelelor din baza de date
$tabela1 = 'users';
$tabela2 = 'probleme';
$tabela3 = 'divizii';
$tabela4 = 'istoricinterventii';
$tabela5 = 'interventii';
$tabela6 = 'wishlist';
$tabela7 = 'indicatii';
$tabela8 = 'problemeunice';
$tabela9 = 'istoricinterventiisterse';
$tabela10 = 'interventiisterse';
/* numarul de intrari ce vor fi afisate pe o pagina in listele de probleme rezolvate, dar si nerezolvate */
$liniipepagina = 18;
/* dimensiunile graficelor de tip radar, precum si pasul cu care se va executa desenarea graficului */
$dimx = 900;
$dimy = 600;
$pas = 10;
?>
Acest fisier ofera posibilitatea de a muta baza de date, schimba denumirea tabelelor din baza de date, schimbarea dimensiunilor graficelor, etc.
De asemenea vom prezenta si o harta a aplicatiei, aici se poate vedea foarte ufor cum se poate trece de la o pagina la alta.
Aplicatia are o interfata grafica simpla, facilitand navigarea in meniuri, dorindu-se eficientizarea din punct de vedere al timpului de completarea a campurilor necesare.
Prin accesarea adresei la care se gaseste site-ul (de exemplu, https://localhost/internalaffairs), utilizatorul va putea vizualiza prima pagina, care contine o pagina formata din doua frame-uri (top si bottom), in frame-ul de sus aflandu-se form-ul de login. Pentru a avea acces la aceasta interfata va trebui sa completati informatiile cerute de formularul de logare.
Figura numarul 3. Logarea userului
Astfel fiecare angajat al departamentului IT detine un cont, foloseste un username si o parola proprie pentru a se loga si pentru a introduce toate problemele ce trebuie rezolvate.
Din motive de securitate, la logare se seteaza cookie-uri pentru username si parola:
setcookie('user' , $user);
setcookie('pass' , $pass);
, iar la accesarea paginilor ulterioare se va testa daca user-ul este autentificat sau nu:
$user = $_COOKIE['user'] or die('Nu ai acces la pagina asta te rog sa te loghezi');
$pass = $_COOKIE['pass'] or die('Nu ai acces la pagina asta te rog sa te loghezi');
Dupa logare, se acceseaza meniul principal care este alcatuit din urmatoarele submeniuri:
Adrese utile
Introducerea problemelor de rezolvat
Probleme nerezolvate
Introducerea problemelor rezolvate
Istoric interventi
Rapoarte, grafice
Wish list
Resurse
Logout
Figura numarul 4. Meniul principal al aplicatiei
Acest meniu permite utilizatorului sa introduca o problema ce trebuie rezolvata, completandu-se urmatoarele campuri:
tipul problemei conform nomenclatorului de probleme standard: internet,
centrala telefonica, curent generator, hardware PC, hardware MAC, hardware servere, software PC, software MAC, software servere, network active, imprimante, telefoane, alte echipamente, site, mail, laptopuri/carduri, service/garantii network passive, fonturi, legitimatii, inventare/harti;
data reclamatiei, ora reclamatiei;
descrierea amanutita a problemei asa cum a fost ea semnalata de utilizator;
divizia in cadrul careia a aparut sesizarea: accounting, administration,
advertising expres, advertising magazines, advertising newspaper, analyses/controlling, Bolero, Bravo, Bravo Girl, Capital, CFO, Crush, deposit, distribution, E-Media, Evenimentul Zilei, Evenimentul Zilei Friday, Evenimentul Zilei Sunday, general management, HR, IT, legal, Libertatea, Libertatea pentru femei, Lumea femeilor, marketing expres, marketing infra ringier, marketing magazines, marketing newspapers, metrobus, PR, Prosport, protectia muncii, publishing expres, publishing magazines publishing newspapers, subscription, tipografie, TvMania, TvSatelit, Unica, Volanti, web Ringier - de corectat denumirea diviziilor;
interiorul solicitantului, numele solicitantului
un user (tehnician) recomandat conform specializarii fiecaruia;
Figura numarul 5. Meniul introducerii problema de rezolvat.
Campurile sunt organizate intr-un form alcatuit dintr-un tabel si cele doua butoane specifice submit ('Salveaza') si cancel. Tipul problemei este reprezentat de un camp de tip select populat cu datele din tabela PROBLEME. La fel si divizia (camp de tip select populat cu datele din tabela DIVIZII) si user-ul recomandat (camp de tip select populat cu datele din tabela USERS). Data si ora reclamatiei sunt campuri text care au valoarea default al datei si orei curente. Restul de campuri (Descrierea problemei, Interior si nume solicitant) sunt campuri text fara valori default:
echo '<form action='introduinterventie.php' method='post'>';
echo '<table border = '1'>';
echo '<tr><td><font șize = '4'> Problema</font>     <select name = 'problema'>';
$string = 'select * from $tabela2';
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
while ($i < $n)
echo '</select></td></tr>';
$today = getdate();
$min = $today['minutes'];
$dim = strlen($min);
if ($dim == 1)
else
$ziua = '%s-%s-%s';
$ziua = sprintf($ziua , $today['mday'] , $today['mon'] , $today['year']);
echo '<tr><td><table border = '1'>';
echo '<tr><td>Data recalamtiei</td><td><input type = 'text' name = 'data1' value = '$ziua'></td></tr>';
echo '<tr><td>Ora reclamatiei</td><td><input type = 'text' name = 'ora1' value = '$ora'></td></tr>';
echo '<tr><td>Descriere problema</td><td><textarea cols = 40 rows = 5 name = 'descp'></textarea></td></tr>';
echo '<tr><td>Divizii</td><td><select name = 'divizie'>';
$string = 'select * from $tabela3 order by denumire';
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
while ($i < $n)
echo '</select></td></tr>';
echo '<tr><td>Interior solicitant  <input type = 'text' name = 'interior'></td><td>Nume solicitant  <input type = 'text' name = 'nume'></td</tr>';
echo '<tr><td>Recomanda un user  <select name = 'userrecomandat'>';
$string = 'select * from $tabela1';
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
echo '<option> </option>';
while ($i < $n)
echo '</select></td><td>$nbsp</td></tr>';
echo '</table></td>';
echo '<tr><td><center><input type = 'submit' value = 'Salveaza'>    ';
echo '<input type = 'button' value = 'Cancel' onclick = 'javascript:reset()'></center></td></tr>';
echo '</table></form>';
La apasarea butonului Cancel toate campurile vor reveni la valorile default. La apasarea butonului Salveaza datele form-ului vor fi trimise (prin POST) catre pagina introduinterventie.php.
Pagina "introducere probleme rezolvate"
Acest meniu permite utilizatorului sa introduca o problema rezolvata deja, completandu-se, alaturi de campurile de la "meniul introducere probleme de rezolvat" se mai completeaza urmatoarele campuri:
sursa problemei, clasa in care se incadreaza problema (hardware - problema a aparut din cauza defectarii s-au functionarii gresite a unui echipament hardware, software - problema a aparut din cauza defectarii s-au functionarii gresite a unei aplicatii software, tehnica - problema a aparut din cauza unor erori ale departamentului de suport IT, user - problema a aparut din cauza unei erori de utilizare a echipamentelor IT, furnizor - problema a aparut din cauza unui partener cu care lucreaza departamentul IT);
dificultate, este estimata (mica, medie, mare) de tehnician dupa rezolvarea problemei;
data rezolvarii, ora rezolvarii;
descrierea amanutita a modului in care s-a rezolvat interventia;
alte mentiuni, detalii suplimentare ale interventiei, detalii ce nu au legatura cu rezolvarea propriu-zisa a problemei
In plus fata de pagina "introducere probleme de rezolvat" aici campurile sunt organizate intr-un form alcatuit din doua tabele si cele doua butoane specifice submit ('Salveaza') si cancel. Divizia (camp de tip select populat cu datele din tabela DIVIZII) si user-ul recomandat (camp de tip select populat cu datele din tabela USERS). Data si ora reclamatiei sunt campuri text care au valoarea default al datei si orei curente. Restul de campuri (Descrierea problemei, Descrierea rezolvarii, Alte mentiuni ) sunt campuri text fara valori default:
Figura numarul 7. Meniul introducerii probleme rezolvat
<html>
<body>
<?php
include('bd.php');
$conn = mysql_connect($mysql_host , $mysql_user , $mysql_pass) or die('Nu s-a putut face conexiunea la baza de date');
mysql_select_db('$baza') or die('Nu s-a putut selecta baza');
$user = $_COOKIE['user'] or die('Nu ai acces la pagina asta te rog sa va loghezi');
$pass = $_COOKIE['pass'] or die('Nu ai acces la pagina asta te rog sa te loghezi');
echo '<form action='introduinterventie.php' method='post'>';
echo '<table border = '1'>';
echo '<tr><td><font size = '4'>Problema</font>   <select name = 'problema'>';
$string = 'select * from $tabela2';
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
while ($i < $n)
echo '</select></td><td><font size = '4'>Dificultate</font>   ';
echo '<input type = 'radio' name = 'dificultate' value = '0' checked = 'true'>mica';
echo '<input type = 'radio' name = 'dificultate' value = '1'>medie';
echo '<input type = 'radio' name = 'dificultate' value = '2'>mare';
echo '</td></tr>';
$today = getdate();
$min = $today['minutes'];
$dim = strlen($min);
if ($dim == 1)
else
$ziua = '%s-%s-%s';
$ziua = sprintf($ziua , $today['mday'] , $today['mon'] , $today['year']);
echo '<tr><td><table border = '1'>';
echo '<tr><td>Data recalamtiei</td><td><input type = 'text' name = 'data1' value = '$ziua'></td></tr>';
echo '<tr><td>Ora reclamatiei</td><td><input type = 'text' name = 'ora1' value = '$ora'></td></tr>';
echo '<tr><td>Descriere problema</td><td><textarea cols = 40 rows = 5 name = 'descp'></textarea></td></tr>';
echo '<tr><td>Divizii</td><td><select name = 'divizie'>';
$string = 'select * from $tabela3 order by denumire';
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
while ($i < $n)
echo '</select></td></tr>';
echo '<tr><td>Interior solicitant  <input type = 'text' name = 'interior'></td><td>Nume solicitant  <input type = 'text' name = 'nume'></td>';
echo '<tr><td>Problema</td> <td><input type = 'checkbox' name = 'check1' checked = on>hardware';
echo '<input type = 'checkbox' name = 'check2' >software';
echo '<input type = 'checkbox' name = 'check3' >tehnica';
echo '<input type = 'checkbox' name = 'check4' >user';
echo '<input type = 'checkbox' name = 'check5' >furnizor </td></tr>';
echo '</table></td>';
echo '<td><table border = '1'>';
echo '<tr><td>Data rezolvarii</td><td><input type = 'text' name = 'data2' value = '$ziua'></td></tr>';
echo '<tr><td>Ora rezolvarii</td><td><input type = 'text' name = 'ora2' value = '$ora'></td></tr>';
echo '<tr><td>Durata rezolvarii   <input size = 3 type = 'text' name = 'durata1'>';
echo '<select name = 'masura1'><option>ore</option><option>zile</option></td>';
echo '<td>si   <input size = 3 type = 'text' name = 'durata2'>';
echo '<select name = 'masura2'><option>minute</option><option>ore</option></td>';
echo '<tr><td>Descriere rezolvarii</td><td><textarea cols = 40 rows = 5 name = 'descr'></textarea></td></tr>';
echo '<tr><td>Alte Mentiuni</td><td><textarea cols = 40 rows = 3 name = 'ment'></textarea></td></tr>';
echo '</table></td></tr>';
echo '<tr><td><center><input type = 'submit' value = 'Salveaza'></center></td>';
echo '<td><center><input type = 'button' value = 'Cancel' onclick = 'javascript:reset()'></center></td></tr>';
echo '</table></form>';
Pagina "probleme nerezolvate"
Pagina "probleme nerezolvate" afiseaza tehnicianului lista problemelor nerezolvate, permite tehnicianului sa introduca o rezolvare la problemele cu statusul "probleme de rezolvat".
Figura numarul . Meniul introducerii probleme nerezolvate
Pagina contine urmatoarele campuri:
numarul, ID ul problemei;
data si ora introducerii problemei;
tipul problemei, selectat de tehnician din lista de probleme;
descrierea, o explicatie data de utilizator tehnicianului despre problema aparuta;
tehnicianul recomandat, sa rezolve problema;
detalii, este un form asemanator cu cel de la "Introducere problem rezolvate" contine la randul lui mai multe submeniuri, care la randul lor descriu tipul si numarul problemei, dificultatea (mica, medie, mare), data si ora reclamatiei, userul ce a introdus problema, recomandare catre ce user, data rezolvarii, ora rezolvarii, durata rezolvarii in ore si minute, descrierea problemei, descrierea rezolvarii problemei, divizie, interior solicitant, nume solicitant, numele userului care a facut ultima editare, alte mentiuni, tipul problemei (hardware, software, tehnica, user, furnizor), precum si campurile editare, salvare si cancel;
indicatiile date de tehnicianul care a semnalat problema, indicatii menite sa usureze rezolvarea problemei;
sterge, are rolul de a sterge tichetul din lista tichetelor spre rezolvare.
Campurile sunt formate din cate un form pentru fiecare problema, organizate intr-un tabel, iar butonul submit este accesat atunci cand de apasa "detalii" si se va incarca pagina "interventiidetalii.php". La apasarea butonului "indicatie noua" se va incarca pagina indicatii.php respectiv, la apasarea butonului "sterge" va fi stearsa problema cu id-ul "ID" din tabelele "interventii" si "probleme unice" si va fi mutata in tabela "interventiisterse". Cele doua butoane transmit informatiile folosind java script.
<script language = 'javascript'>
function indicatii(id)
function sterge(id)
</script>
Dupa apasarea butonului "detalii" avem un nou form creat in pagina "interventiidetalii.php", form alcatuit tot dintr-un tabel in care tehnicianul poate sa completeze descrierea rezolvarii problemei, dificultatea ei si de asemenea cauza problemei. Toate datele introduse sunt memorate in tabela "istoricinterventii".
Figura numarul 4. Continutul campului detalii din meniul introducerii probleme nerezolvate.
Pagina "istoric interventii"
In acest meniu se afiseaza lista tuturor problemelor rezolvate solicitate departamentului IT. Pagina seamana foarte mult cu pagina "probleme nerezolvate", fiind formata dintr-un form pentru fiecare problema afisata si in care sunt afisate printr-un select din tabela "istoric interventii", in campurile introducere, rezolvare, problema , descriere. Butonul detalii are functia de submit a formului si prin apasarea lui se apeleaza pagina "istoricdetalii.php". Butonul sterge muta problema cu numarul Nr. Din tabela "istoricinterventii" in tabela "istoricinterventiisterse"
Figura numarul 9. Meniul istoric interventii.
include('bd.php');
$conn = mysql_connect($mysql_host , $mysql_user , $mysql_pass) or die('Nu s-a putut face conexiunea la baza de date');
mysql_select_db('$baza') or die('Nu s-a putut selecta baza');
$user = $_COOKIE['user'] or die('Nu ai acces la pagina asta te rog sa va loghezi');
$pass = $_COOKIE['pass'] or die('Nu ai acces la pagina asta te rog sa te loghezi');
$orderist = $_COOKIE['orderist'];
if ($orderist == '1') $stringul = 'select * from $tabela4 order by datastart , orastart';
if ($orderist == '2') $stringul = 'select * from $tabela4 order by datastop , orastop';
if ($orderist == '3') $stringul = 'select * from $tabela4 order by idproblema';
if ($orderist == '4') $stringul = 'select * from $tabela4 order by descriereproblema';
if ($orderist == '5') $stringul = 'select * from $tabela4 order by id desc';
$resultul = mysql_query($stringul);
$nr = mysql_numrows($resultul);
if ($nr % $liniipepagina > 0)
else $nrpagini = $nr / $liniipepagina - 1;
if (isset($_GET['nrpagina'])) $nrpagina = $_GET['nrpagina'];
else $nrpagina = 0;
$i = $liniipepagina * $nrpagina;
$n = $liniipepagina * ($nrpagina + 1);
if ($n > $nr) $n = $nr;
echo '<table border = '1'>';
echo '<tr><td><a href = 'istoric.php' onclick = 'javascript:order5()'>Nr.</a></td>';
echo '<td><a href = 'istoric.php' onclick = 'javascript:order1()'>Introducere</a></td>';
echo '<td><a href = 'istoric.php' onclick = 'javascript:order2()'>Rezolvare</a></td>';
echo '<td><a href = 'istoric.php' onclick = 'javascript:order3()'>Problema</a></td>';
echo '<td><a href = 'istoric.php' onclick = 'javascript:order4()'>Descriere</a></td>';
echo '<td> </td>';
echo '<td> </td></tr>';
while ($i < $n)
echo '</table>';
$i = $nrpagina;
$j = $nrpagina + 10;
if ($i == 0)
$nrpagina = $nrpagina + 11;
echo '<a href = 'istoric.php?nrpagina=$nrpagina'> ';
echo '<a href = 'istoric.php?nrpagina=$nrpagini'>[$nrpagini]</a>';
}
else
if ($j >= $nrpagini)
}
else
$nrpagina = $nrpagina + 11;
echo '<a href = 'istoric.php?nrpagina=$nrpagina'> ';
echo '<a href = 'istoric.php?nrpagina=$nrpagini'>[$nrpagini]</a>';
}
echo '<br><a href = 'home.html'>Inapoi</a>';
?>
</body>
Dupa apasarea butonului "detalii" vom avea posibilitatea de a vedea mai multe informatii despre problema dorita, dar tot odata putem sa si editam detaliile problemei, aceasta fiind posibila la cererea expresa a majoritatii tehnicienilor. Aici avem tot un form format din doua tabele populat cu informatii din tabela "istoric interventii"
Figura numarul 7. Sub meniul detalii din cadrul meniului istoric interventii
Meniul rapoarte i grafice,
Rapoarte
Folosindu-se datele introduse la rezolvarea unei interventii, se pot realiza diverse rapoarte, unele dintre acestea fiind cerute de conducere, altele avand relevanta in organizarea interna a departamentului de suport IT. Astfel au fost identificate mai multe tipuri de rapoarte:
Raport dupa departament;
Raport dupa tipul problemei;
Raport pe om;
Raport data;
La acestea s-a adaugat un Raport customizat ce permite alegerea criteriilor dupa care se va face raportul.
Raport dupa departament
Acest raport prezinta toate interventiile care au fost efectuate in cadrul unui departamentedivizie.
Cu ajutorul unui drop down list se poate alege departamentul asupra caruia se va face raportul. Se obtine apoi un raport de forma:
Acest raport este afisat cu ajutorul un tabel in care se defineste mai intai capul de tabel
echo '<h2>Raport interventii pentru $departament</h2>';
echo '<table border = 1>';
echo '<tr><td><center>Nr.</center></td>';
echo '<td><center>Problema</center></td>';
echo '<td><center>Data introducere</center></td>';
echo '<td><center>Introdus de</center></td>';
echo '<td><center>Descriere</center></td>';
echo '<td><center>Data rezolvare</center></td>';
echo '<td><center>Rezolvat de</center></td>';
echo '<td><center>Descriere</center></td>';
echo '<td><center>Alte mentiuni</center></td></tr>';
Acesta se completeaza apoi cu campurile corespunzatoare tuturor intrarilor din baza de date din tabela ISTORICINTERVENTII
$string = 'select * from $tabela4 where iddivizie = '$iddepartament'';
* $tablela4 reprezinta tabela ISTORICiNTERVENTII, iar $iddepartament id-ul diviziei pentru care se face reportul */
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
while ($i < $n)
echo </table>;
Raportul poate fi download-at si in format csv. Se creaza astfel un fisier local rapoarte/raportdep.csv, raport ce poate fi apoi download-at cu ajutorul unui link:
In raportul in format csv apar detalii ale interventiilor in plus cum ar fi numele si interiorul telefonic al solicitantului. Mai jos se afla codul php prin care se realizeaza acest lucru:
$filename = 'C:Program Files (x86)EasyPHP-5.3.2iwwwinternalaffairsrapoarteraportdep.csv';
if (!$fp = fopen($filename , 'w'))
fputs($fp , 'Raport interventii pentru $departamentn');
$captabel = 'Nr.;Problema;Data introducere; Ora introducere; Introdus de; Descriere problema; Data rezolvare; Ora rezolvare; Rezolvat de; Descriere problema;Altementiunin';
fputs($fp , $captabel);
while ($i < $n)
fclose($fp);
Raport dupa tipul problemei
Acest raport prezinta toate interventiile care au fost de un anumit tip de problema reprezentata de nomenclatorul din tabela PROBLEME. Se poate alege categoria de probleme cu ajutorul unui drop down list:
Se obtine astfel un raport de forma:
, care, la fel ca in cazul raportului dupa departament, poate fi download-at in format csv (codul php este similar).
Raport pe om
Acest raport permite vizualizarea tuturor interventiilor introduse, dar si rezolvate de un tehnician. In mod similar, se alege username-ul utilizatorului pentru care se face raportul:
Se obtine un raport ca cel de mai jos, raport ce poate fi downloadat, de asemenea, in format csv:
Raport data
Acest raport permite vizualizarea tuturor interventiilor ce au avut loc intre doua date (inclusiv aceste doua date). Cele doua date calendaristice se introduc in formatul (aaaa-ll-zz) in doua textbox-uri.
Raportul obtinut poate si el fi downloadat in format csv:
Raport customizat
Acest raport permite realizarea unui raport mai complex, pentru realizarea lui permitandu-se alegerea mai multor criterii (filtre):
Se obtine un raport ce poate fi downloadat de asemenea in format csv:
Grafice
Un raport grafic poate fi mai usor de ,citit', relevanta lui fiind mai usor de inteles. De aceea, s-a ajuns la concluzia ca e nevoie si de astfel de rapoarte. Aceste grafice au insa la baza un alt criteriu de reprezentare a problemelor si anume importanta lor. Algoritmul de calcul pentru o interventie va fi explicat printr-un exemplu:
Sa presupunem ca avem introduce 5 interventii, cu detaliile de mai jos:
Conform tabelei PROBLEME, fiecarui tip de probleme ii este asociat o dificultate (importanta), de exemplu, daca apare o problema in functionarea hardware a unui server, acest lucru este mult mai important decat daca ar exista o problema de functionalitate la un calculator al unui redactor. Astfel, categoria Centrala telefonica are importanta 4, Hardware Servere 3, iar Telefoane, Fonturi si Software PC 1 (aceste importante au fost stabilite de departamentul de suport IT si au valori de la 1 la 4).
De asemenea, datorita faptului ca pot aparea complicatii la efectuarea unor interventii sau pentru ca categoria problemei in care interventia se incadreaza este mai complexa si s-a dorit o mai corecta evaluare a activitatii tehnicienilor, tuturor interventiilor li s-au asociat si o dificultate a rezolvarii stabilita de tehnicianul care a rezolvat problema (0 - mica, 1- medie si 2 - mare).
Astfel, algoritmul identificat in cadrul departamentului pentru evaluarea dificultatii (importantei) unei intervenitii este:
Dif[i] = dif_problema[i]*dif_tip_problema[i], unde:
dif_problema[i] = 1, daca dificultatea rezolvarii este 0 (mica);
= 5, daca dificultatea rezolarii este 1 (medie)
= 11, daca dificultatea rezolvarii este 2 (mare);
dif_tip_problema[i] = dificultatea (importanta) tipului de problema asa cum este ea asignata in tabela PROBLEME.
O alta notiune ce este asociata unei interventii este cea de vina. Vina unei interventii este cel putin una din urmatoarele:
- hardware (codficat cu valoarea 1) - problema a aparut din cauza unei probleme in functionarea din punct de vedere fizic al unui echipament;
- software (codificat cu valoarea 2) - problema a aparut din cauza functionarii defectuoase a unei aplicatii software;
- tehnica (codificat cu valoarea 4) - problema a aparut din cauza unei erori a departamentului de suport IT;
- user (codificat cu valoarea 8) - problema a aparut din cauza utilizarii defectuoase a user-ului echipamentului IT;
- furnizor (codificat cu valoarea 16) - problema a aparut din cauza furnizorului echipamentului sau aplicatiei software defectate.
Vina aparitiei unei probleme poate fi multipla, de aceea vina interventiei o reprezinta suma celor 5 vine in parte (valoarea 0 se afla in dreptul acelei vine care nu reprezinta o cauza pentru interventia respectiva). Asocierea cu puteri ale lui 2 (0, 1, 2, 4, 8,16) face mai usoara codificareadecodificarea vinei totale pentru identificarea ulterioara a cauzelor aparitiei problemelor.
Avand toate aceste elemente la dispozitie, s-au identificat urmatoarele rapoarte grafice:
Grafic pe departament
Acest grafic prezinta importanta interventiilor pe departamentedivizii. Importanta unei divizii reprezinta suma tuturor interventiilor efectuate asupra problemelor aparute in divizia respectiva.
Ca intrari, se asteapta datele calendaristice intre care se va efectua graficul, dar si tipul graficului respectiv:
, astfel se va afisa graficul in cele 6 forme:
Vertical bars (bare verticale):
Horizontal bars (bare orzizontale):
Dots (cu puncte):
Lines (cu linii):
Pie (placinta):
Donut (gogoasa, covrig):
La crearea acestor grafice s-a folosit o clasa gasita pe internet, ca free source, la https://www.phpclasses.org (listing-ul clasei se gaseste la finalul proiectului). Ca exemplu de folosire, mai jos se gaseste listing-ul fisierului graficdepartament.php, cea care realizeaza graficele de mai sus:
// se citeste tipul graficului primit prin metoda post
$grafic = $_POST['grafic'];
// se citest cele doua date calendaristice intre care se gasesc interventiile
$data1 = $_POST['data1'];
$data2 = $_POST['data2'];
// se cauta interventiile ce au avut loc intre cele doua date
$string = 'select * from $tabela4 where datastart >= '$data1' and datastart <= '$data2' order by iddivizie';
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
$nrdep = -1;
$depcrt = -1;
while ($i < $n)
/* se calculeaza dificultatea (importanta) interventiei, luandu-se in calcul atat dificultatea interventiei, cat si dificultatea (importanta) tipului de problema*/
switch ($dificultate)
$i = $i + 1;
// se creaza variabilia PG asa cum va fi folosita de catre clasa class..graphic.php
// titlul graficului
$PG->title = 'Importanta interventii pe departamente';
// denumirea axei 0X
$PG->axis_x = 'Departamente';
// denumirea axei 0Y
$PG->axis_y = 'Importanta interventii';
// tipul graficului: Vertical bars, Horizontal bars, etc
$PG->type = $grafic[0];
$PG->skin = 1;
$PG->credits = 0;
$i = 0;
//valorile de pe axa 0X, cat si 0Y
while ($i <= $nrdep)
// se trimite catre class.graphic.php variabila PG, clasa intorcand o imagine care se afiseaza
echo '<img src='class.graphic.php?' . $PG->create_query_string() . '' border='1' alt='' />';
Grafic interventii pe zile
Acest grafic are ca intrari doua date calendaristice intre care se vor cauta interventiile efectuate:
Se vor afisa numarul de interventii pe fiecare zi in parte (se poate desena graficul in toate cele 6 forme in parte ca si mai sus, folosindu-se aceeasi clasa class.graphic.php:
Grafic cauze probleme
Se asteapta la intrare cele doua date intre care se va efectua raportul, departamentul sau departamentele de interes precum si tipul problemei din tabela PROBLEME:
Se va calcula de aceasta data importanta interventiilor (interventiile efectuate intre cele doua date calendaristice, in departamentele selectate si rezolvand probleme din categoriile selectate) impartita insa pe cele 5 vine principale. Pentru fiecare interventie in parte se va calcula importanta sa conform algoritmului folosit si la primul grafic, dar aceasta adaugandu-se la suma totala calculata pentru fiecare vina in parte (daca o interventie are ,culpa comuna' se va adauga sumei fiecarei vini in parte, insa ca medie).
Graficul va fi afisat doar in forma pie (placinta), folosindu-se aceeasi clasa class.graphic.php:
Grafic cauze pe departament (radar)
Graficul asteapta la intrare aceleasi date ca si pentru graficul cauze la general: doua date calendaristice, departamentele si categoriile de probleme vizate.
Pentru desenarea acestui grafic se folosesc functiile de desen ale php si se gasesc in fisierul grafica.php (listing-ul se afla la sfarsitul proiectului). Se folosesc functiile php:
$im = imagecreate($dimx , $dimy) - creaza o imagine de dimensiuni dimxXdimy;
$colors[0] = imagecolorallocate($im , 0 , 0 , 0) - aloca o culoare pentru o imagine;
imageline($im , $centrux , $centruy , $centrux , $pas , $colors[1]) - deseneaza o linie de la punctul (centrux, centruy) pana la (centrux, centruy + pas) de culoaea colors[1];
imagestring($im , 2 , $centrux - 22 , 0 , $titluaxa[0] , $colors[1]) - deseneaza un strang (tiltuaxa[0]) de culoare(colors[1]) la pozitia (cemtrix-22, 0) cu un font de dimensiune '2';
imagefill($im , $punctx , $puncty , $colors[$i + 2]) - umple o figura cu culoarea colors[i+2], dandu-se un punct interior acelei figuri prin punctul de coordonate (punctx, puncty);
imagejpeg($im) - afiseaza imaginea im in format jpeg;
imagedestroy($im) - ,distruge' imaginea im;
Graficul de data asta asta este tip radar, desi este tot bidimensional, permite citirea mai multor informatii decat graficele precedente: se poate observa ca vina principala a interventiilor in cauza o reprezinta furnizorul, dar in acelasi timp, ca departamentele afectate de aceasta cauza sunt Administration, dar si Accounting. De asemnenea, departamentul Accounting este afectat atat de vina Furnizoului, dar si a echipmentelor Hardware.
Grafic cauze pe tip probleme (radar)
Graficul asteapta la intrare aceleasi date ca si pentru cele doua grafice precedente: doua date calendaristice, departamentele si categoriile de probleme vizate.
Pentru desenarea acestui grafic se folosesc functiile de desen ale php si se gasesc in fisierul grafica.php (listing-ul se afla la sfarsitul proiectului).
Iata, mai jos, un exemplu de astfel de grafic:
Observatii
Aplicatia ofera cateva facilitati utilizatorilor sai:
Interventiile care sunt recomandate unui utilizator sunt afisate cu o culoare diferita in lista de interventii deschise (interventiile afisate cand se log-eaza utilizatorul user3):
Listele cu interventii deschise (nerezolvate) si cu interventii inchise pot fi ordonate dupa toate elementele din capetele de tabel.
Lista ordonata dupa user-ul recomandat este cea de la punctul 4.1., iar, mai jos, se afla lista ordonata dupa descrierea problemei:
La afisarea capului de tabel, fiecarui element i se asociaza o functie java script:
echo '<tr><td><a href = 'interventii.php' onclick = 'javascript:order5()'>Nr.</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order1()'>Introducere</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order2()'>Problema</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order3()'>Descriere</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order4()'>User recomandat</a></td>';
, iar la apasarea unuia dintre capetele de tabel, se seteaza un cookie cu o valoare corespunzatoare fiecarui cap de tabel cu ajutorul acestor functii:
<script language = 'javascript'>
function order1()
function order2()
function order3()
function order4()
function order5()
function order(name , value)
</script>
La reafisarea paginii se testeaza acest cookie si in functie de valoarea sa se va face query-ul in baza de date:
$orderint = $_COOKIE['orderint'];
if ($orderint == '1') $stringul = 'select * from $tabela5 order by datastart , orastart';
if ($orderint == '2') $stringul = 'select * from $tabela5 order by idproblema';
if ($orderint == '3') $stringul = 'select * from $tabela5 order by descriereproblema';
if ($orderint == '4') $stringul = 'select * from $tabela5 order by iduserrecomandat';
if ($orderint == '5') $stringul = 'select * from $tabela5 order by id desc';
Pentru tabela INTERVENTII (aceeasi situatie se intalneste si la alte tabele) exista un numar de 5 chei externe (din tabela PROBLEME, din tabela DIVIZIE, dar si 3 din tabela USERS). Teoria bazelor de date impune aplicarea join - urilor in executarea query-urilor, viteza de procesare a motorului MySQL fiind mult mai mare decat cea de procesare a scripturilor php de catre server-ului web. Insa, in primul rand pentru usurarea efectuarii multiplelor calcule ale importantelor (dificultatilor) si pentru o afisare mai comoda a datelor in format html , dar si pentru ca nu este vorba de un volum foarte mare de date, s-a preferat efectuarea select-urilor secvential.
Astfel, un query de forma:
select t1.denumire as a, t2.username as b, t3.denumire as c, t4.descriereproblema as d, t4.interior as e, t4.nume as f, t4.datastart as g, t4.orastart as h from probleme t1, users t2, divizii t3, interventii t4 where t4.iduserrecomandat = 3 and t1.id = t4.idproblema and t2.id = t4.iduser and t3.id = t4.iddivizie order by t4.id
se va transforma in query-uri succesive si apoi:
select idproblema, iduser, iddivizie, descriereproblema, interior, nume, datastart, orastart from interventii where iduserrecomandat = 3 order by id
, apoi urmeaza query-urile:
select denumire from probleme where id = $idproblema;
select username from users where id = $iduser;
select denumire from divizii where id = $iddivizie;
Wishlist
Fiind vorba de o aplicatie dezvoltata in interiorul departamentului, proiectul a fost dat in folosinta inainte de finalizarea sa totala. Multe din functionalitatile sale au fost dezvoltate ulterior pentru imbunatatii performantele sale, au aparut astfel lucruri observate in productie.
Pentru a facilita notarea unor noi propuneri pentru dezvoltarea aplicatiei fara a se mai face sedinte sau intalniri de proiect a aparut aceasta sectiune care permite introducerea noilor idei: wishlist.php.
Prima pagina a sectiunii este reprezentata de un sub meniu, alcatuit din trei link-uri:
La accesarea link-ului 'vizualizeaza sugestii' se ajunge in pagina sugestiilist.php ce afiseaza tabelului de mai jos:
Fiecare linie reprezinta un form, iar butonul 'Detalii'aferent este cel ce face submit pentru form-ul respective. La apasarea unui astfel de buton se ajunge in pagina sugestiidetalii.php care primeste prin metoda POST id-ul sugestiei respective. Aceasta pagina afiseaza detaliile unei sugestii (data introducerii sugestiei, cine a introduso, textul sugestiei si starea rezolvarii sale), dar se afiseaza diferit in functie de nivelul de acces al user-ului logat:
pentru user-ii cu id = 1 (dezvoltatorul aplicatiei) si cu id = 4 (seful departamentului de suport IT), se afiseaza tabelul de mai jos ce reprezinta un form (butonul 'Salveaza'' fiind cel cu ajutorul caruia se face submit):
si permite modificarea starii sugestiei in functie de status-ul propunerii:
switch ($stare)
pentru restul de user-I se afiseaza doar un table cu detaliile sugestiei:
La accesare link-ului ,Introdu sugestie noua' din submeniul principal se ajunge la pagina sugestienoua.php care reprezinta un form prin care se introduce o noua sugestie. La apasarea butonului 'Salveaza' se face submit form-ului si se introduce noua sugestie in tabela WISHLIST.
if ($userid == 4 || $userid == 1) $strang = 'insert into $tabela6 (text , userid , stare , data) values ('$text' , '$userid' , 1 , '$ziua')';
else $strang = 'insert into $tabela6 (text , userid , stare , data) values ('$text' , '$userid' , 0 , '$ziua')';
$result = mysql_query($strang);
echo 'S-a introdus sugestia ta<br>';
Se poate observa ca daca se propune o sugestie de catre user-ii cu id-ul 1 sau 4 (dezvoltatorul aplicatiei, respective seful departamentului IT), sugestia este introdusa direct cu statusul 'aprobat', pe cand, pentru restul user-ilor, se introduce sugestia cu statusul 'in asteptarea.
Resurse
In aceasta sectiune apar resurse utile pentru functionarea de zi cu zi a departamentului IT. Unele resurse sunt afisate in format HTML, accesarea alor link-uri duce la download-ul unui fisier xls, pdf, etc. De asemnenea, folosind-use scriptul library.php se afiseaza in format HTML datele din mai multe fisiere .csv. Acest script permite si modificarea acestor csv-uri prin editarea datelor afisate in browser, doar celor 2 user-I cu drepturi de editare ca si mai sus (listing-ul fisierului library.php se afla in anexa proiectului).
Info
Atributiunile Deparamentului IT - fisier .xls cu atributiunile tuturor tehnicienilor din cadrul departamentului;
Date S.C. Ringier Romania S.R.L. - se afiseaza datele fiscale ale firmei;
Pana de curent - procedura in cazul picarii curentului;
Setari retea Evenimentul Zilei
Ip-urile si Provider-ii din
Contacte utile- IP-urile NAS pe interfete;
Procedura transmisie - procedura de transmisie a fisierelor catre tipografii;
Instalari
Instalare SAP - procedura de instalare a aplcaitiei contabile SAP;
Mutarea port intr-un vlan pentru un Cisco - o pagan prin care se explica cum se poate configura swich-utile CISCO din companie;
Centralizatoare (listele pentru telefoane mobile si fixe din companie, dar si listele IP-urilor din diferite vlan-uri din arhitectura retelei);
Lista mobile Ringier;
Lista interioare Ringier;
Lista Ip-uri Evz.Lan;
Lista Ip-uri Ringier.Lan;
Lista Ip-uri Posport.Lan;
Misc (denumirile sunt sugestive pentru toate
Noul cod rutier;
Training telefoane digitale;
Prefixe telefonice Romania;
Logo-uri Ringier;
Inapoi
Adrese utile
Aceasta sectiune permite afisarea, in format HTML, a unor adrese utile pentru departamentul IT, in cazul de fata adresa si orarul de lucru pentru birourile de carta funciara, directia venituri, impozite si taxe locale si administratiile financiare pentru fiecare sector al capitalei.
Concluzii
Avand in vedere scopul descris la inceputul proiectului, dupa perioada in care aceasta aplicatie a functionat s-au putut trage diverse concluzii. In primul rand, chiar de la inceput, prin acordarea increderii departamentului IT pentru dezvoltarea interna a unei astfel de unelte de gestiune a activitatii tehnicienilor, s-au obtinut costuri reduse de dezvoltare si implementare, dar si un produsul este cladit exact pe nevoile companiei.
Rezultate:
In urma analizei rapoartelor pe parcursul unei jumatati de an au aparut urmatoarele rezultate:
S-au justificat diverse prime in cadrul departamentului pentru activitatea unor tehnicieni.
S-a descoperit nevoia de a angaja un nou tehnician, volum ridicat al interventiilor justificand acest lucru. Acest post a fost prevazut in bugetul departamentului IT pentru anul urmator.
S-a schimbat colaboratorul extern care asigura service-ul imprimantelor si faxurilor din companie. In urma rapoartelor, s-a descoperit ca exista o rata destul de mare a defectelor dupa efectuarea operatiilor de reparatie de catre fostul furnizor. Prezentarea acestor rapoarte la forurile superioare au facilitat schimbarea furnizorului in timpul anului fiscal, chiar daca nu fusese prevazut in buget, intrucat costurile per total ar fi fost reduse.
S-au justificat diverse cursuri la care au participat tehnicienii departamentului IT, descoperindu-se nevoie dezvoltarii competentelor lor in rezolvarea unor incidente specifice.
Numarul mare de interventii ce avea ca vina lipsa de cunostinte tehnice ale utilizatorului a dus la executarea unor cursuri ce ajutau la insusirea unor notiuni de baza ale pachetului Microsoft Office pentru diverse divizii din cadrul companiei.
Bugetarea mai multor echipamente IT a fost mai usor acceptata de forurile superioare prin prezentarea rapoartelor cu incidentelor ce au aparut din cauza unor erori in functionare a vechilor echipamente.
Dezvoltari ulterioare:
Asadar, construirea acestei aplicatii s-a justificat si, mai mult decat atat, se doresc dezvoltari ulterioare printre care amintim:
Posibilitatea introducerii chiar de catre angajatii companiei a problemelor aparute cu posibilitatea comunicarii prin intermediul site-ului intre solicitant si tehnicianul ce executa interventia.
O interfata grafica mai atragatoare.
Trimiterea automata, pe e-mail, a unor rapoarte saptamanale catre persoane cheie din companie (managerii de divizii, sefii directi, tehnicieni).
Anuntarea printr-un e-mail a tehnicienilor atunci cand le sunt alocate diverse interventii.
Bibliografie
Situl PHP:
https://www.php.net/~derick/meeting-notes.htm
https://filext.com/file-extension/PHP
https://php.net/support
https://php.net/
Using PHP from the command line - Manual: 'The PHP Group
https://us3.php.net. Retrieved 2009-09-11
Lerdorf, Rasmus (1995-06-08). 'Announce: Personal Home Page Tools"
Situl My Sql
https://forge.mysql.com/
Robin Schumacher, Arjen Lentz. 'Dispelling the Myths'
MySQL AB :https://dev.mysql.com/. Retrieved 2007-02-10
Sun Microsystems Announces Completion of MySQL Acquisition; Paves Way for Secure, Open Source Platform to Power the Network Economy, Sun Microsystems Press release, February 26, 2008
'About the Apache HTTP Server Project' Apache Software Foundation
https://httpd.apache.org/ABOUT_APACHE.html
Bowen, Rich (2001-05-12). 'A Patchy Server and the FAQ'. apache-docs mailing list
https://mail-archives.apache.org
Slive, Joshua (2001-05-12). 'Re: A Patchy Server and the FAQ'. apache-docs mailing list https://mail-archives.apache.org/
'Overview of new features in Apache 2.0' Apache HTTP Server Documentation. 2.0. The Apache Software Foundation. 2007 https://httpd.apache.org/l
Open-source benchmarks of Apache, Accoria Rock, Microsoft IIS and TrustLeap G-WAN
Copyright © 2024 - Toate drepturile rezervate