/**
* JqueryHelper - CakePHP Helper for jQuery
* Autor: Thiago Marini(marinithiago@gmail.com) 2010
*
* Requiriments:
* - jquery: http://docs.jquery.com/Downloading_jQuery
*/
App::import('Helper', 'Form');
App::import('Helper', 'Html');
class JqueryHelper extends AppHelper {
var $helpers = array('Html', 'Icons', 'Form');
var $Html = null;
function __construct() {
$this->Form = new FormHelper();
$this->Html = new HtmlHelper();
parent::__construct();
}
/**
* Retorna um link habilitado p/ gerar popups com comentarios
* @param $id
* @param $nome
* @return html
*/
function commentPopUp($fk, $model) {
$l = '';
$l .= $this->Icons->mk('comment', 'Comentários') . '';
return $l;
}
/**
* Retorna um link habilitado p/ insrir comentarios
* @param $id
* @param $nome
* @return html
*/
function commentADDPopUp($fk, $model) {
$dialog_id = 'commentAddPopUpDialog';
$form_id = 'comment_add_form';
$l = '';
$l .= $this->Icons->mk('comment_add', 'Comentários') . '';
return $l;
}
/**
* Retorna um link habilitado para gerar popup de criação de chamado.
*
* @param type $model
* @param type $fk
* @return string
*/
function chamadoPopUp($model = false, $fk = false) {
$params = '';
if ($model && $fk) {
$params = "'$model', $fk";
} else {
$params = "false, false";
}
$l = '';
return $l;
}
/**
* CHECKLIST
*
* 1) Usar o metodo dialogLink p/ criar a chamada
* 2) O link deve ter a URL do formulario que sera chamado no parametro lang
* 3) Chamar este metodo p/ gerar o form com submit via ajax
* 4) O id do formulario tem que ser o mesmo do param $form_id
* 5) O formulario deve ter o parametro onsubmit="return dialog_ajax_form() ou uma custom"
*
* @param $link_selector - selector que vai receber o evento onclick
* @param $titulo - titulo do box
* @param $dialog_id - id do box
* @param $form_id - id do formulario
* @param $update_id - id da div que encapsula o elemento a ser atualizado
* @param $update_url - url para buscar as atualizacoes
* !! parametros abaixo devem ser usados caso haja mais de 1 formulario com dilog na pagina
* @param $dialog_funcao_nome - nome da funcao do dialod
* @param $form_funcao_nome - nome da funcao do formulario
* @return javascript
*/
function dialogAjaxForm($titulo, $dialog_id, $form_id, $update_id, $update_url, $dialog_funcao_nome = null, $form_funcao_nome = null, $width = '450') {
$r = 'function ' . (!$form_funcao_nome ? 'dialog_ajax_form' : $form_funcao_nome) . '() {
// esvazia o box
$("#' . $dialog_id . ' div.conteudo").find("input[type=submit]").parent("div").html("enviando...");
$.post($("#' . $form_id . '").attr("action"), $("#' . $form_id . '").serialize(),
function(data) {
// esvazia o box
$("#' . $dialog_id . ' div.conteudo").html(\'
' . $this->Icons->img('loadingAnimation.gif', 'carregando') . '\');
if(data.status == "success") {
// fecha o dialog
$("#' . $dialog_id . '").dialog("close");
// atualiza a listagem
$("#' . $update_id . '").html(\'
' . $this->Icons->img('loadingAnimation.gif', 'carregando') . '\');
$.get("' . $this->Html->url($update_url) . '", function(data) {
$("#' . $update_id . '").html(data);
});
} else {
$("#' . $dialog_id . ' div.conteudo").html(data.output);
}
}, "json");
return false;
}
';
$d = $this->dialogForm($titulo, $dialog_id, false, $dialog_funcao_nome, $width);
// coloca o atributo onsubmit para chamar a funcao ajax no formulario
return $d[0] . '';
}
/**
* Para funcionar, esta funcao precisa que a URL que sera usada
* na chamada ajax seja colocada no atributo lang do elemento $link_selector
*
* @param $link_selector - selector que vai receber o evento onclick
* @param $titulo - titulo do box
* @param $dialog_id - id do box
* @param $js_block - flag p/ indicar se eh p/ retornar com tag ';
} else {
return array('', $r);
}
}
/**
* Funcao que gera um link para chamar os formularios em ajax
* @param $texto
* @param $url
* @param $funcao_nome
* @return
*/
function dialogLink($texto, $url, $funcao_nome = null, $linkAcoes = false, $classe = null) {
$class = '';
if ($linkAcoes) {
$class = ' button';
}
if ($classe) {
$class = " $classe";
}
$id = 'id' . Util::uniqueKey();
$r = '';
$r .= $texto;
$r .= '';
return $r;
}
/**
*
* @param $url
* @return
*/
function location($url) {
$r = "window.location.href='$url/' + $(this).val()";
return $r;
}
/**
* Inclui o JS datepicker-pt-BR e depois injeta a chamada do datepicker
* utilizando a classe .date-picker
*
* @important Os valores 1:15:15 servem para solucionar o problema do
* horário de verão!
* @param $inicio - data yyyy-mm-dd
* @param $termino - data yyyy-mm-dd
* @return
*/
function datePicker($inicio = NOW, $termino = null) {
$minDate = '';
$maxDate = '';
// so funciona o new date se der explode na data no firefox
if ($inicio) {
$ini = explode('-', $inicio);
$ini[1] = $ini[1] - 1;
$minDate = "minDate: new Date({$ini[0]},{$ini[1]},{$ini[2]},1,15,15), ";
}
if ($termino) {
$ter = explode('-', $termino);
$ter[1] = $ter[1] - 1;
$maxDate = "maxDate: new Date({$ter[0]},{$ter[1]},{$ter[2]},1,15,15), ";
}
$content = '$(".date-picker").datepicker("destroy");
$(".date-picker").datepicker({
changeMonth: true,
changeYear: true,
showOn: "both",
yearRange: "1930:2030",
' . $minDate . '
' . $maxDate . '
buttonImage: "' . CARIBE_STATIC . 'img/cal.gif",
buttonImageOnly: true,
duration: "normal",
showAnim: "blind"
});';
return $this->jsBlock($content);
}
/**
* Monta javascript necessario p/ fazer a busca por ajax
* @param $return
* @param $front
* @return
*/
function cep($value = null, $front = false, $tipoEndereco = false) {
$aId = 'link' . date('his') . rand();
$url = $this->Html->url("/enderecos/cep");
$r = '';
$r .= '
';
$r .= '';
$r .= '';
$r .= '';
$r .= ' ';
$r .= '';
$r .= '
';
$r .= $this->jsBlock('$("#' . $aId . '").click( function(){
var cep = $("#busca-cep' . ($tipoEndereco ? "-$tipoEndereco" : '') . '").val();
if(cep != "") {
$("#resultado-cep' . ($tipoEndereco ? "-$tipoEndereco" : '') . '").html(\'
' . $this->Icons->img('loadingAnimation.gif', 'carregando') . '\');
var url = "' . $url . '/" + cep + "/' . $tipoEndereco . '";
$.post(url, function(data){
$("#resultado-cep' . ($tipoEndereco ? "-$tipoEndereco" : '') . '").html(data);
});
}
return false;
}); ');
return $r;
}
/**
* Cria um bloco js e injeta javascript no meio
* @param $content
* @return
*/
function jsBlock($content) {
return '';
}
/**
* Cria base para scripts jquery.
* Garante que o script so sera executado apos
* o carreganmento do DOM
* @param $content
* @return
*/
function docReady($content) {
return '$(function() { ' . $content . ' } );';
}
/**
* Metodo para validação de dados do formulario via ajax
* @param String $id
* @param String $btn
* @return string
*/
function validateModelItens($id, $btn) {
$js = '';
return $js;
}
/**
* Cria um dialog pronto p/ uso
* @param string $id
* @return string
*/
function newDialog($id = 'newDialog') {
return <<
SCRIPT;
}
}
?>