====== Esbós previ per la futura versió 1.1.6 ======
===== Login =====
* Tres intents per a fer login.
* Crear un enllaç per a confirmar l'alta o el canvi de contrasenya (després d'utilitzar l'opció de //I forgot my password//) semblant al que hi ha implementat als fòrums i wikis del servei.
===== Grups de Recerca =====
Actualment no hi ha cap taula a la base de dades que estableixi una relació entre un usuari i el grup de recerca al qual pertany, i aquest relació s'ha d'establir indirectament a través dels projecte als quals pot carregar reserves un usuari. Això no és cap problema en el cas d'una relació unívoca com la del'//User 1// amb el //Group A// a través del //Project A//, però genera incertesa en el cas de projectes compartits entre grups. Per exemple, no està clar a quin grup pertany l'//User 2// ja que pot fer reserves a un projecte compartit pels grups //Group A// i //Group B//. En canvi, tot i que l'//User 3// també fa reserves a aquest projecte compartit, el fet que pugui fer reserves al //Project B// que només pertany al //Group B// ens indica que pertany a aquest grup.
{{:sermn_wiki:userpages:marta:group-project-user.png?500|Relació Usuari-Projecte(s)-Grup}}
En qualsevol cas tot serà més senzill si establim un vincle directe entre l'usuari i el grup o grups a què pertany,
La consulta següent no funciona com s'esperava, ja que el llistat inclou els usuaris que pertanyen al grup i **a més pertanyen a un altre grup**. Seria més útil que el llistat només inclogués els usuaris que no pertanyen al grup.
-- Table structure for table `usergroups`
--
CREATE TABLE `usergroups` (
`userid` smallint(5) unsigned NOT NULL default '0',
`groupid` smallint(5) unsigned NOT NULL default '0',
`isdefault` tinyint(1) default '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
on ''isdefault'' es podria fer servir per indicar el grup que es triarà per defecte en cas de pertànyer a més d'un grup.
Això permetrà consultar els usuaris que pertanyen a un grup, per exemple, el ''Grup 2''
SELECT users.name, groups.longname, groups.id
FROM users, usergroups, groups
WHERE users.id = usergroups.userid
AND usergroups.groupid = groups.id
AND groups.id = 2
o a quin grup pertany un usuari, per exemple, l'''Usuari 2'',
SELECT users.id, users.name, groups.longname, groups.id
FROM users, usergroups, groups
WHERE groups.id = usergroups.groupid
AND usergroups.userid = users.id
AND users.id = 2
o els usuaris aliens al grup de recerca (per exemple, el ''Grup 1''), però que estan autoritzats a fer reserves a projectes del grup, i a quin projecte o projectes estan autoritzats a fer reserves,
SELECT DISTINCT users.id, users.username, projects.longname, projects.id, groups.longname, groups.id
FROM users, userprojects, projects, projectgroups, groups, usergroups
WHERE users.id = userprojects.userid
AND userprojects.projectid = projects.id
AND projects.id = projectgroups.projectid
AND projectgroups.groupid = groups.id
AND groups.id = 1
AND users.id = usergroups.userid
AND usergroups.groupid <> 1
Com implementar la relació usuari-grup al formulari de edició i creació d'usuaris?????
Possibles solucions:
* Automàticament al seleccionar es projectes.
* Només es pot escollir el grup per defecte tenint en compte els projectes assignats.
* Escollir els grups (i el de per defecte) i després limitar els projectes depenent dels grups assignats.
* ...
===== Base de dades =====
==== 'LIMIT 1' a les comandes en SQL ====
A la major part de les comandes en SQL generades pel programa de reserves, es fa servir ''LIMIT 1''. Això és deu a que no s'han definit //camps índex únics,// de forma que podria haver més d'un registre amb la mateixa informació, i per això cal limitar el nombre de respostes a la consulta.
==== FOREIGN KEYS a MySQL ====
Mentre que el motor de taules per defecte de MySQL, //MyISAM,// no permet l'existència de ''FOREIGN KEYS'', el motor //InoDB// si que les permet. No és un canvi a curt termini, però a la llarga convindrà plantejar-se redissenyar la base de dades per tal d'incorporar-hi mecanismes de control d'integritat. Per més informació consultar, entre altre,
* [[http://articles.techrepublic.com.com/5100-10878_11-6035435.html | An introduction to foreign keys and referential integrity in MySQL]]
* [[http://www.databasejournal.com/features/mysql/article.php/2248101/Referential-Integrity-in-MySQL.htm | Referential Integrity in MySQL]]
* [[http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html | MySQL 5.1 Reference Manual :: 13 Storage Engines]]
* [[http://blogs.sitepoint.com/2009/03/25/mysql-myisam-table-pros-con/ | MySQL: the Pros and Cons of MyISAM Tables]]
===== Altres modificacions =====
Les modificacions que es citen a continuació encara no s'han plantejat ben bé con s'haurien de ser fer.
==== Afegir llistat d'usuaris amb accés a un instrument ====
Hores d'ara no és possible conèixer a través del programa de reserves quins usuaris tenen accés a un determinat instrument, tot i que la informació hi és a la base de dades (taula ''permissions''). Afegir aquesta opció... on?
SELECT users.name, instruments.longname, instruments.id
FROM users, permissions, instruments
WHERE users.id = permissions.userid
AND permissions.instrid = instruments.id
AND instruments.id = 2
De moment es mostra el llistat al formulari de edició del instrument.De forma semblant al mostrat al formulari de grups
També hi ha un menú llistat però queda polir-ho ampliar-ho per a poder escollir més opcions.
Queda pendent pensar quin seria el millor lloc per mostrar aquests llistats i com.
==== Edició de costos ====
No s'ha plantejat com seria el formulari per la edició de costos ni la part de facturació.
==== Emails ====
Possibilitat de enviar correus electrònics des de la aplicació. Per exemple, des de el calendari de reserves o als menús de //email lists// i //my account//.
Es pot ampliar la classe //emailer//.
==== Permisos ====
Menú de edició de permisos per poder crear nous tipus d'usuaris.
===== Installer =====
L'aplicació incorpora un instal·lador. Aparentment es va solucionar un petit error que deixava penjada la instal·lació. Faltaria comprovar que realment no te cap altre error i que la part de actualitzar a una nova versió també funciona. De la mateixa manera, del tema //RADIUS// i //LDAP// no s'han tocat res.
===== Referències i enllaços d'interès =====
* [[wp>Entity-relationship_model | Entity-relationship model]]
* [[http://databases.about.com/cs/specificproducts/a/designmenu.htm | Database Design from the Ground Up.]] By Mike Chapple, [[http://www.about.com | About.com Guide]]
* [[http://www.databaseanswers.org/modelling_tools.htm | Database Modelling Tools]] a [[http://www.databaseanswers.org/ | Database Answers]]
* [[http://code.google.com/p/wwwsqldesigner/ | wwwsqldesigner.]] Visual web-based SQL modelling tool. ([[http://ondras.zarovi.cz/sql/demo/?keyword=default | Demo available]])
* [[http://ppms.info/ | The Pasteur Platform Management System (PPMS)]] is a web based application for the management of technology related shared facilities (platforms). PPMS is a time based booking management system, allowing users to easily log in and reserve time easily in a calendar based interface. However, PPMS goes far beyond this in the advanced functions it offers to the both the users and the facility staff.