Permisos d’edició de pàgines a NWiki 17/04/2007
Posted by Albert in PFC.1 comment so far
Després d’investigar el codi de la NWiki, ja he trobat quines comprovacions s’han de fer per determinar si un usuari pot editar una pàgina. S’ha de complir alguna de les condicions següents:
- L’usuari té cappability editanywiki.
- L’usuari té cappability editawiki i es compleix alguna de les condicions següents:
- El camp groupmode de la wiki és 0.
- L’identificador del grup de l’usuari és 0.
- L’usuari té cappability caneditawiki i no és compleix cap de les condicions següents:
- La pàgina no existeix i el camp editable de la wiki és 0.
- El camp editable de la pàgina és 0.
- El camp studentmode de la wiki no és 0, el camp editanotherstudent de la wiki és 0 i la pàgina és d’un altre usuari.
- El camp groupmode de la wiki no és 0, el camp editanothergroup de la wiki és 0 i la pàgina és d’un grup al qual l’usuari no pertany.
Inserció d’una pàgina a NWiki 16/04/2007
Posted by Albert in PFC.add a comment
La funcionalitat més complicada que necessitem per a l’API és la inserció de pàgines. Per poder-ho implementar cal saber dues coses: què cal modificar de la base de dades i quins permisos s’han de comprovar.
Per inserir una pàgina cal afegir un nova fila a la taula wiki_pages. Podem diferenciar dos casos: quan és una pàgina nova o s’està actualitzant una existent. En el segon cas alguns paràmetres s’obtindran a partir de l’última versió de la pàgina. Els atributs s’assignen de la manera següent:
- pagename: el nom de la pàgina. S’han de tenir compte els sinònims, es pot mirar com ho fa la funció wiki_get_real_pagename.
- version: si és una pàgina nova és 1, sinó s’incrementa l’última versió.
- content: el contingut de la pàgina.
- author: el nom de l’usuari.
- userid: l’id de l’usuari.
- created: l’hora actual si és una pàgina nova, sinó el mateix que l’última versió.
- lastmodified: l’hora actual.
- refs: llista dels enllaços, per obtenir-los es pot fer amb:
$links = array();
foreach/wki_sintax_find_internal_links($content) as $link) {
$clink = wiki_clean_pagename($link);
$content = str_replace($link, $clink, $content);
$links[] = $link;
}
$res = wiki_internal_link_to_string($links); - hits: 0
- editable: si és una pàgina nova, copiar el valor del camp editable de la instància de la wiki, sinó copiar-lo de l’última versió de la pàgina.
- highlight: no assignar-lo, valor per defecte
- dfwiki: id de l’instànca de la wiki on s’insereix la pàgina.
- editor: nwiki.
- groupid: si és una pàgina actualitzada el copiarem de l’última versió, sinó assignaerm l’id del grup de l’usuari, que es pot obtenir amb:
SELECT g.id FROM group g, groups_members gmUn usuari pot pertànyer a més d’un grup? Si és així hauríem de deixar a l’usuari triar el grup.
WHERE gm.userid = $userid AND g.courseid = $courseid AND gm.groupid = g.id
- ownerid: l’id de l’usuari si és una pàgina nova, sinó el mateix de l’última versió de la pàgina.
- evaluation: no s’assigna, valor per defecte.
Ara cal investigar sobre els permisos…