Changes between Version 1 and Version 2 of Contribuicoes/pSync/ManualDesenvolvimento


Ignore:
Timestamp:
06/18/09 12:30:28 (15 years ago)
Author:
wmerlotto
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Contribuicoes/pSync/ManualDesenvolvimento

    v1 v2  
    33O pSync foi totalmente baseado no Foundation, um connector de exemplo disponibilizado pelo Funambol. 
    44 
    5 == Estrutura == 
     5=== Estrutura === 
    66O módulo está dividido em vários diretórios: 
    77 * '''/build''': Estão os ant-files responsáveis pela "compilação" do plugin; 
     
    2727As classes ''!SyncSourceConfigPanel'' derivam do pacote ''funambol-admin'', neste pacote encontram-se as classes usadas na criação da interface de configuração do módulo. As classes ''!SyncSource'' derivam do pacote ''funambol-framework'', neste pacote encontram-se as classes necessárias para manipular os dados durante a sincronia. 
    2828 
    29 == '''funambol.framework''' == 
     29=== '''funambol.framework''' === 
    3030Este pacote contém os serviços e abstrações usadas em diferentes camadas para implementar o componente. Os serviços mais importantes fornecidos pelo framework são: 
    3131 
     
    3939  * Detectar e resolver conflitos; 
    4040 
    41 == '''!SyncSourceConfigPanel.java''' == 
     41=== '''!SyncSourceConfigPanel.java''' === 
    4242Classes responsáveis pela interface para o gerenciamento das configurações dos !SyncSources.[[br]] 
    4343Os !SyncSources são os arquivos de configuração responsáveis por indicar quais tabelas serão sincronizadas, os tipos de sincronia permitidos e outras informações. 
    4444 
    45 == '''!SyncSource.java''' == 
     45=== '''!SyncSource.java''' === 
    4646Essas classes são responsáveis por manipular os dados a serem sincronizados, são as classes que fazem a interface entre o servidor Funambol e o banco de dados. 
     47 
     48== Mapeamento das informações no Expresso Livre == 
     49Este wiki tem como finalidade fazer um mapeamento mais detalhado das tabelas utilizadas para armazenar contatos e eventos no banco de dados do Expresso Livre. 
     50 
     51=== '''Contatos''' === 
     52Os dados dos contatos estão dividos em 25 tabelas, mas em 2 tabelas se encontram todos os dados necessários para o contato. Os dados que poderão ser utilizados no padrão [http://www.w3.org/2002/12/cal/rfc2426 vCard] são os seguintes: 
     53 
     54Tabela: '''phpgw_cc_contact''' 
     55 
     56||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     57||id_contact||int8('''''NOT NULL''''')[pk]||Numero de identificação do contato.|| 
     58||id_owner||int8('''''NOT NULL''''')||Numero de identificação do dono do contato.|| 
     59||id_status||int4||Numero de identificação para contato completo ou simples.|| 
     60||photo||bytea||Valor binário da imagem de exibição do contato.|| 
     61||alias||varchar(30)||Guarda o nome de exibição do contato.|| 
     62||id_prefix||int4||NULL ( Nenhum dos exemplos criados chegaram a ocupar esse espaço)|| 
     63||given_names||varchar(100)||Guarda o primeiro nome do contato.|| 
     64||family_names||varchar(100)||Guarda o sobre-nome do contato.|| 
     65||names_ordered||varchar(100)||Guarda o nome completo do contato.|| 
     66||id_suffix||int4||NULL ( Nenhum dos exemplos criados chegaram a ocupar esse espaço)|| 
     67||birthdate||date||Guarda a data de aniversário do contato.|| 
     68||sex||char(1)||Caracter que indentifica o sexo do contato.(nenhum dos exemplos ocupou esse campo, nem havia onde registrar-lo)|| 
     69||pgp_key||text||Chave publica pgp do contato para criptografia das mensagens.|| 
     70||notes||text||Notas sobre o contato.|| 
     71||is_global||bool||Flag que define se o contato é publico ou privado.|| 
     72 
     73---- 
     74Tabela: '''phpgw_cc_connections''' 
     75 
     76||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     77||id_connection||int8('''''NOT NULL''''')[pk]||Numero de identificação da ligação com o contato|| 
     78||connection_name||varchar(50)||Guarda o nome do endereço de e-mail ou telefone do contato.[[BR]]Principal   : Para o e-mail principal do contato[[BR]]Alternativo : para o e-mail alternativo do contato[[BR]]Residencial : Para o telefone Residencial do contato[[BR]]Celular     : Para o telefone Celular do contato[[BR]]Comercial   : Para o telefone Comercial do contato[[BR]]Fax         : Para o telefone Fax do contato[[BR]]Pager       : Para o telefone Pager do contato|| 
     79||connection_value||varchar(50)||Guarda o valor do e-mail ou telefone do contato.|| 
     80||connection_is_default||bool||Define se o endereço ou e-mail é o padrão do contato.|| 
     81 
     82---- 
     83Tabela: '''phpgw_cc_addresses''' 
     84 
     85||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     86||id_address||int8('''''NOT NULL''''')[pk]||Numero de identificação do endereço|| 
     87||id_city||int8||Numero de identificação da cidade|| 
     88||id_state||int8||Numero de identificação do estado|| 
     89||id_country||bpchar(2)('''''NOT NULL''''')||Numero de identificação do pais|| 
     90||address1||varchar(60)||Endereço principal|| 
     91||address2||varchar(60)||Endereço secundário|| 
     92||complement||varchar(30)||Complemento|| 
     93||address_other||varchar(60)||Outro endereço|| 
     94||postal_code||varchar(15)||CEP|| 
     95||po_box||varchar(30)||Caixa Postal|| 
     96||address_is_default||boolean||Endereço é padrão?|| 
     97 
     98---- 
     99As tabelas '''phpgw_cc_contact''' e '''phpgw_cc_connections''' estão ligadas num relacionamento de 1/N através dessa tabela:[[BR]] Tabela: '''phpgw_cc_contact_conns''' 
     100 
     101||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     102||id_contact||int8[pk]||Guarda a identificação do contato|| 
     103||id_connection||int8[pk]||Guarda a identificação da conexão do contato|| 
     104||id_typeof_contact_connection||int4||Guarda o tipo de conexao com o contato:[[BR]]1: Para e-mail[[BR]]2: Para Telefone|| 
     105 
     106---- 
     107As tabelas '''phpgw_cc_contact''' e '''phpgw_cc_addresses''' estão ligadas num relacionamento de 1/N através dessa tabela:[[BR]] Tabela: '''phpgw_cc_contact_addrs''' 
     108 
     109||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     110||id_contact||int8[pk]||Numero de identificação do contato|| 
     111||id_address||int8[pk]||Numero de identificação do endereço|| 
     112||id_typeof_contact_address||int4||Numero de identificação do tipo de endereço:[[BR]]1 : Para endereço comercial[[BR]]2 : Para endereço residencial|| 
     113 
     114---- 
     115=== '''Calendário''' === 
     116Os dados do calendário estão divididos em 5 tabelas, mas em 2 tabelas podem ser encontradas todas as informações relativas aos eventos. 
     117 
     118Tabela: '''phpgw_cal''' 
     119 
     120||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     121||cal_id||int4('''''NOT NULL''''')[pk]||Numero de identificação do evento.[[BR]]O valor padrão é dado pela seqüencia ''nextval(('seq_phpgw_cal'::text)::regclass)''|| 
     122||uid||varchar(255)('''''NOT NULL''''')||Guarda o dominio onde o usuario está inserido ( ex. -@servidor.com.br , joao@servidor.com.br )|| 
     123||owner||int8('''''NOT NULL''''')||Numero de identificação do dono do evento|| 
     124||category||varchar(30)||Define se o evento está em alguma categoria.[[BR]]1 : Para evento com categoria[[BR]]' ': Para evento sem categoria|| 
     125||groups||varchar(255)||NULL (todos os eventos que foram criados ficaram com esse valor)|| 
     126||datetime||int8||Guarda, em microtime, a data e hora em que o evento irá acontecer.|| 
     127||mdatetime||int8||Guarda, em microtime, a data e hora em que o evento foi criado.|| 
     128||edatetime||int8||Guarda, em microtime, a data e hora em que o evento irá terminar.|| 
     129||priority||int8('''''NOT NULL''''')||Define a prioridade do evento.[[BR]]0 : Para evento sem prioridade[[BR]]1 : Para evento com prioridade baixa[[BR]]2 : Para evento com prioridade média[[BR]]3 : Para evento com prioridade alta|| 
     130||cal_type||varchar(10)||Define se o evento será repetido.[[BR]]E : Para evento unico[[BR]]M : Para evento com repetição|| 
     131||is_public||int8('''''NOT NULL''''')||Define se o evento será publico.[[BR]]0 : Para evento particular[[BR]]1 : Para evento público|| 
     132||title||varchar(80)('''''NOT NULL''''')||Guarda o titulo do evento.|| 
     133||description||text||Guarda a descrição do evento.|| 
     134||location||varchar(255)||Guarda o local onde o evento irá ocorrer.|| 
     135||reference||int8('''''NOT NULL''''')||Quando um evento de um evento recursivo é editado, esse campo recebe o cal_id referente ao evento que foi editado.|| 
     136||ex_participants||text||Guarda os e-mails dos participantes que não estão em nenhum grupo.[[BR]]Os participantes estão separados por virgulas.|| 
     137 
     138---- 
     139Essas tabelas tem um relacionamento de 1/1, onde o campo ''cal_type'' deve estar com o valor '''m''' para que haja uma entrada na tabela abaixo.[[BR]] Tabela: '''phpgw_cal_repeats''' 
     140 
     141||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     142||cal_id||int8('''''NOT NULL''''')||Numero de identificação do evento.|| 
     143||recur_type||varchar(30)('''''NOT NULL''''')||Define o tipo de repetição do evento.[[BR]]1 : Para evento diário[[BR]]2 : Para evento semanal[[BR]]4 : Para evento mensal por dia[[BR]]3 : Para evento mensal por data[[BR]]5 : Para evento anual|| 
     144||recur_use_end||int8||0 (Todos os eventos ficaram com esse valor)|| 
     145||recur_enddate||int8||Guarda, em microtime, a data em que a repetição do evento irá terminar.|| 
     146||recur_interval||int8||Guarda o intervalo em que o evento ira ocorrer. [[BR]] 0 : Para um evento unico [[BR]] 1 : Para um evento diario ou semanal ou mensal ( passo de 1 ) [[BR]] 2 : Para eventos a cada 2 dias, 2 semanas 2 meses [[BR]] e assim por diante.|| 
     147||recur_data||int8||Guarda quais dias da semana o evento irá acontecer, a somatória desses valores indicará os dias que foram marcados[[BR]]1 : Domingo[[BR]]2 : Segunda[[BR]]4 : Terça[[BR]]8 : Quarta[[BR]]16 : Quinta[[BR]]32 : Sexta[[BR]]64 : Sabado[[BR]](Ex.: 42 = Segunda(2), Quarta(8) e Sexta(32))|| 
     148||recur_exception||varchar(255)||Guarda, em microtime, os dias em que não haverá o evento.[[BR]]Esses dias são separados por virgula.|| 
     149 
     150---- 
     151O evento somente será exibido se houver uma entrada nesta tabela indicando a ''ID'' do evento e a ''ID'' do dono. Tabela: '''phpgw_cal_user''' 
     152 
     153||'''Campo'''||'''Tipo'''||'''Descrição'''|| 
     154||cal_id||int8('''''NOT NULL''''')||Numero de identificação do evento.|| 
     155||cal_login||int8('''''NOT NULL''''')||Numero de identificação do dono do evento.|| 
     156||cal_status||char(1)||Define se o usuário aceitou ou não participar do evento.[[BR]]A : Se aceitou participar[[BR]]U : Se não aceitou participar|| 
     157||cal_type||varchar(1)('''''NOT NULL''''')||Guarda algum tipo de informação que ainda não foi possível descobrir|| 
     158 
     159== Alterações no código e banco de dados do Expresso Livre == 
     160Como a solução já está em produção há um bom tempo, as alterações já fazem parte do código do Expresso Livre. De qualquer forma, as alterações do contactcenter estão descritas no ticket #150 e revisão [203], juntamente com outras alterações de internacionalização.  Já as alterações do calendar não estão registradas no svn, mas como são poucas alterações, vou colocá-las aqui mesmo: 
     161{{{ 
     162diff -Naur old/calendar/inc/class.socalendar_sql.inc.php new/calendar/inc/class.socalendar_sql.inc.php 
     163--- old/calendar/inc/class.socalendar_sql.inc.php       2007-03-22 16:58:17.000000000 -0300 
     164+++ new/calendar/inc/class.socalendar_sql.inc.php       2007-10-02 17:12:09.000000000 -0300 
     165@@ -606,6 +606,7 @@ 
     166                                        . "',".(int)$event['owner'].','.(int)$event['priority'].','.(int)$event['public'].",'" 
     167                                        . $event['category']."')",__LINE__,__FILE__); 
     168                                $event['id'] = $this->stream->get_last_insert_id('phpgw_cal','cal_id'); 
     169+                               $last_status = true; 
     170                        } 
     171 
     172                        $date = $this->maketime($event['start']) - $GLOBALS['phpgw']->datetime->tz_offset; 
     173@@ -636,6 +637,7 @@ 
     174                                        . "location='".$this->stream->db_addslashes($event['location'])."', " 
     175                                        . ($event['groups']?"groups='".(count($event['groups'])>1?implode(',',$event['groups']):','.$event['groups'][0].',')."', ":'') 
     176                                        . 'reference='.(int)$event['reference'].' ' 
     177+                                       . ',last_status = '.($last_status ? "'N'" : "'U'").',last_update = '.time()."000". ' ' 
     178                                        . 'WHERE cal_id='.(int)$event['id']; 
     179 
     180                        $this->stream->query($sql,__LINE__,__FILE__); 
     181}}} 
     182 
     183Quanto ao banco de dados, foi necessário realizar algumas alterações conforme os comandos: 
     184{{{ 
     185ALTER TABLE phpgw_cal ADD COLUMN last_status char(1) DEFAULT 'N'::bpchar; 
     186ALTER TABLE phpgw_cal ADD COLUMN last_update int8 DEFAULT (date_part('epoch'::text, ('now'::text)::timestamp(3) with time zone) * (1000)::double precision); 
     187 
     188ALTER TABLE phpgw_cc_contact ADD COLUMN last_status char(1) DEFAULT 'N'::bpchar; 
     189ALTER TABLE phpgw_cc_contact ADD COLUMN last_update int8 DEFAULT (date_part('epoch'::text, ('now'::text)::timestamp(3) with time zone) * (1000)::double precision); 
     190ALTER TABLE phpgw_cc_contact ADD COLUMN category character varying(20); 
     191}}}