|
<?php |
|
|
|
/** |
|
* @author Gabriel P. Fiel <[email protected]> |
|
* @package Banner |
|
*/ |
|
namespace Admin\Controller; |
|
|
|
use Zend\Mvc\Controller\AbstractActionController; |
|
use Zend\View\Model\ViewModel; |
|
use Admin\Form\CriarBanner; |
|
use Admin\Model\Banner; |
|
use Admin\Form\BannerForm; |
|
use Zend\Paginator\Paginator; |
|
use Zend\Paginator\Adapter\Iterator as paginatorIterator; |
|
use Zend\File\Transfer\Adapter\Http; |
|
use Zend\Validator\File\Size; |
|
|
|
class BannerController extends AbstractActionController |
|
{ |
|
|
|
protected $bannerTable; |
|
|
|
public function indexAction() |
|
{ |
|
$page = $this->params()->fromRoute('page') ? (int) $this->params()->fromRoute('page') : 1; |
|
$busca = $this->params()->fromPost('busca') ? $this->params()->fromPost('busca') : null; |
|
|
|
$itemsPerPage = 10; |
|
|
|
$banners = $this -> getBannerTable()->fetchAll(null, $busca); |
|
|
|
if(!$banners -> count() and $busca != null) |
|
{ |
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'erro', 'Não foi encontrado nenhum registro.'); |
|
return $this -> redirect() -> toRoute("banner"); |
|
} |
|
|
|
$paginator = new Paginator(new paginatorIterator($banners)); |
|
$paginator -> setCurrentPageNumber($page) |
|
-> setItemCountPerPage($itemsPerPage) |
|
-> setPageRange(10); |
|
|
|
return new ViewModel(array( |
|
'flashMessages' => $this->flashMessenger()->getMessages(), |
|
'page' => $page, |
|
'paginator' => $paginator, |
|
)); |
|
} |
|
|
|
public function adicionarAction() |
|
{ |
|
$page = $this->params()->fromRoute('page') ? (int) $this->params()->fromRoute('page') : 1; |
|
|
|
$form = new CriarBanner(); |
|
|
|
$idiomas = $this -> pluginFuncoes() -> getIdiomas(); |
|
|
|
$form->get('banners')->setCount($idiomas->count())->prepareFieldset(); |
|
$form->get('banners')->get(0)->get('ind_status')->setAttribute("value","1"); |
|
$form->get('submit')->setValue('Adicionar'); |
|
|
|
$request = $this->getRequest(); |
|
if ($request->isPost()) |
|
{ |
|
$data = $request->getPost()->toArray(); |
|
|
|
$files = $this->params()->fromFiles(); |
|
|
|
$cont = 0; |
|
|
|
foreach ($files['banners'] as $file) { |
|
$data['banners'][$cont]['url_imagem'] = $file['url_imagem']; |
|
$cont++; |
|
} |
|
|
|
|
|
$form->setData($data); |
|
|
|
$form->setValidationGroup(array('banners' => array('url_imagem','nom_banner'))); |
|
|
|
foreach ($data['banners'] as $chave => $h) |
|
{ |
|
if($h['ind_status'] == 2 and $chave > 0) |
|
{ |
|
$form->getInputFilter()->get('banners')->get($chave)->get('url_imagem')->setRequired(false); |
|
} |
|
|
|
if($chave > 0) |
|
{ |
|
$form->getInputFilter()->get('banners')->get($chave)->get('nom_banner')->setRequired(false); |
|
} |
|
} |
|
|
|
|
|
if ($form->isValid()) |
|
{ |
|
$codigos_dos_idiomas = array(); |
|
foreach ($idiomas as $idioma) |
|
{ |
|
$codigos_dos_idiomas[] = $idioma->cod_idioma; |
|
} |
|
|
|
self::uploadImageAndResize($files); |
|
|
|
foreach ($data['banners'] as $chave => $h) |
|
{ |
|
if($chave != 0) |
|
{ |
|
$h['cod_banner_pai'] = $cod_banner_pai; |
|
$h['nom_banner'] = $nom_banner_pai; |
|
} |
|
|
|
$h['cod_idioma'] = $codigos_dos_idiomas[$chave]; |
|
|
|
$banner = new Banner(); |
|
$banner->exchangeArray($h); |
|
if($chave == 0) |
|
{ |
|
$cod_banner_pai = $this->getBannerTable()->cadastrarBanner($banner); |
|
$nom_banner_pai = $banner ->nom_banner; |
|
} |
|
else |
|
{ |
|
$this->getBannerTable()->cadastrarBanner($banner); |
|
} |
|
} |
|
|
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'ok'); |
|
return $this->redirect()->toRoute('banner', array('page' => $page)); |
|
} |
|
else |
|
{ |
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'erro',"Necessário o preenchimento do banner em {$idiomas -> current() -> nom_idioma} e os idiomas que estão ativos."); |
|
} |
|
} |
|
|
|
|
|
$viewmodel = new ViewModel(array( |
|
'form' => $form, |
|
'page' => $page, |
|
'flashMessages' => $this->flashMessenger()->getCurrentMessages(), |
|
'idiomas' => $idiomas |
|
)); |
|
return $viewmodel; |
|
} |
|
|
|
public function deletarAction() |
|
{ |
|
$page = $this->params()->fromRoute('page') ? (int) $this->params()->fromRoute('page') : 1; |
|
$cod_banner = $this->getEvent() |
|
->getRouteMatch() |
|
->getParam('cod_banner'); |
|
|
|
|
|
|
|
$banner = $this->getBannerTable()->getBanner($cod_banner); |
|
|
|
$retorno = $this->getBannerTable()->deletarBanner($cod_banner, $this -> pluginFuncoes()); |
|
|
|
if(!$retorno) |
|
{ |
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'ok'); |
|
} |
|
else |
|
{ |
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'erro', $retorno); |
|
} |
|
|
|
return $this->redirect()->toRoute('banner', array('page' => $page)); |
|
} |
|
|
|
public function editarAction() |
|
{ |
|
$page = $this->params()->fromRoute('page') ? (int) $this->params()->fromRoute('page') : 1; |
|
$cod_banner = ((int) $this->params('cod_banner') ? (int) $this->params('cod_banner') : (int) $this->params('cod_banner')); |
|
|
|
$banner = $this->getBannerTable()->getBanner($cod_banner); |
|
|
|
$form = new CriarBanner(); |
|
|
|
$idiomas = $this -> pluginFuncoes() -> getIdiomas(); |
|
|
|
if($banner -> count() != $idiomas -> count()) |
|
{ |
|
foreach ($banner as $ha) |
|
{ |
|
$idiomas_da_banner[] = $ha -> cod_idioma; |
|
} |
|
foreach ($idiomas as $idioma) |
|
{ |
|
$idiomas_existentes[] = $idioma -> cod_idioma; |
|
} |
|
|
|
$idiomas_novos = array_diff($idiomas_existentes, $idiomas_da_banner); |
|
|
|
foreach ($idiomas_novos as $in) |
|
{ |
|
$banner = new Banner(); |
|
$banner -> cod_banner_pai = $cod_banner; |
|
$banner -> cod_idioma = $in; |
|
$banner -> ind_status = 2; |
|
$banner -> nom_banner = ""; |
|
$this->getBannerTable()->cadastrarBanner($banner); |
|
} |
|
|
|
$banner = $this->getBannerTable()->getBanner($cod_banner); |
|
$idiomas = $this -> pluginFuncoes() -> getIdiomas(); |
|
} |
|
|
|
|
|
$form->get('banners')->setCount($idiomas->count())->prepareFieldset(); |
|
|
|
foreach ($banner as $ha) { |
|
$banners_lista[] = (array) $ha; |
|
} |
|
|
|
$banners_lista[] = array(); |
|
|
|
$form->setData(array("banners" => $banners_lista)); |
|
$form->get('submit')->setValue('Editar'); |
|
|
|
$request = $this->getRequest(); |
|
if ($request->isPost()) { |
|
$banner = new Banner(); |
|
$form->setInputFilter($banner->getInputFilter()); |
|
$data = $request->getPost()->toArray(); |
|
|
|
$form->setValidationGroup(array('banners' => array('nom_banner'))); |
|
$form->setData($data); |
|
|
|
foreach ($data['banners'] as $chave => $h) |
|
{ |
|
if($h['ind_status'] == 2 and $chave > 0) |
|
{ |
|
$form->getInputFilter()->get('banners')->get($chave)->get('nom_banner')->setRequired(false); |
|
} |
|
} |
|
|
|
if ($form->isValid()) |
|
{ |
|
foreach ($data['banners'] as $h) |
|
{ |
|
$banner->exchangeArray($h); |
|
$this->getBannerTable()->editarBanner($banner); |
|
} |
|
|
|
|
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'ok'); |
|
return $this->redirect()->toRoute('banner', array('page' => $page)); |
|
} |
|
else |
|
{ |
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'erro',"Necessário o preenchimento do banner em {$idiomas -> current() -> nom_idioma} e os idiomas ativos."); |
|
} |
|
} |
|
|
|
|
|
$viewmodel = new ViewModel(array( |
|
'form' => $form, |
|
'page' => $page, |
|
'flashMessages' => $this->flashMessenger()->getCurrentMessages(), |
|
'idiomas' => $idiomas |
|
)); |
|
return $viewmodel; |
|
} |
|
|
|
public function uploadImageAndResize($files) |
|
{ |
|
$adapter = new Http(); |
|
|
|
$files = $adapter->getFileInfo(); |
|
|
|
echo '<pre>'; |
|
print_r($files); |
|
|
|
if (!$adapter->isUploaded($files['banners_0_'])) { |
|
print "Why havn't you uploaded the file ?"; |
|
} |
|
exit; |
|
$adapter->setDestination($this -> pluginFuncoes() -> getBasePath() . '/assets'); |
|
|
|
foreach ($files['banners'] as $file) |
|
{ |
|
$size = new Size(array( |
|
'min' => 100 |
|
)); // minimum bytes filesize |
|
|
|
$adapter->setValidators(array( |
|
$size |
|
), $file['url_imagem']['name']); |
|
|
|
if(!empty($file['url_imagem']['name'])) |
|
{ |
|
if($adapter->isValid()) |
|
{ |
|
$novo_nome = date("d-m-Y_H-i-s").'.jpg'; |
|
|
|
$adapter->addFilter('File\Rename', array( |
|
'target' => $adapter->getDestination() . "/banner/original/{$novo_nome}", |
|
'overwrite' => true |
|
)); |
|
|
|
if ($adapter->receive($file['url_imagem']['name'])) |
|
{ |
|
$thumbnailer = $this->getServiceLocator()->get('WebinoImageThumb'); |
|
$thumb = $thumbnailer->create($this -> pluginFuncoes() -> getBasePath() . "/assets/banner/original/{$novo_nome}", $options = array()); |
|
|
|
$thumb->resize(240, 240); |
|
$thumb->save($this -> pluginFuncoes() -> getBasePath() . "/assets/banner/miniatura/{$novo_nome}"); |
|
|
|
} |
|
else |
|
{ |
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'erro', "Erro ao enviar o arquivo {$file['url_imagem']['name']}."); |
|
} |
|
} |
|
else |
|
{ |
|
$dataError = $adapter->getMessages(); |
|
|
|
$error = array(); |
|
foreach ($dataError as $key => $row) { |
|
$error .= '<br/>' . $row; |
|
} |
|
|
|
if($error) |
|
$this -> pluginMensagem() -> adicionarMensagem($this->params('action'),'erro', $error); |
|
} |
|
} |
|
} |
|
} |
|
|
|
public function getBannerTable() |
|
{ |
|
if (! $this->bannerTable) { |
|
$sm = $this->getServiceLocator(); |
|
$this->bannerTable = $sm->get('Admin\Model\BannerTable'); |
|
} |
|
return $this->bannerTable; |
|
} |
|
} |