| 47 | |
| 48 | == Mapeamento das informações no Expresso Livre == |
| 49 | Este 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''' === |
| 52 | Os 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 | |
| 54 | Tabela: '''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 | ---- |
| 74 | Tabela: '''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 | ---- |
| 83 | Tabela: '''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 | ---- |
| 99 | As 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 | ---- |
| 107 | As 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''' === |
| 116 | Os 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 | |
| 118 | Tabela: '''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 | ---- |
| 139 | Essas 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 | ---- |
| 151 | O 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 == |
| 160 | Como 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 | {{{ |
| 162 | diff -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 | |
| 183 | Quanto ao banco de dados, foi necessário realizar algumas alterações conforme os comandos: |
| 184 | {{{ |
| 185 | ALTER TABLE phpgw_cal ADD COLUMN last_status char(1) DEFAULT 'N'::bpchar; |
| 186 | ALTER TABLE phpgw_cal ADD COLUMN last_update int8 DEFAULT (date_part('epoch'::text, ('now'::text)::timestamp(3) with time zone) * (1000)::double precision); |
| 187 | |
| 188 | ALTER TABLE phpgw_cc_contact ADD COLUMN last_status char(1) DEFAULT 'N'::bpchar; |
| 189 | ALTER TABLE phpgw_cc_contact ADD COLUMN last_update int8 DEFAULT (date_part('epoch'::text, ('now'::text)::timestamp(3) with time zone) * (1000)::double precision); |
| 190 | ALTER TABLE phpgw_cc_contact ADD COLUMN category character varying(20); |
| 191 | }}} |