wiki:phpgwapi/expressoAjax

Version 11 (modified by amuller, 14 years ago) (diff)

--

Esta página inicia as discussões sobre a camada AJAX (Javascript e XML) centralizada do Expreso. A proposta inicial (protótipo) possui os seguintes componentes:

expressoAjax.js - Script base
coder.js - Contém encode e decode de base64,md5 e url
dom.js - Contém manipuladores de objetos na tela (formulários dinâmicos e etc...)
dragdrop.js - Manipulador de soltar e arrastar
lang.js - Tratamento de internacionalização no js

Além disso será ainda implementado:

  • Janelas
  • Efeitos em imagens
  • Abas
  • Editor de texto (ckeditor)

Como funciona

A idéia é que esta camada seja uma biblioteca ajax completa, como as outras de forma que seja possível utilizá-la em qualquer ambiente até mesmo fora do Expresso. Quando o módulo é carregado, antes da página principal começar a ser processada diversos códigos da API do Egroupware começam a ser executados. Neste ponto é incluído o script base da lib Ajax. Esta base encarrega-se de criar o objeto expresso no escopo do javascript.

Para utilizar qualquer um dos componentes (que não são carregados automaticamente) basta executar o script:

expresso.require('coder.js');

// Neste momento é carregado e instanciado o objeto coder que pode ser usado como 
var codigo = expresso.coder.base64_encode("string");

Requisições em Background

Esta implementação permite o programador fazer requisições em background

var handler_folders = function (data) { alert(data); };
cExecute ("expressoMail1_2.imap_functions.show_folders", handler_folders);

Esta requisição hipotética chamaria show_folders da classe imap_functions no módulo ExpressoMail?

expresso.connector.cacheNextRequest();
cExecute ("$this.imap_functions.show_message&uid=100", handler_message_show);

Esta requisição chama show_message do módulo corrente, e grava o resultado na memória para as próximas requisições

expresso.connector.cacheNextRequest(1);
cExecute ("$this.imap_functions.show_message&uid=100", handler_message_show);

A diferença deste exemplo é que a requisição irá expirar.

expresso.connector.purgeCache();
cExecute ("$this.imap_functions.delete_message&uid=100", handler_message_show);

Esta requisição chama delete_message do módulo corrente, e apaga os resultados gravados anteriores

Funções

Estas funções são providas para os scripts client-side de todos os módulos

borkb(size)
Retorna no formato kb,mb ou gb um tamanho em bytes
Entrada: integer
Saída: string


url_encode(str)
Codifica uma string para ser usada em url
Entrada: string
Saída: string


url_decode(str)
Decodifica uma string url
Entrada: string
Saída: string

replaceAll(string, token, newtoken)
substitui todas as ocorrências de token por newtoken na string
Entrada: string, string, string
Saída: string

config_events(pObj, pEvent, pHandler)
Atribui tratadores aos eventos de elementos da página, por exemplo onclick, onmouseover etc...
Entrada: objeto, evento e função
Sem saída

createAndSet(elemType,attributes,values,innerCode)
Cria elemento, seta atributos e código
Saída: elemento

appendChilds(elem,elem1,elem2...)
Anexa elementos (elem1,elem2...) em elem
Saída: elemento pai


removeAll(id)
Remove todos os elementos da página com atributo id igual "id"
Entrada: string
Sem saída

validateEmail(email)
Valida email
Entrada: String
Saída: Boolean

validateDomain(domain)
Valida domínio (www.celepar.pr.gov.br)
Entrada: string
Saída: Boolean

validateUrl(url)
Valida URL (ftp://celepar.pr.gov.br:500)
Entrada: String
Saída Boolean

trim(inputString)
Remove espaços no fim da string
Entrada: String
Saída: String

LTrim(value)
remove espaços no começo da string
Entrada: String
Saída: String

add_className(obj, className)
Atribui nome de classe a objeto
Entrada: Objeto, String
Sem saída

remove_className(obj, className)
Atribui remove classe de objeto
Entrada: Objeto, String
Sem saída

exist_className(obj, className)
Verifica classe de objeto
Entrada: Objeto, String
Saída: Boolean

validate_date(date)
Valida data no formato DD/MM/AAAA
Entrada: String
Saída: Boolean

get_lang(_key)
Retorna a frase traduzida para _key
Entrada: String
Saída: String

hideBar()
Esconde barra dos módulos
Sem entrada, sem saída

showBar()
Mostra barra dos módulos
Sem entrada, sem saída

changeBar()
Troca estado da barra dos módulos (show, hide)
Sem entrada, sem saída

zoom_in(id)
Faz efeito de zoom em imagem com id
Entrada: String
Sem saída

zoom_out(id)
Tira efeito de zoom em imagem com id
Entrada: String
Sem saída

Criptografia

Para trafegar dados sigilosos entre navegador (cliente) e php (servidor) existe a classe rsa na API do Expresso. O funcionamento é como segue:

1- Quando o Expresso é carregado após o login é gerado um par de chaves (pública e privada)

2- A chave pública é iniciada como atributo da classe expresso.crypt

3- Para criptografar uma string de forma que o servidor entenda basta executar o método expresso.crypt.encode.

4- Na parte do servidor a chave privada está armazenada na sessão e poderá desfazer a criptografia.

Exemplos:

No lado cliente (Javascript):

<script>
password = expresso.crypt.encode(prompt(get_lang('Please, type archive password or leave it empty if it is not encrypted'))); 
cExecute("operacao.enviasenha&senha="+password, handler);
</script>

No lado do servidor PHP:

   require_once('PHPGW_INCLUDE_ROOT.'/phpgwapi/inc/class.rsa.inc.php');
   $rsa = new rsa(); 
   $senha = $rsa->decode($pswd);