Lista de figuri ………………………….. ………………………….. ………………………….. …………………………….. [616319]
1
Lista de figuri ………………………….. ………………………….. ………………………….. ………………………….. ……………. 3
Listă acronime ………………………….. ………………………….. ………………………….. ………………………….. ………….. 5
Cap. 1. INTRODUCERE ………………………….. ………………………….. ………………………….. ………………………….. .. 6
1.1 Tema de proiectare ………………………….. ………………………….. ………………………….. …………………. 6
1.2 Stadiul actual al problemei abordate ………………………….. ………………………….. ……………………… 6
1.3 Scopul și obiectivele proiectului ………………………….. ………………………….. ………………………….. .. 6
1.4 Domeniul de aplicabilitate ………………………….. ………………………….. ………………………….. ……….. 7
Cap 2. Considerații privind tehnologiile utilizate ………………………….. ………………………….. ……………………. 8
2.1 Limbajul de programare PHP ………………………….. ………………………….. ………………………….. …………. 8
2.2 MySQL ………………………….. ………………………….. ………………………….. ………………………….. ……………. 8
2.3 HTML + CSS + Javascri pt ………………………….. ………………………….. ………………………….. ………………… 8
2.4 jQuery ………………………….. ………………………….. ………………………….. ………………………….. …………….. 9
2.5 Bootstrap ………………………….. ………………………….. ………………………….. ………………………….. ……… 10
2.6 Datatables ………………………….. ………………………….. ………………………….. ………………………….. …….. 10
2.7 Select2 ………………………….. ………………………….. ………………………….. ………………………….. ………….. 11
2.8 Symfony ………………………….. ………………………….. ………………………….. ………………………….. ……….. 11
2.8.1 Twig ………………………….. ………………………….. ………………………….. ………………………….. …………… 12
2.8.2 Doctrine ………………………….. ………………………….. ………………………….. ………………………….. ……… 12
2.9 Composer ………………………….. ………………………….. ………………………….. ………………………….. ……… 13
2.10 Git ………………………….. ………………………….. ………………………….. ………………………….. ………………. 13
Cap. 3 Framework -ul Symfony ………………………….. ………………………….. ………………………….. ………………. 14
3.1 Ce este MVC? ………………………….. ………………………….. ………………………….. ………………………….. … 14
3.1.1 Model ………………………….. ………………………….. ………………………….. ………………………….. ………… 14
3.1.2 View ………………………….. ………………………….. ………………………….. ………………………….. ………….. 15
3.1.3 Controller ………………………….. ………………………….. ………………………….. ………………………….. …… 15
3.2 De ce Symfony? ………………………….. ………………………….. ………………………….. ………………………….. 15
Cap. 4 Realizarea proiectului ………………………….. ………………………….. ………………………….. ………………… 17
4.1 Arhitectura aplicației ………………………….. ………………………….. ………………………….. …………………… 17
4.2 Instalarea aplicației și mediul de lucru ………………………….. ………………………….. ………………………. 17
4.3 Structura fișierelor ………………………….. ………………………….. ………………………….. ……………………… 18
4.3.1 Assets ………………………….. ………………………….. ………………………….. ………………………….. ………… 19
4.3.2 Bin ………………………….. ………………………….. ………………………….. ………………………….. …………….. 20
4.3.3 Config ………………………….. ………………………….. ………………………….. ………………………….. ………… 20
4.3.4 Node modules ………………………….. ………………………….. ………………………….. …………………………. 20
2
4.3.5 Public ………………………….. ………………………….. ………………………….. ………………………….. …………. 20
4.3.6 Src ………………………….. ………………………….. ………………………….. ………………………….. ……………… 21
4.3.7 Templates ………………………….. ………………………….. ………………………….. ………………………….. …… 23
4.3.8 Tests ………………………….. ………………………….. ………………………….. ………………………….. ………….. 23
4.3.9 Translations ………………………….. ………………………….. ………………………….. ………………………….. … 23
4.3.10 Var ………………………….. ………………………….. ………………………….. ………………………….. …………… 23
4.3.11 Vendor ………………………….. ………………………….. ………………………….. ………………………….. ……… 24
4.4 Utilizatori și securitate ………………………….. ………………………….. ………………………….. ………………… 24
4.5 Baza de date ………………………….. ………………………….. ………………………….. ………………………….. ….. 25
Cap. 5 Procesele din cadrul aplicației ………………………….. ………………………….. ………………………….. …….. 27
5.1 Creare cămin și generare locuri ………………………….. ………………………….. ………………………….. ……. 27
5.2 Importare studenți ………………………….. ………………………….. ………………………….. ……………………… 33
5.3 Trimitere cerere și feedback -ul administratorului ………………………….. ………………………….. ……….. 41
Cap 6. Design -ul aplicației ………………………….. ………………………….. ………………………….. …………………….. 46
6.1 Bootstrap ………………………….. ………………………….. ………………………….. ………………………….. ……… 46
6.2 Datatables ………………………….. ………………………….. ………………………….. ………………………….. …….. 48
6.3 Select2 ………………………….. ………………………….. ………………………….. ………………………….. ………….. 49
Cap. 7 Concluzii ………………………….. ………………………….. ………………………….. ………………………….. ………. 51
7.1 Concluzii generale ………………………….. ………………………….. ………………………….. ………………………. 51
7.2 Direcții viitoare de dezvoltare ………………………….. ………………………….. ………………………….. ………. 51
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. …………….. 52
3
4
5
6
7
3)
8
9
10
11
12
13
14
15
16
17
composer create -project symfony/website -skeleton my -project
18
19
20
21
22
bin/console doctrine:schema:update –force
23
24
25
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App \Entity\User")
* @Assert \NotBlank()
*/
private $administrator ;
/**
* @ORM\Column(type="string", length=255, unique=true)
* @Assert \NotBlank()
*/
private $name;
/**
* @ORM\Column(type="integer")
* @Assert\NotBlank()
*/
private $floors;
/**
* @ORM\OneToMany(targetEntity="App \Entity\DormRoom", mappedBy="dorm",
orphanRemoval=true)
*/
private $dormRooms ;
26
27
28
/**
* @param int $floors
* @param int $roomsPerFloor
* @param int $placesInRoom
* @param Dorm $dorm
*/
public function generateRoomsAndPlaces(int $floors, int $roomsPerFloor , int
$placesInRoom , Dorm $dorm)
{
if($floors && $roomsPerFloor && $placesInRoom ){
for($floor = 0; $floor <= $floors; $floor++){
for($room = 1; $room <= $roomsPerFloor ; $room++){
$newRoom = new DormRoom();
29
$newRoom ->setName(( $floor > 0 ? $floor : '').($room < 10 ?
'0'.$room : $room));
$newRoom ->setBedNumber( $placesInRoom );
$newRoom ->setDorm( $dorm);
$newRoom ->setFloor( $floor);
$newRoom ->setIsEmpty( true);
$this->em->persist( $newRoom );
for($place = 0; $place < $placesInRoom ; $place++){
$newPlace = new DormPlace();
$newPlace ->setIsOccupied( false);
$newPlace ->setRoom( $newRoom );
$this->em->persist( $newPlace);
}
}
}
}
}
30
31
32
/**
* @Route("/loc/{id}/editeaza/{room}", name="room_place_edit")
* @Method({"GET", "POST"})
*/
public function editRoomPlace(Request $request , DormPlace $place, DormRoom
$room, DormService $dormService )
{
$deleteForm = $this->createPlaceDele teForm($place);
$editForm = $this->createForm(RoomPlaceType:: class, $place);
$editForm ->get('room')->setData( $room);
$editForm ->handleRequest( $request );
if ($editForm ->isSubmitted() && $editForm ->isValid()) {
$dormService ->checkRoomPlaces( $room);
if(!$dormService ->checkIfTenantIsAlreadyInDorm( $place)){
$request ->getSession() ->getFlashBag() ->add('error', 'Studentul
mai este cazat pe un alt loc.' );
}
else{
$this->getDoctrine() ->getManager()->flush();
}
return $this->redirectToRoute( 'room_places' , array('id' => $place-
>getRoom() ->getId()));
}
return $this->render(
'dorm/edit_place.html.twig' ,
array(
'place' => $place,
'edit_form' => $editForm ->createView(),
'delete_form' => $deleteForm ->createView(),
)
);
}
33
34
/**
* @param $ file
*
* @throws \Exception
*/
public function importFromExcel( $file)
{
$filePath = $file->getRealPath();
$spreadsheet = IOFactory::load( $filePath );
$sheet = $spreadsheet ->getActiveSheet();
$this->em->beginTransaction();
try{
foreach($sheet->getRowIterator( 2, null) as $row){
$cells = [];
foreach($row->getCellIterator() as $cell){
$cells[] = $cell->getCalculatedValue();
}
$user = new User();
$user->setLastName( $cells[0]);
$user->setFirstName( $cells[1]);
$user->setFaculty( $cells[3]);
$user->setClassGroup( $cells[5]);
$user->setStudyProgram( $cells[4]);
$user->setRoles([ 'ROLE_STUDENT' ]);
$user->setUsername( $cells[2]);
$plainPassword = $cells[1].$cells[0];
35
$user->setPlainPassword( $plainPassword );
$user->setPassword( $this->encoder ->encodePassword( $user,
$plainPassword ));
$user->setAddress( $cells[6]);
$user->setIdentityCard( $cells[7]);
$user->setIsExempt( $cells[8] == 'Da' ? true : false);
$this->em->persist( $user);
}
$this->em->flush();
$this->em->commit();
}
catch(\Exceptio n $e){
$this->em->rollback();
throw $e;
}
}
36
if($file->getMimeType() != 'application/vnd.ms -excel' && $file->getMimeType()
!= 'application/octet -stream' && $file->getMimeType() != 'application/vnd.ms –
office'){
return new JsonResponse(
[
'status' => 'error',
'message' => $this->renderView(
'partials/warning_alert.html.twig' ,
[
'message' => 'Fisierul incarcat nu este de tipul
potrivit'
]
)
]
);
}
$studentService ->importFromExcel( $file);
return new JsonResponse(
[
'status' => 'success' ,
'redirect' => $this->generateUrl( 'not_accomodated_stud ents')
]
);
37
$(document).on('click', '#js -send-file', function(){
var form = $(document).find('form[name="user_import"]')[0];
$.ajax({
type: 'POST',
url: '{{ path('save_users_file') }}',
enctype: 'multipart/form -data',
processData: false,
contentType: false,
data: new FormData(form)
}).done(function(data){
if(typeof data.status !== 'undefined'){
if(data.status === 'success'){
window.location(data.redirect);
}
if(data.status === 'error'){
38
$(document).find('.error -container').html(data.message);
}
}
});
});
39
/**
* @Route("/etaje", name="ajax_get_dorm_floors")
* @param Request $request
*
* @return JsonResponse
*/
public function getAvailableFloorsForDorm(Request $request )
{
$dormId = $request ->query->get('dorm');
$dorm = $this->getDoctrine() ->getRepository(Dorm:: class)->find($dormId);
if($dorm){
$floors = [];
for($i = 0; $i <= $dorm->getFloors(); $i++){
$floors[] = $i;
40
}
return new JsonResponse([ 'status' => 'success' , 'floors' =>
$floors]);
}
return new JsonResponse([ 'status' => 'error']);
}
/**
* @Route("/camere -per-etaj/", name="ajax_get_floor_rooms")
* @param Request $request
*
* @return JsonResponse
*/
public function getAvailableRoomsForF loor(Request $request )
{
$dormId = $request ->query->get('dorm');
$dorm = $this->getDoctrine() ->getRepository(Dorm:: class)->find($dormId);
$floor = $request ->query->get('floor');
if($dorm && $floor >= 0){
$rooms = $this->getDoctrine ()->getRepository(DormRoom:: class)-
>findAvailableRoomByDormAndFloor( $dorm, $floor)->getQuery() ->getResult();
return new JsonResponse([ 'status' => 'success' , 'rooms' => $rooms]);
}
return new JsonResponse([ 'status' => 'error']);
}
41
42
/**
* @Route( „/creeaza ”, name=”new_request ”)
*/
public function newRequest(Request $request )
{
$newRequest = new \App\Entity\Request();
$form = $this->createForm(RequestType:: class, $newRequest , [‚user’ =>
$this->getUser()]);
$form->handleRequest( $request );
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine() ->getManager();
if($newRequest ->getFromUser() != $this->getUser()){
$request ->getSession() ->getFlashBag() ->add(‚error’, ‚Utilizatorul
din campul „de la user ” este diferit de cel autentificat ’);
return $this->redirectToRoute( ‚dashboard’);
}
$em->persist( $newRequest );
$em->flush();
$request ->getSession() ->getFlashBag() ->add(‚success’, ‚Cererea dvs. A
fost trimisa. Pentru a vizualiza statusul cererii accesati pagina „Cererile
mele”’);
43
return $this->redirectToRoute( ‚dashboard ’);
}
return $this->render(
‚request/new.html.twig ’,
array(
‚newRequest ’ => $newRequest ,
‚form’ => $form->createView(),
)
);
}
44
45
46
<div class="col -6 offset -3">
47
<div class="container">
<div class="row">
<div class="col">
</div>
</div>
</div>
<div class="alert alert -danger alert -dismissible fade show" role="alert">
{{ message }}
<button type="button" class="close" data -dismiss="alert" aria –
label="Close">
<span aria -hidden="true">×</span>
</button>
</div>
<div class="dropdown">
<button class="btn btn -secondary dropdown -toggle" type="button"
id="dropdownMenuButton" data -toggle="dropdown" aria -haspopup="true" aria –
expanded="false">
{{ app.user.firstName }} {{ app.user.lastName }}
</button>
<div class="dropdown -menu"
aria-labelledby="dropdownMenuButton">
<a class="dropdown -item"
href="{{path('security_logout')}}">Iesire</a>
</div>
</div>
48
<button type="button" class="btn btn -success">Success</button>
DataTable({
"language": {
"lengthMenu": "Arata _MENU_ inregistrari pe pagina",
"zeroRecords": "Nu exista informatii de afisat",
"info": "Pagi na _PAGE_ din _PAGES_",
"infoEmpty": "Nu exista informatii de afisat",
"infoFiltered": "(filtrate din _MAX_ inregistrari)",
"search": "Cauta:",
"paginate": {
"first": "Prima",
"last": "Ulti ma",
"next": "Urmatoarea",
"previous": "Precedenta"
}
},
dom: 'Bfrtip',
buttons: [
{
extend: 'excelHtml5',
exportOptions: {
columns: 'th:not(:last -child)'
}
},
{
extend: 'pdfHtml5',
49
exportOptions: {
columns: 'th:not(:last -child)'
}
}
]
});
50
51
52
53
54
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Lista de figuri ………………………….. ………………………….. ………………………….. …………………………….. [616319] (ID: 616319)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
