Start-a-Party
From Laboratório MM 5
(→Base de dados desenvolvida) |
(→Referências bibliográficas) |
||
| (9 intermediate revisions not shown) | |||
| Line 31: | Line 31: | ||
O Start-a-Party trata-se de uma plataforma Web de domínio publico, idealizada de encontro com os conceitos da Web 2.0, que consiste num local especializado para a criação e divulgação de eventos festivos de uma forma segura e simples. Ao entrar na plataforma, o utilizador terá as opções de registo e pesquisa de festas, a qual poderá ser feita sem a criação de uma nova conta de perfil. Porém, se o mesmo utilizador desejar criar e divulgar uma festa da qual seja organizador/colaborador, terá que proceder a um registo que após efectuado, lhe dará acesso a uma pagina de perfil pessoal, na qual terá a possibilidade de criar e divulgar as festas, juntar-se ou criar novos grupos, ter uma lista de amigos (...). Contudo, se desejar que as suas organizações possuam uma maior visibilidade perante a comunidade, poderá tornar-se num utilizador premium, necessitando para isso do pagamento de uma taxa, que deverá ser renovada todos os meses. Este tipo de utilizadores, para além disto, terão ainda acesso ao upload de vídeos, bem como paginas pessoais promovidas. O principal objectivo do Start-a-Party é a obtenção de lucros, tirando partido dos conceitos da Web 2.0. | O Start-a-Party trata-se de uma plataforma Web de domínio publico, idealizada de encontro com os conceitos da Web 2.0, que consiste num local especializado para a criação e divulgação de eventos festivos de uma forma segura e simples. Ao entrar na plataforma, o utilizador terá as opções de registo e pesquisa de festas, a qual poderá ser feita sem a criação de uma nova conta de perfil. Porém, se o mesmo utilizador desejar criar e divulgar uma festa da qual seja organizador/colaborador, terá que proceder a um registo que após efectuado, lhe dará acesso a uma pagina de perfil pessoal, na qual terá a possibilidade de criar e divulgar as festas, juntar-se ou criar novos grupos, ter uma lista de amigos (...). Contudo, se desejar que as suas organizações possuam uma maior visibilidade perante a comunidade, poderá tornar-se num utilizador premium, necessitando para isso do pagamento de uma taxa, que deverá ser renovada todos os meses. Este tipo de utilizadores, para além disto, terão ainda acesso ao upload de vídeos, bem como paginas pessoais promovidas. O principal objectivo do Start-a-Party é a obtenção de lucros, tirando partido dos conceitos da Web 2.0. | ||
| - | |||
==Base de dados desenvolvida== | ==Base de dados desenvolvida== | ||
| - | [[File:Base dados.png| | + | [[File:Base dados.png|500px|thumb|left|Diagrama da base de dados final.]] |
| Line 139: | Line 138: | ||
===Mapa de páginas=== | ===Mapa de páginas=== | ||
| - | [[Image:Sap_Pagelayout.png|thumb|right|Estrutura básica de uma página da aplicação.]] | + | [[Image:Sap_Pagelayout.png|300px|thumb|right|Estrutura básica de uma página da aplicação.]] |
| + | |||
| + | A grande maioria das páginas segue o modelo representado pela imagem à direita. O contéudo do header e do sidebar variam de acordo com o nível de acesso do utilizador e, pontualmente, com a página onde o utilizador se encontra. | ||
| + | |||
| + | A navegação está limitada pelo nível de acesso. O utilizador não-registado tem o acesso limitado à página inicial (onde se pode efectuar o login e o registo), à secção de ajuda e ao formulário de contacto. | ||
| + | |||
| + | O utilizador registado pode fazer login, que lhe dá acesso à página principal, onde se podem visualizar as festas, a área de promoção, as notícias (posts feito pelo administrador) e a actividade dos grupos a que o utilizador pertence. Pode também, a partir dessa página, aceder à página de criação uma festa, aceder à página de perfil e à página de criação de grupos. | ||
| + | |||
| + | Um utilizador premium é essencialmente idêntico a um utilizador normal, a grande diferença centra-se em que quaisquer posts feitos pelo utilizador premium no seu perfil, irão aparecer no espaço promotor da página principal. Futuramente seria de esperar que esse espaço de promotor se espandisse para mostrar também prioritariamente as festas por eles criadas. | ||
| + | |||
| + | O utilizador admin têm como função regular todo o site. Por isso têm acesso a todas as funcionalidades que todos os utilizadores possam ter. Mesmo que algum utilizador o tenha bloqueado, ou as restrições das festas não permitam a visualização a todos, o admin conseguirá visualizar e editar, tendo uma mensagem a informar de que está bloqueado ou a festa é só para amigos. O utilizador admin têm ainda acesso a um painel de admin onde pode encontrar uma listagem de todo o conteudo do site (ficheiros, posts, grupos, etc) e ver quais são os items reportados, para avaliar e verificar se precisam de moderação ou não. Devido à liberdade sem limites deste nivel de utilizador, existe um numero limitado dos mesmos. | ||
| + | |||
====Server Behaviours utilizados==== | ====Server Behaviours utilizados==== | ||
| Line 289: | Line 299: | ||
====Recordsets/Queries utilizados==== | ====Recordsets/Queries utilizados==== | ||
| + | |||
| + | Sendo este uma aplicação com uma multitude de ecrãs e funcionalidades (inserção, edição e remoção de posts, ficheiros, festas, grupos e respectivos posts e comentários), a quantidade de Recordsets e Queries utilizados é grande, sendo que algumas páginas têm vários recordset e queries, dependendo das funcionalidades. Alguns foram já vistos nos exemplos, apresentados anteriormente, de server behaviors. Os vários graus de complexidade usados demonstram a realidade global dos recordsets usados na aplicação. | ||
| + | |||
====Parâmetros passados entre páginas==== | ====Parâmetros passados entre páginas==== | ||
| Line 308: | Line 321: | ||
O jQueryUI, cujas funcionalidades são imensas, foi utilizado para criar em, quase todas as páginas, accordions. Estes permitem ao utilizador visualizar, numa dada página, apenas o contéudo que lhe interessa de momento, focalizando a sua atenção e diminuindo o volume de informação extra. | O jQueryUI, cujas funcionalidades são imensas, foi utilizado para criar em, quase todas as páginas, accordions. Estes permitem ao utilizador visualizar, numa dada página, apenas o contéudo que lhe interessa de momento, focalizando a sua atenção e diminuindo o volume de informação extra. | ||
| + | |||
| + | A nível do PHP, foi utilizado um script externo para a criação automática de um calendário ([http://keithdevens.com/software/php_calendar PHP Calendar]), sendo que o script foi posteriormente alterado para permitir a integração de tooltips com qTip. | ||
==Desenvolvimentos Futuros== | ==Desenvolvimentos Futuros== | ||
| Line 316: | Line 331: | ||
- Desenvolvimento de novas opções de criação de festas; | - Desenvolvimento de novas opções de criação de festas; | ||
| - | - Desenvolvimento de mais vantagens para utilizadores premium. | + | - Desenvolvimento de mais vantagens para utilizadores premium; |
| + | |||
| + | - Implementação de geolocalização na pesquisa e criação de festas; | ||
| + | |||
| + | - Aperfeiçoamento do aspecto gráfico da aplicação. | ||
==Conclusões== | ==Conclusões== | ||
| Line 323: | Line 342: | ||
==Referências bibliográficas== | ==Referências bibliográficas== | ||
| + | *[http://keithdevens.com/software/php_calendar PHP Calendar] | ||
| + | *[http://plugins.jquery.com/project/DateSelectBoxes Date Select Boxes, jQuery Plugins] | ||
| + | *[http://php.net/manual/en/book.com.php PHP.COM - Manual] | ||
| + | *[http://jqueryui.com/demos/accordion/ jQuery UI - Accordion Demos & Documentation] | ||
Latest revision as of 08:45, 18 January 2011
UA | DeCA | NTC
2010/2011
Realizado no âmbito de:
Laboratório Multimédia V
Docentes:
Hélder Caixinha
Liciínio Mano
Alunos:
André Horta - 46236
Paulo Alves - 47661
Paulo Lopes - 45412
Contents
|
Introdução
No âmbito da articulação das disciplinas de Laboratório Multimédia 5, ICPM, e Gestão de Empresas, surge o desafio de criar um (projecto) que fosse ao encontro dos princípios da Web 2.0 e que incluísse todos os conteúdos abordados durante as aulas. Assim, surge a ideia da criação de uma rede social especializada na criação e divulgação de festas, designada por Star-a-Party.
Objectivo do documento
O presente documento tem como objectivo oferecer um suporte escrito ao projecto Start-a-Party. Nele estarão indicadas todas as implementações e funcionalidades, bem como as principais dificuldades e as soluções encontradas.
Visão geral do projecto
O Start-a-Party trata-se de uma plataforma Web de domínio publico, idealizada de encontro com os conceitos da Web 2.0, que consiste num local especializado para a criação e divulgação de eventos festivos de uma forma segura e simples. Ao entrar na plataforma, o utilizador terá as opções de registo e pesquisa de festas, a qual poderá ser feita sem a criação de uma nova conta de perfil. Porém, se o mesmo utilizador desejar criar e divulgar uma festa da qual seja organizador/colaborador, terá que proceder a um registo que após efectuado, lhe dará acesso a uma pagina de perfil pessoal, na qual terá a possibilidade de criar e divulgar as festas, juntar-se ou criar novos grupos, ter uma lista de amigos (...). Contudo, se desejar que as suas organizações possuam uma maior visibilidade perante a comunidade, poderá tornar-se num utilizador premium, necessitando para isso do pagamento de uma taxa, que deverá ser renovada todos os meses. Este tipo de utilizadores, para além disto, terão ainda acesso ao upload de vídeos, bem como paginas pessoais promovidas. O principal objectivo do Start-a-Party é a obtenção de lucros, tirando partido dos conceitos da Web 2.0.
Base de dados desenvolvida
Apesar da grande complexidade Base de Dados desenvolvida, a mesma pode ser sub-dividida em cinco grupos, sendo eles relativos às festas (a vermelho), aos amigos/amizades (a verde), comentários (a roxo), ficheiros (a azul) e mensagens/posts (a laranja), tendo como elemento central a tabela referente aos Utilizadorres. Nela estarão indicados todos os dados pessoais relativos a cada utilizador registado no site.
O grupo relativo às festas é constituído por cinco tabelas:
Festas: na qual serão registados todos os dados necessários para a criação de uma festa.
GuestList: ligação M:M com a tabela de Utilizadores. Faz a ligação entre essa tabela e a das Festas, sendo que cada pessoa pode ir a várias festas e cada festa pode, claro, ter mais de um participante.
As restante tabelas estabelecem um ligação do tipo 1:M com a tabela de Festas e são, na prática, listas de opções que o Utilizador pode escolhar na criação de um novo evento. Nomeadamente:
Localizacoes: tabela necessária para o registo das variadas localizações que cada festa terá, uma vez que um local poderá ter associada mais que uma festa.
TiposFestas: as festas poderão ser de vários estilos, a serem enumerados nesta tabela.
Visibilidade: as festas poderão ser visíveis ao publico em geral, à lista de amigos do anfitrião, a utilizadores convidados pelo anfitrião, ou só ao anfitrião.
O grupo relativo aos amigos, constituído por cinco tabelas:
listaAmigos: identifica listas de amigos de cada utilizador. É compreendida por duas ligações à tabela dos Utilizadores. Uma relação 1:1, pois cada Utilizador só tem uma lista de amigos. Por outro lado, cada utilizador tem vários amigos, daí a segunda ligação do tipo M:1. Esta tabela faz também ligação com a tiposAmizade.
tiposAmizade: especifica o tipo de relação entre o "dono" da lista de amigos e os outros Utilizadores. Tem os valores: "Friend", "Blocked", "Requested" e "Awaiting Reply".
NiveisAcessos: identifica se o utilizador se trata de utilizador "normal", premium ou admin. Este valor vai limitir o acesso à aplicação.
grupos: como existe a possibilidade de criação de grupos, é necessário uma tabela na qual sejam registados, assim como identificar os utilizadores a eles pertencentes.
Utilizadores_has_grupos: identificação dos grupos a que cada utilizador pertence, sendo que, mais uma vez, se verifica uma relação de muitos para muitos, em tudo semelhante à já descrita.
O grupo relativo aos comentários, constituído por duas tabelas:
Comentarios: fazer o registo dos comentários efectuados, identificando seu autor, data e local onde foi efectuado.
localComentario: identifica os vários locais passíveis de serem comentados (um perfil de utilizador, perfil de festa, foto, vídeo, etc).
O grupo relativo aos ficheiros, constituído por três tabelas:
Galerias: uma tabela complexa. Pode ser criada uma galeria em vários locais, pelo que esta tabela tem relações 1:1 com várias outras (Utilizadores, Festas, Grupos). Depois, estabelece uma ligação com a tabela Ficheiros, de forma a definir qual o contéudo da galeria.
Ficheiros: onde serão guardados todos uploads efectuados (fotos ou vídeos), com informação relativa ao caminho do ficheiro, galeria a que pertence, etc.
TipoFicheiro: se o ficheiro transferido se trata de uma imagem ou vídeo.
O grupo relativo às mensagens, constituído por três tabelas:
mensagensPrivadas: possibilidade de enviar PM's entre utilizadores. Há a associação com a tabela de Utilizadores em dois momentos, pois cada utilizador pode ser, simultaneamente, emissor e receptor de várias mensagens privadas.
Posts: tabela que cataloga os vários posts efectuados por cada utilizador.
localPosts: diversos locais onde os posts poderão ser efectuados (Perfil, Grupo, Espaço Promotor, Página Principal).
Há que destacar dois parâmetros, comuns a todas as tabelas onde irão ser inseridos dados regularmente. O "activo", que quando igualidado a 0 corresponde à destruição de determinada festa, grupo, post, galeria ou ficheiro, sem haver a necessidade de apagar registos da base de dados. O outro parâmetro é o "reportado", que quando igualado a 1 permite chamar a atenção do administrador a determinado contéudo, que poderá posteriormente ser removido.
Implementação
Descrição das principais funcionalidades da aplicação Web
As principais funcionalidades da aplicação Start-a-Party, como o próprio nome indica, gerem à volta da criação de festas e eventos. Mas a aplicação não se limita só a isso, procurando criar uma rede social em volta das mesmas. Portanto, as principais funcionalidades são as seguintes.
Registo e Login
Uma importante funcionalidade, o registo irá permitir ao utilizador usufruir por completo a aplicação. Um utilizador não registado apenas irá conseguir procurar e visualizar as festas, mas nada demais. Será necessário registo e login para conseguir aceder às restantes funcionalidades. Foi dada bastante atenção à segurança nesta fase da aplicação, por duas razões: primeiro, para impedir que alguém se registe com o email de outra pessoa. Segundo, para impedir que alguém tenha acesso aos dados de acesso outros utilizadores.
Criação e Edição de Festas/Eventos
Claramente a funcionalidade mais importante da aplicação e sem a qual a aplicação não teria propósito de ser. Uma festa pode ser criada a partir logo da página inicial, dando a hipótese de se inserir um titulo para a mesma e uma descrição. A data e hora a que se vai realizar e quando se espera terminar. Para além disso pode-se definir o número máximo de convidados, tags para ajudar na busca, a área onde se vai realizar,o tema para a mesma e ainda se está visivel para todos os utilizadores ou apenas amigos. Estes dados podem depois ser editados a qualquer momento. Pelo que se algum erro for cometido pode facilmente ser corrigido.
Ao ser criada, a festa irá aparecer no separador "My Parties" da página principal, e também no separador "Upcoming Parties", juntamente com as festas de todos os outros utilizadores.
Procura de Festas
O sistema de procura serve para aumentar a exposição das festas, podendo listá-las a todas, usar um parametro de busca ou filtrando por zona e tema. Para efectuar uma pesquisa não é necessário estar-se registado. Pelo que irá servir de incentivo a promotores de festas e outros, não vendo assim limites à exposição dos eventos que estejam a organizar.
Gestão de Amizades
Visto que a maioria das festas se espera que sejam de pequenas dimensões e entre amigos. Poder definir utilizadores como amigos e limitar a visiblidade da festa apenas a eles, irá servir de incentivo para a utilização da aplicação a muitas mais pessoas. Para além de permitir pessoas que se tenham encontrado em festas ou outros sitios manter contacto umas com as outras. Assim, indo ao perfil de outro utilizador, pode-se efectuar um pedido de amizade, permitindo ver os seus posts, comentários e fotos, invés de apenas a informação básica. Essa amizade se necessária pode ser cancelada e em casos extremos, pode-se bloquear o utilizador de ver o seu perfil e enviar mensagens.
Criação de Grupos Sociais
A existência dos grupos serve para unir mais os utilizadores. Não existe uma restrição aos grupos a que se pode juntar, pelo que dessa forma, os utilizadores podem-se unir e organizar através dos seus interesses comuns, sem necessitarem de se tornar amigos. Ao se juntar a um grupo, cada membro pode criar posts que irão aparecer na pagina principal de todos os membros, colocar comentarios na pagina do grupo e fazer uploads de fotos. É possivel ainda visualizar uma lista completa dos grupos e no perfil de cada utilizador (caso sejam amigos), ver os grupos a que se juntou. Tais como os perfis, os dados do grupo podem ser editados a qualquer momento pelo fundador.
Criação de Posts
Os posts servem como forma de blog pessoal. Existem três sitios onde se podem fazer posts. No próprio perfil, nos grupos e nas festas que se tiver criado. No caso dos admins, é ainda possivel criá-los directamente na página principal, como notícias para todos os utilizadores verem. Estes posts, se necessário, podem ser editados a qualquer momento.
Sistema de Comentários e Mensagens
Um sistema de comentários foi criado para facilitar a comunicação e organização entre os utilizadores. Esses comentários podem ser inseridos em fotos, posts, perfis, festas e grupos. Cobrindo virtualmente todos os sitios a que os utilizadores têm acesso. No caso de ser necessária uma comunicação mais privada, existe a possiblidade de enviar mensagens privadas a outros utilizadores, bastando apenas para o efeito ir ao perfil deles. Para enviar uma mensagem privada não é necessário ser-se amigo. Mas no caso de ter sido banido pelo utilizador em questão, não é possivel enviar-lhe mensagens privadas.
Galerias de Imagens
Algo que se torna óbvio em qualquer rede social, é o gosto dos utilizadores para partilhar imagens. Assim, qualquer utilizador têm a opção de criar galerias no seu perfil ou nas festas que tenha criado. Após criada, pode fazer upload de até 5 imagens (com tamanho menor do que 1mb) de cada vez. Essas imagens podem depois ser visualizadas na respectiva galeria e comentadas. Também é possivel colocar imagens nos grupos a que se pertence, desde que seja membro.
Mapa de páginas
A grande maioria das páginas segue o modelo representado pela imagem à direita. O contéudo do header e do sidebar variam de acordo com o nível de acesso do utilizador e, pontualmente, com a página onde o utilizador se encontra.
A navegação está limitada pelo nível de acesso. O utilizador não-registado tem o acesso limitado à página inicial (onde se pode efectuar o login e o registo), à secção de ajuda e ao formulário de contacto.
O utilizador registado pode fazer login, que lhe dá acesso à página principal, onde se podem visualizar as festas, a área de promoção, as notícias (posts feito pelo administrador) e a actividade dos grupos a que o utilizador pertence. Pode também, a partir dessa página, aceder à página de criação uma festa, aceder à página de perfil e à página de criação de grupos.
Um utilizador premium é essencialmente idêntico a um utilizador normal, a grande diferença centra-se em que quaisquer posts feitos pelo utilizador premium no seu perfil, irão aparecer no espaço promotor da página principal. Futuramente seria de esperar que esse espaço de promotor se espandisse para mostrar também prioritariamente as festas por eles criadas.
O utilizador admin têm como função regular todo o site. Por isso têm acesso a todas as funcionalidades que todos os utilizadores possam ter. Mesmo que algum utilizador o tenha bloqueado, ou as restrições das festas não permitam a visualização a todos, o admin conseguirá visualizar e editar, tendo uma mensagem a informar de que está bloqueado ou a festa é só para amigos. O utilizador admin têm ainda acesso a um painel de admin onde pode encontrar uma listagem de todo o conteudo do site (ficheiros, posts, grupos, etc) e ver quais são os items reportados, para avaliar e verificar se precisam de moderação ou não. Devido à liberdade sem limites deste nivel de utilizador, existe um numero limitado dos mesmos.
Server Behaviours utilizados
Sendo esta uma aplicação complexa em termos de funcionalidade e de interacção com a base de dados, foram utilizados bastantes server behaviours, alguns criados manualmente, outros com recurso às funcionalidades do Dreamweaver. Noutros casos, ainda, de funcionalidades mais complexas, foi utilizado código disponibilizado online
1. Insert Record
A capacidade de introduzir dados novos foi utilizada em diversos pontos da aplicação. Segue-se um dos exemplos da sua aplicação, neste caso a criação de grupos:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO grupos (nome, `desc`, fundador, dataCreation, activo, reportado) VALUES (%s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nome'], "text"),
GetSQLValueString($_POST['desc'], "text"),
GetSQLValueString($_POST['fundador'], "text"),
GetSQLValueString($_POST['dataCreation'], "date"),
GetSQLValueString($_POST['activo'], "int"),
GetSQLValueString(0, "int"));
mysql_select_db($database_startAparty, $startAparty);
$Result1 = mysql_query($insertSQL, $startAparty) or die(mysql_error());
2. Update Record
Em vários pontos da aplicação torna-se necessário, e praticamente esperado, facultar ao utilizador a possibilidade de editar dados já inseridos. Por exemplo, este é o código que permite a alteração dos dados do próprio perfil:
if ($_FILES['avatar']['size'] > 0 ){
$updateSQL = sprintf("UPDATE utilizadores SET avatar=%s, nome=%s, dataNasc=%s, email=%s, bio=%s, dataRegisto=%s, genero=%s, localidade=%s, promotor=%s, nivelAcesso=%s, newsletter=%s, activo=%s WHERE idUtilizadores=%s",
GetSQLValueString($_FILES['avatar']['name'],"text"),
GetSQLValueString($_POST['nome'], "text"),
GetSQLValueString($_POST['dataNasc'], "date"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['bio'], "text"),
GetSQLValueString($_POST['dataRegisto'], "date"),
GetSQLValueString($_POST['genero'], "text"),
GetSQLValueString($_POST['localidade'], "int"),
GetSQLValueString(isset($_POST['promotor']) ? "true" : "", "defined","1","0"),
GetSQLValueString($_POST['nivelAcesso'], "int"),
GetSQLValueString(isset($_POST['newsletter']) ? "true" : "", "defined","1","0"),
GetSQLValueString(isset($_POST['activo']) ? "true" : "", "defined","1","0"),
GetSQLValueString($_POST['idUtilizadores'], "int"));
}else{
$updateSQL = sprintf("UPDATE utilizadores SET nome=%s, dataNasc=%s, email=%s, bio=%s, dataRegisto=%s, genero=%s, localidade=%s, promotor=%s, nivelAcesso=%s, newsletter=%s, activo=%s WHERE idUtilizadores=%s",
GetSQLValueString($_POST['nome'], "text"),
GetSQLValueString($_POST['dataNasc'], "date"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['bio'], "text"),
GetSQLValueString($_POST['dataRegisto'], "date"),
GetSQLValueString($_POST['genero'], "text"),
GetSQLValueString($_POST['localidade'], "int"),
GetSQLValueString(isset($_POST['promotor']) ? "true" : "", "defined","1","0"),
GetSQLValueString($_POST['nivelAcesso'], "int"),
GetSQLValueString(isset($_POST['newsletter']) ? "true" : "", "defined","1","0"),
GetSQLValueString(isset($_POST['activo']) ? "true" : "", "defined","1","0"),
GetSQLValueString($_POST['idUtilizadores'], "int"));
}
mysql_select_db($database_startAparty, $startAparty);
$Result1 = mysql_query($updateSQL, $startAparty) or die(mysql_error());
Neste caso, há a condição que permite, caso tenho sido escolhido uma nova imagem para associar ao perfil, fazer update do campo correspondente. De resto, verifica-se a actualização dos diversos campos da tabela de Utilizadores, para o utilizador cujo Id é igual ao valor passado por POST. Mais uma vez, os valores as serem inseridos na tabela são os definidos pelo utilizador atraveºs de um formulário.
3. Select Record
A capacidade de seleccionar dados já inseridos numa base de dados é essencial em qualquer aplicação dinâmica. O uso deste behavior estendeu-se a praticamente todas as páginas do site. Segue-se um exemplo bastante simples da usa utilização.
mysql_select_db($database_startAparty, $startAparty);
$query_rs_posts = sprintf("SELECT * FROM Posts WHERE idPosts = %s", GetSQLValueString($colname_rs_posts, "int"));
$rs_posts = mysql_query($query_rs_posts, $startAparty) or die(mysql_error());
$row_rs_posts = mysql_fetch_assoc($rs_posts);
$totalRows_rs_posts = mysql_num_rows($rs_posts);
Neste caso, são recolhidos os dados referentes a um determinado post, dados esses que irão ser colocados num formulário para facilitar a sua edição por parte do utilizador.
Outro exemplo, neste caso num contexto de utilização bastante diferente. Aquando do registo inicial, é enviado um email ao futuro utilizador com um link para uma página de verificação. Nesse link é contida uma chave única -- passada por GET -- que, após verificada, permite a activação da conta e a continuação do processo de registo.
$key = md5($_GET['key']); $hasKey = "SELECT * FROM startAparty.Utilizadores WHERE activationkey = '$key'"; mysql_select_db($database_startAparty, $startAparty); $hasKey_query = mysql_query($hasKey, $startAparty) or die(mysql_error()); $hasKey_array = mysql_fetch_assoc($hasKey_query);
A chave vai, neste caso, havendo correspondência na base de dados, dar acesso aos dados do utilizador e permitir o seu update.
4. INNER JOIN, COUNT, GROUP BY, ORDER BY
Os três behaviors acima apontados vão ser refenciados em conjunto, pois foi, regra geral, nessa condição que foram utilizados. A página principal do utilizador registo permite o acesso a diversas informações. Entre elas, uma listagem de todas as festas, com a possibilidade da existência de paginação para mostrar as mesmas. Junto das festas, foi estipulado na fase de definição dos requisitos funcionais que apareceria, não só o nome da festa, assim como a data onde se iria realizar, onde se iria realizar, a que horas, quantas pessoas iriam e, por fim, a identidade do organizador.
Para recolher essa quantidade de dados, é necessário juntar os resultados de várias tabelas, mediante um conjunto de condições que não permita o aparecimento de dados indesejados,
mysql_select_db($database_startAparty, $startAparty);
$query_rs_festasAll = "
SELECT Count(startAparty.Guestlist.idFesta), startAparty.Festas.*, startAparty.Utilizadores.username, startAparty.Localizacoes.local
FROM startAparty.Guestlist
INNER JOIN startAparty.Festas ON startAparty.Guestlist.idFesta = startAparty.Festas.idFestas
INNER JOIN startAparty.Utilizadores ON startAparty.Festas.Anfitriao = startAparty.Utilizadores.idUtilizadores
INNER JOIN startAparty.Localizacoes ON startAparty.Festas.Localidade = startAparty.Localizacoes.idLocalizacoes
WHERE startAparty.Festas.activa = 1
GROUP BY startAparty.Guestlist.idFesta
ORDER BY startAparty.Festas.idFestas DESC";
$query_limit_rs_festasAll = sprintf("%s LIMIT %d, %d", $query_rs_festasAll, $startRow_rs_festasAll, $maxRows_rs_festasAll);
$rs_festasAll = mysql_query($query_limit_rs_festasAll, $startAparty) or die(mysql_error());
$row_rs_festasAll = mysql_fetch_assoc($rs_festasAll);
O Count é usado, neste caso, para quantizar o número de utilizadores associados, na tabela Guestlist, a determinada festa. O Inner Join faz a ligação entre as várias tabelas onde se encontram os vários dados acima mencionados. O Group By é usado para agregar os dados de acordo com um denominador comum, neste caso o Id de cada festa. Por último, o Order By indica a ordem pelo qual os dados vão ser organizados.
5. Dynamic Form Elements
Utilizados em vários pontos da aplicação, em especial na actualização/alteração de dados previamente definidos.
6. Repeat Region
Este behavior é utilizado, principalmente, na página principal do utilizador registado, para mostrar listas de contéudos.
7. Show If Recordset is Not Empty
Mais uma vez, usado na página principal. Certos componentes só são revelados se houverem resultados passíveis de serem revelados.
8. Email
A funcionalidade de enviar e-mails foi utilizada para garantir segurança no processo de registo, para possibilitar o envio de uma password nova no caso de esquecimento a definida e, também, para permitir o contacto entre o utilizador e a equipa de desenvolvimento, através de um formulário de contacto que envia as mensagens para um e-mail pré-definido.
$headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; $headers .= "From: Start-a-Party" . "\r\n"; $body = " <p>Hello, ".$_POST['fullname']. "</p> <p>This is a message confirming your registration to our service.</p> <p>To complete the process, go to <a href='http://s-a-p.nfshost.com/start-a-party/verify.php?key=" . $_POST['activationkey']."'>http://s-a-p.nfshost.com/start-a-party/verify.php?key=" . $_POST['activationkey']. "</a>.</p><p>If this is an error, ignore this email. The link is valid for 24 hours.</p><br><p>Regards,<br>The Start-a-Party Team</p>"; mail($_POST['email'], "Welcome to Start-a-Party", $body,$headers);
Recordsets/Queries utilizados
Sendo este uma aplicação com uma multitude de ecrãs e funcionalidades (inserção, edição e remoção de posts, ficheiros, festas, grupos e respectivos posts e comentários), a quantidade de Recordsets e Queries utilizados é grande, sendo que algumas páginas têm vários recordset e queries, dependendo das funcionalidades. Alguns foram já vistos nos exemplos, apresentados anteriormente, de server behaviors. Os vários graus de complexidade usados demonstram a realidade global dos recordsets usados na aplicação.
Parâmetros passados entre páginas
A possibilidade de passar parâmetros entre páginas, quer abertamente no próprio header (GET), de uma forma mais segura (POST) ou até a manutenção de parâmetros ao longo de toda a sessão(SESSION) revelou-se uma mais-valia essencial no desenvolvimento da aplicação multimédia.
O primeiro método, GET, teve um uso algo limitado, por razões de segurança. Foi usado principalmente para transmitir parâmetros de validação. No login, por exemplo, os parâmetros "action" e "result" e "error" são passados da página de validação do login de volta para a página anterior. A informação contida nesses parâmetros informa a página do erro de validação ocorrido, e a mensagem de erro correspondente é facultada ao utilizador.
Também é utilizado o parâmetro GET na criação de uma conta. Uma chave de validação aleatória é criada, atribuída ao utilizador e envia para o email do mesmo, de forma a que ele possa activar definitivamente a conta. Por último, a ligação a festas ou perfis, feita através de um ID único, também está "a cargo" do método GET. Desta forma, torna-se fácil partilhar links, dentro e fora do contexto da aplicação.
O método POST foi usado em várias situações que requiram a passagem de informação mais sensível, como o nome de utilizador ou a password. O método GET comprometeria o utilizador ao revelar estes dados no URL. Os dados de login do utilizador são passados pelo método POST. Os dados passados a certas páginas de validação de conteúdo são também mantidos secretos, de forma a dificultar tentativas de quebrar a integridade da base de dados.
Por fim, as variável de sessão guardadas com recurso ao SESSION permitem guardar informação genérica acerca do utilizador que se encontra a usar aplicação. Nomeadamente, são guardados o username do utilizador, o seu nível de acesso à aplicação e o seu ID na tabela de Utilizadores. Através dessas variáveis pode-se controlar e, se necessário, restringir, o acesso do utilizador a certas áreas e funcionalidade da aplicação. Mais, é possível mostrar apenas o conteúdo relevante ao utilizador com a sessão iniciada.
Integração (e.g. Flash, AJAX Frameworks, etc)
A integração de outras tecnologias foi bastante importante no desenvolvimento da aplicação, nomeadamente a biblioteca de Javascript jQuery. O foco esteve na criação de uma experiência de utilização mais dinâmica e, em última análise, mais eficiente. Para tal, houve o recurso em particular a dois plugins do jQuery, Qtip e jQuery UI.
O primeiro possibilitou a criação de tooltips. Estes surgem em dois momentos da aplicação: aquando do rollover sobre um dia com evento marcado no calendário, e sobre um amigo ou utilizador que enviou um pedido de amizade. No ambos os casos, a tooltip revela as informações mais importantes sobre a festa/evento, assim como um link para a página da festa/evento, caso a interacção com o mesmo necessite de ser mais aprofundada.
O jQueryUI, cujas funcionalidades são imensas, foi utilizado para criar em, quase todas as páginas, accordions. Estes permitem ao utilizador visualizar, numa dada página, apenas o contéudo que lhe interessa de momento, focalizando a sua atenção e diminuindo o volume de informação extra.
A nível do PHP, foi utilizado um script externo para a criação automática de um calendário (PHP Calendar), sendo que o script foi posteriormente alterado para permitir a integração de tooltips com qTip.
Desenvolvimentos Futuros
- Criação da versão móvel da plataforma;
- Desenvolvimento de novas opções de criação de festas;
- Desenvolvimento de mais vantagens para utilizadores premium;
- Implementação de geolocalização na pesquisa e criação de festas;
- Aperfeiçoamento do aspecto gráfico da aplicação.
Conclusões
Finalizado este trabalho, conseguimos perceber com maior exactidão o funcionamento, na prática, de uma equipa de projecto e aplicar todos os conhecimentos de programação adquiridos durante o semestre na disciplina de laboratório 5, além de nos permitir obter novos conhecimentos com a resolução aos problemas encontrados.
