Strazi.php
<?php
namespace App\Controllers;
use App\Helpers\SystemLogger;
use App\Models\Files;
use App\Models\Tari;
use App\Models\Judete;
use App\Models\Localitati;
use App\Models\Sate;
use Core\ArrayForm;
use Core\ArrayUtility;
use Core\Controller;
use Core\DebuggerUtility;
use Core\Request;
use Core\Session;
use Core\Validation;
use Core\View;
class Strazi extends Controller
{
public function list()
{
$page = Request::hasArgument('page', 'GET') ? Request::getArgument('page', 'GET') : 1;
$perPage = 30;
$columns = ['*'];
$pageName = 'page';
$strazi = \App\Models\Strazi::query();
$strazi = $strazi->orderByDesc('created_at');
if (Request::hasArgument('nume_strada') && !empty(Request::getArgument('nume_strada'))) {
$keywords = Request::getArgument('nume_strada');
if (explode(',', $keywords)) {
foreach (explode(',', $keywords) as $keyword) {
$keyword = '%' . $keyword . '%';
$strazi = $strazi->orwhere('nume_strada', 'like', $keyword);
}
} else {
$keywords = '%' . $keywords . '%';
$strazi = $strazi->orwhere('nume_strada', 'like', $keywords);
}
}
if (Request::hasArgument('sort') && !empty(Request::getArgument('sort'))) {
$orderBy = Request::getArgument('sort');
switch ($orderBy) {
case 'desc':
$strazi = $strazi->orderBy('created_at', 'desc');
break;
case 'asc':
$strazi = $strazi->orderBy('created_at', 'asc');
break;
default:
$strazi = $strazi->orderBy('created_at', 'desc');
}
}
$strazi = $strazi->paginate($perPage, $columns, $pageName, $page)->appends(Request::getQueryString(['page']));
View::render('admin/strazi',
[
'pageTitle' => 'Străzi / Listă Străzi',
'pageHeader' => 'Baza de Date Străzi',
'strazi' => $strazi->items(),
'nextPageUrl' => $strazi->nextPageUrl(),
'prevPageUrl' => $strazi->previousPageUrl(),
'lastPage' => $strazi->lastPage(),
'perPage' => $strazi->perPage(),
'total' => $strazi->total(),
'sort' => Request::getArgument('sort'),
'nume_strada' => Request::getArgument('nume_strada'),
'currentPageInput' => $page
]);
}
public function add()
{
$tari = Tari::all()->toArray();
$judete = Judete::all()->toArray();
$localitati = Localitati::all()->toArray();
$sate = Sate::all()->toArray();
$tariSelect = [];
$tariSelect[''] = 'Selecteaza Țara';
if($tari)
{
foreach ($tari as $tara)
{
$tariSelect[$tara['id']] = $tara['nume_tara'];
}
}
$judetSelected = [];
$judetSelected[''] = 'Selectează judeţul';
if(Session::getParam('form-add-strazi')['id_judet'])
{
$judet = Judete::where('id', '=', Session::getParam('form-add-strazi')['id_judet'])->get(['id','nume_judet'])->first();
if($judet)
{
$judetSelected[$judet['id']] = $judet['nume_judet'];
}
}
$judeteSelect = [];
$judeteSelect[''] = 'Selecteaza Judetul';
if($judete)
{
foreach ($judete as $judet)
{
$judeteSelect[$judet['id']] = $judet['nume_judet'];
}
}
$localitatiSelect = [];
$localitatiSelect[''] = 'Selecteaza Localitatea';
if($localitati)
{
foreach ($localitati as $localitate)
{
$localitatiSelect[$localitate['id']] = $localitate['nume_localitate'];
}
}
$sateSelect = [];
$sateSelect[''] = 'Selecteaza Satul';
if($sate)
{
foreach ($sate as $sat)
{
$sateSelect[$sat['id']] = $sat['nume_sat'];
}
}
$form =
[
'action' => $this->appUrl.'/admin/strazi/save',
'method' => 'POST',
'enctype' => 'multipart/form-data',
'display' => 'table'
];
$fields =
[
[
'label' => 'Țara',
'name' => 'id_tara',
'id' => 'id_tara',
'type' => 'select',
'class' => 'form-control form-control-sm',
'options' => $tariSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/judete',
'defaultOption' => Session::getParam('form-add-strazi')['id_tara']
],
[
'label' => 'Județ',
'name' => 'id_judet',
'id' => 'id_judet',
'type' => 'select',
'class' => 'form-control form-control-sm',
'options' => $judetSelected,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/orase',
'defaultOption' => Session::getParam('form-add-strazi')['id_judet']
],
[
'label' => 'Localitate',
'name' => 'id_localitate',
'id' => 'id_localitate',
'type' => 'select',
'class' => 'form-control form-control-sm',
'options' => $localitatiSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/localitati',
'defaultOption' => Session::getParam('form-add-strazi')['id_localitate']
],
[
'label' => 'Sat',
'name' => 'id_sat',
'id' => 'id_sat',
'type' => 'select',
'class' => 'form-control form-control-sm',
'options' => $sateSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/sate',
'defaultOption' => Session::getParam('form-add-strazi')['id_sat']
],
[
'label' => 'Nume Strada',
'name' => 'nume_strada',
'id' => 'nume_strada',
'placeholder' => 'ex: 32E',
'class' => 'form-control form-control-sm',
'value' => Session::getParam('form-add-strazi')['nume_strada']
],
[
'label' => 'OFP',
'name' => 'ofp',
'id' => 'ofp',
'placeholder' => 'ex: 32E',
'class' => 'form-control form-control-sm',
'value' => Session::getParam('form-add-strazi')['ofp']
],
[
'label' => 'Cod poștal',
'name' => 'cod_postal',
'id' => 'cod_postal',
'placeholder' => 'ex: 107244',
'class' => 'form-control form-control-sm',
'value' => Session::getParam('form-add-strazi')['cod_postal']
],
[
'label' => 'Cod poștal nou',
'name' => 'cod_postal_nou',
'id' => 'cod_postal_nou',
'placeholder' => 'ex: 1242',
'class' => 'form-control form-control-sm',
'value' => Session::getParam('form-add-strazi')['cod_postal_nou']
],
[
'id' => 'save',
'name' => 'save',
'type' => 'submit',
'class' => 'btn btn-success btn-sm',
'value' => 'Adaugă strada'
]
];
View::render('admin/add_strazi',
[
'pageTitle' => 'Strazi / Adaugă strada',
'pageHeader' => 'Crează strada',
'form' => ArrayForm::build($form,$fields)
]);
}
/**
* @throws \ReflectionException
*/
public function save()
{
if(Request::hasArgument('save','POST'))
{
$error = null;
$data = Request::post();
unset($data['save']);
/**
* Map form params to session in case we need
* to correct something
*/
Session::sendTheseToSession
(
[
'form-add-strazi' => $data
]
);
$fileId = 0;
/**
* Add elev entry
*/
$rules =
[
'nume_strada' => ['required'],
'id_tara' => ['required'],
'id_judet' => ['required'],
'id_localitate' => ['required']
];
$errors =
[
'nume_strada' => 'Câmpul este obligatoriu',
'id_tara' => 'Câmpul este obligatoriu',
'id_judet' => 'Câmpul este obligatoriu',
'id_localitate' => 'Câmpul este obligatoriu',
];
$validate = Validation::validate($rules,$errors);
if($validate['status'])
{
/**
* Begin saving data
*/
if(\App\Models\Strazi::all()->where('nume_strada','=',Request::getArgument('nume_strada','POST'))->count() < 1000)
{
try{
$create = \App\Models\Strazi::create($data);
SystemLogger::log('strazi','O strada a fost adaugata! :'. ArrayUtility::arrayToList($data));
Session::unsetSession('form-add-strazi');
}
catch (\Exception $e)
{
$error = $e->getMessage();
}
}
else
{
$error = 'Exista deja o strada cu numele introdus!';
}
}
else
{
$error = Validation::renderErrors($validate['error']);
}
View::render('admin/save_strazi',
[
'pageTitle' => 'Strazi / Adaugă strada',
'pageHeader' => 'Crează strada',
'error' => $error
]);
}
}
/**
* @param $request
*/
public function view($request)
{
$id = (int) $request;
$data = \App\Models\Strazi::all()->where('id', '=', $id)->first();
if($data)
{
$tari = Tari::all()->toArray();
$judete = Judete::all()->toArray();
$localitati = Localitati::all()->toArray();
$Sate = Sate::all()->toArray();
$tariSelect = [];
$tariSelect[''] = 'Selecteaza Țara';
if($tari)
{
foreach ($tari as $tara)
{
$tariSelect[$tara['id']] = $tara['nume_tara'];
}
}
$judeteSelect = [];
$judeteSelect[''] = 'Selecteaza Judetul';
if($judete)
{
foreach ($judete as $judet)
{
$judeteSelect[$judet['id']] = $judet['nume_judet'];
}
}
$localitatiSelect = [];
$localitatiSelect[''] = 'Selecteaza Localitatea';
if($localitati)
{
foreach ($localitati as $localitate)
{
$localitatiSelect[$localitate['id']] = $localitate['nume_localitate'];
}
}
$sateSelect = [];
$sateSelect[''] = 'Selecteaza Satul';
if($sate)
{
foreach ($sate as $sat)
{
$sateSelect[$sat['id']] = $sat['nume_sat'];
}
}
$form =
[
'action' => $this->appUrl.'/admin/strazi/update/'.$id,
'method' => 'POST',
'enctype' => 'multipart/form-data',
'display' => 'table'
];
$fields =
[
[
'label' => 'Țara ',
'name' => 'id_tara',
'id' => 'id_tara',
'type' => 'select',
'class' => 'form-control form-control-sm',
'required' => 'required',
'options' => $tariSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/tari',
'defaultOption' => $data->id_tara,
'readonly' => 'readonly'
],
[
'label' => 'Județ ',
'name' => 'id_judet',
'id' => 'id_judet',
'type' => 'select',
'class' => 'form-control form-control-sm',
'required' => 'required',
'options' => $judeteSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/judete',
'defaultOption' => $data->id_judet,
'readonly' => 'readonly'
],
[
'label' => 'Localitate ',
'name' => 'id_localitate',
'id' => 'id_localitate',
'type' => 'select',
'class' => 'form-control form-control-sm',
'required' => 'required',
'options' => $localitatiSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/localitati',
'defaultOption' => $data->id_localitate,
'readonly' => 'readonly'
],
[
'label' => 'Sat ',
'name' => 'id_sat',
'id' => 'id_sat',
'type' => 'select',
'class' => 'form-control form-control-sm',
'required' => 'required',
'options' => $sateSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/sate',
'defaultOption' => $data->id_sat,
'readonly' => 'readonly'
],
[
'label' => 'Nume Strada ',
'name' => 'nume_strada',
'id' => 'nume_strada',
'class' => 'form-control form-control-sm',
'value' => $data->nume_strada,
'readonly' => 'readonly'
],
[
'label' => 'OFP ',
'name' => 'ofp',
'id' => 'ofp',
'class' => 'form-control form-control-sm',
'value' => $data->ofp,
'readonly' => 'readonly'
],
[
'label' => 'Cod poștal ',
'name' => 'cod_postal',
'id' => 'cod_postal',
'class' => 'form-control form-control-sm',
'value' => $data->cod_postal,
'readonly' => 'readonly'
],
[
'label' => 'Cod poștal nou ',
'name' => 'cod_postal_nou',
'id' => 'cod_postal_nou',
'class' => 'form-control form-control-sm',
'value' => $data->cod_postal_nou,
'readonly' => 'readonly'
]
];
View::render('admin/view_strazi',
[
'pageTitle' => 'Strazi / Detalii Strazi',
'pageHeader' => 'Detalii Strazi',
'form' => ArrayForm::build($form,$fields),
'data' => $data,
'id' => $id
]);
}
else
{
Request::redirect($this->appUrl.'/admin/strazi');
}
}
/**
* @param $request
*/
public function edit($request)
{
$id = (int) $request;
$data = \App\Models\Strazi::all()->where('id', '=', $id)->first();
if($data)
{
$tari = Tari::all()->toArray();
$judete = Judete::all()->toArray();
$localitati = Localitati::all()->toArray();
$sate = Sate::all()->toArray();
$tariSelect = [];
$tariSelect[''] = 'Selecteaza Țara';
if($tari)
{
foreach ($tari as $tara)
{
$tariSelect[$tara['id']] = $tara['nume_tara'];
}
}
$judeteSelect = [];
$judeteSelect[''] = 'Selecteaza Judetul';
if($judete)
{
foreach ($judete as $judet)
{
$judeteSelect[$judet['id']] = $judet['nume_judet'];
}
}
$localitatiSelect = [];
$localitatiSelect[''] = 'Selecteaza Localitatea';
if($localitati)
{
foreach ($localitati as $localitate)
{
$localitatiSelect[$localitate['id']] = $localitate['nume_localitate'];
}
}
$sateSelect = [];
$sateSelect[''] = 'Selecteaza Satul';
if($sate)
{
foreach ($sate as $sat)
{
$lsateSelect[$sat['id']] = $sat['nume_sat'];
}
}
$form =
[
'action' => $this->appUrl.'/admin/strazi/update/'.$id,
'method' => 'POST',
'enctype' => 'multipart/form-data',
'display' => 'table'
];
$fields =
[
[
'label' => 'Țara',
'name' => 'id_tara',
'id' => 'id_tara',
'type' => 'select',
'class' => 'form-control form-control-sm',
'required' => 'required',
'options' => $tariSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/tari',
'defaultOption' => $data->id_tara
],
[
'label' => 'Județ',
'name' => 'id_judet',
'id' => 'id_judet',
'type' => 'select',
'class' => 'form-control form-control-sm',
'required' => 'required',
'options' => $judeteSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/judete',
'defaultOption' => $data->id_judet
],
[
'label' => 'Localitate',
'name' => 'id_localitate',
'id' => 'id_localitate',
'type' => 'select',
'class' => 'form-control form-control-sm',
'required' => 'required',
'options' => $localitatiSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/localitati',
'defaultOption' => $data->id_localitate
],
[
'label' => 'Sat',
'name' => 'id_sat',
'id' => 'id_sat',
'type' => 'select',
'class' => 'form-control form-control-sm',
'options' => $sateSelect,
'data-live-search' => 'true',
'data-post-endpoint' => $this->appUrl . '/ajax/sate',
'defaultOption' => $data->id_sate
],
[
'label' => 'Nume Strada *',
'name' => 'nume_strada',
'id' => 'nume_strada',
'placeholder' => 'ex: Tudor Vladimirescu',
'class' => 'form-control form-control-sm',
'required' => 'required',
'value' => $data->nume_strada
],
[
'label' => 'OFP',
'name' => 'ofp',
'id' => 'ofp',
'placeholder' => 'ex: 23E',
'class' => 'form-control form-control-sm',
'required' => 'required',
'value' => $data->ofp
],
[
'label' => 'Cod poștal',
'name' => 'cod_postal',
'id' => 'cod_postal',
'placeholder' => 'ex: 107244',
'class' => 'form-control form-control-sm',
'required' => 'required',
'value' => $data->cod_postal
],
[
'label' => 'Cod poștal nou',
'name' => 'cod_postal_nou',
'id' => 'cod_postal_nou',
'placeholder' => 'ex: 1244',
'class' => 'form-control form-control-sm',
'required' => 'required',
'value' => $data->cod_postal_nou
],
[
'id' => 'update',
'value' => 'Modifică',
'name' => 'update',
'type' => 'submit',
'class' => 'btn btn-primary btn-sm'
]
];
View::render('admin/edit_strazi',
[
'pageTitle' => 'Strazi / Editează strada',
'pageHeader' => 'Editează strada',
'form' => ArrayForm::build($form,$fields),
'data' => $data,
'id' => $id
]);
}
else
{
Request::redirect($this->appUrl.'/admin/strazi');
}
}
/**
* @param $request
*/
public function update($request)
{
$id = (int) $request;
if(\App\Models\Strazi::where('id','=',$id)->count() == 1)
{
$error = null;
$data = Request::post();
unset($data['update']);
unset($data['discipline']);
$fileId = 0;
/**
* Add profesor entry
*/
$rules =
[
'nume_strada' => ['required'],
'id_tara' => ['required'],
'id_judet' => ['required'],
'id_localitate' => ['required']
];
$errors =
[
'nume_strada' => 'Câmpul este obligatoriu',
'id_tara' => 'Câmpul este obligatoriu',
'id_judet' => 'Câmpul este obligatoriu',
'id_localitate' => 'Câmpul este obligatoriu'
];
$validate = Validation::validate($rules,$errors);
if($validate['status'])
{
/**
* Begin updating data
*/
try{
$update = \App\Models\Strazi::where('id','=',$id)->update($data);
SystemLogger::log('strazi','O strada cu id-ul '.$id.' a fost editata :'. ArrayUtility::arrayToList($data));
if($fileId != 0)
{
\App\Models\Strazi::where('id','=',$id)->update(['fotografie' => $fileId]);
}
}
catch (\Exception $e)
{
$error = $e->getMessage();
}
}
else
{
$error = Validation::renderErrors($validate['error']);
}
View::render('admin/update_strazi',
[
'pageTitle' => 'Strazi / Editează Strada',
'pageHeader' => 'Editează Strada',
'error' => $error,
'id' => $id
]);
}
else
{
Request::redirect($this->appUrl.'/admin/strazi');
}
}
/**
* @param $request
*/
public function remove($request)
{
$id = (int)$request;
$error = null;
if (!\App\Models\Strazi::all()->where('id', $id)->first()) {
$error = 'Nu s-a gasit strada cu id-ul specificat!';
}
View::render('admin/remove_strazi', [
'pageHeader' => 'Strazi',
'pageTitle' => 'Strazi / Șterge Strada',
'id' => $id,
'error' => $error
]);
}
/**
* @param $request
*/
public function delete($request)
{
$id = (int)$request;
$error = null;
if (\App\Models\Strazi::all()->where('id', $id)->first()) {
try {
\App\Models\Strazi::where('id', $id)->delete();
SystemLogger::log('Strazi', 'Strada cu id-ul: ' . $id . ' a fost ștearsa.');
} catch (\Exception $e) {
$error = $e->getMessage();
}
} else {
$error = 'Nu s-a gasit nici o strada cu id-ul introdus!!';
}
View::render('admin/delete_strazi', [
'pageHeader' => 'Strazi',
'pageTitle' => 'Strazi / Șterge strada',
'id' => $id,
'error' => $error
]);
}
}
Models Tari
<?php
namespace App\Models;
use Core\Model;
class Tari extends Model
{
protected $table = "tari";
protected $fillable = ["nume_tara", "nume_capitala", "updated_at", "created_at"];
public function judete()
{
return $this->hasMany(Judete::class, 'id_judet', 'id');
}
}
?>
Models Ajax
<?php
namespace App\Controllers;
use Core\Controller;
use Core\Request;
use Core\IlluminateDb;
class Ajax extends Controller
{
public function judete()
{
$id_tara = Request::hasArgument('id_tara', 'POST') ? Request::getArgument('id_tara', 'POST') : null;
$judete = IlluminateDb::table('judete')->where('id_tara', '=', $id_tara)->get(['id', 'nume_judet'])->toJson();
echo $judete;
}
/**
* @return string
*/
public function clase()
{
$scoala = Request::hasArgument('scoala_id', 'POST') ? Request::getArgument('scoala_id', 'POST') : null;
$scoli = IlluminateDb::table('clase')->where('scoala','=',$scoala)->get(['id','nume'])->toJson();
return $scoli;
}
/**
* @return string
*/
public function elevi()
{
$clasa = Request::hasArgument('clasa','POST') ? Request::getArgument('clasa','POST'):null;
$elevi = IlluminateDb::table('elevi')->where('clasa','=',$clasa)->get(['id','cnp','nume','prenume','nr_matricol'])->toJson();
return $elevi;
}
}
Models Judete
<?php
namespace App\Models;
use Core\Model;
class Judete extends Model
{
/**
* @var string
*/
protected $table = "judete";
/**
* @var string[]
*/
protected $fillable =
[
"nume_judet",
"id_tara"
];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function tara()
{
return $this->hasOne(Tari::class, 'id', 'id_tara');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function getTara()
{
return $this->hasOne(Tari::class, 'id', 'id_tara');
}
}
?>