Start-a-Party

From Laboratório MM 5

(Difference between revisions)
Jump to: navigation, search
(Desenvolvimentos Futuros)
(Server Behaviours utilizados)
Line 141: Line 141:
====Server Behaviours utilizados====
====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:
 +
 +
<pre>
 +
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());
 +
</pre>
 +
 +
Neste caso, são inseridos valores transportados por POST
 +
====Recordsets/Queries utilizados====
====Recordsets/Queries utilizados====
====Parâmetros passados entre páginas====
====Parâmetros passados entre páginas====

Revision as of 06:18, 18 January 2011


Index logo big.png

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

Base de dados desenvolvida

Base dados.png

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

Estrutura básica de uma página da aplicação.

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());

Neste caso, são inseridos valores transportados por POST

Recordsets/Queries utilizados

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.

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.

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.

Referências bibliográficas

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox