Personal tools
Note sui portlet delle activities e dei seminars
Il problema fondamentale e' che AGENDA e' fatto abbastanza male, e chi vi inserisce i dati sbaglia, percio' ci troviamo con un database eccessivamente complesso, ridondante e mancante di alcuni vincoli necessari tra le varie tabelle.
Quello che ho alla fine capito di quel che mi serviva riguardo alcune delle relazioni tra le tabelle sono:
| field | AGENDA | LEVEL |
|---|---|---|
| field_name | ||
| field_id | field_of_interest | |
| fid | uid | |
| title |
ovvero: AGENDA.field_of_interest e' una foreign key collegata a field.field_id, e AGENDA.fid e' una foreign key collegata a LEVEL.uid.
La tabella field contiene i campi di interesse. Il contenuto interessante e' la seguente:
| field_id | field_name |
|---|---|
| 2 | Condensed Matter Physics |
| 3 | Ecological and Environmental Economics |
| 4 | High Energy Physics |
| 5 | Mathematics |
| 6 | Physics of Weather and Climate |
| 7 | Public Lecture |
| 8 | Structure and Non-Linear Dynamics of the Earth |
| 9 | Chemical Physics |
| 10 | Disorder and Strong Electron Correlations |
| 11 | Phenomenology Journal Club |
| 12 | Algebra/Topology/K-Theory |
| 13 | Algebraic Geometry |
| 14 | Colloquium |
| 15 | Statistical Physics |
| 100 | Hosted |
| 22 | Other |
| 23 | Without field level2 |
| 16 | Physics of the Living State |
| 17 | Fluid Dynamics |
| 24 | Choose one |
| 18 | Applied Physics |
get_field_of_interest_from_URL
In portal_skins esiste uno script chiamato get_field_of_interest_from_URL cui si deve passare il proprio context. Lo script controlla la prima parte del path (ad esempio, /math, /cmsp etc...) e restituisce il Field of Interest cui presumibilmente si e' interessati; semplicemente contiene un mapping tra i section-name (usati, per inciso, anche per la scelta del logo e del css da usare) e il field of interest.
get_activities_for_url
Questo script chiama innanzitutto get_field_of_interest_from_URL per capire quale sia l'area di interesse per la pagina richiesta. Per questo motivo e' necessario passare allo script context. Successivamente chiama lo script get_from_agenda e restituisce una tupla (field, results, url) in cui:
- field
- e' l'area di interesse (field_of_interest) in forma leggibile
- results
- e' l'elenco delle attivita' richieste
- url
- e' l'url necessaria per richiedere le attivita'. In effetti ora non e' piu' necessaria, dato che abbiamo un unico page template per visualizzare seminari e attivita' inside e outside trieste.
I parametri activity e outin servono rispettivamente per capire se si richiede un seminario (activity=='seminars') o un'attivita' (activity='activities', che e' il default), e per richiedere se si desidera avere le attivita' ospitate dall'ICTP (outin='inside'), esternamente (outin='outside') o qualsiasi (outin=False, che e' il default)
get_from_agenda
Questo e' lo script piu' complicato: seleziona il field dal contesto (probabilmente e' ridondante, potremmo farlo passare da get_activities_for_url), si prende tutti i seminari e le attivita' grazie allo ZSQL method select_everithing_from_agenda [1] e poi filtra i risultati in base ai parametri passati: outside_inside, activity, field.
readabledate_smart
Questo script converte semplicemente una data in un'altra. Dovrebbe essere retrocompatibile con il vecchio readabledate (che comunque era buggato). Adesso il comportamento di questo script e' tale per cui puo' restituire anche un range di due date; in tal caso, cerca di essere abbastanza smart da eliminare le inforamzioni ridondanti, quindi se abbiamo date del tipo ``dd/mm/yy`` e ``dd1/mm1/yy`` (ovvero con l'anno in comune) la stringa restituita sara` "dd Month - dd1 Month1 yyyy". Allo stesso modo se le date sono ``dd/mm/yy`` e ``dd1/mm/yy`` restituira' "dd - dd1 Month yyyy", mentre se le date sono uguali restituisce "dd Month yyyy". I due portlet portlet-seminars e portlet-activities sono stati modificati per usare il nuovo script.
portlet-seminars [2]
Questo page template chiamera' lo script get_activities_for_url con opzione activity='seminars'. Se lo script restituisce field diverso da None allora mostrera' nei vari titoli anche l'area di interesse.
Se si passa in query il parametro seminars_maxresults=N verranno visualizzati N seminari anziche' il default (5)
portlet-activities [2]
sostanzialmente questo portlet e' uguale al precedente con le sostituzioni (case insensitive):
s/seminars/activities/ s/seminar/activity/
(e quindi ammette il parametro activities_maxresults anziche' seminars_maxresults :))
| [1] | si' lo so si scrive con la 'y' ma ormai ho sbagliato quindi ce lo teniamo sgrammaticato :) |
| [2] | (1, 2) sostanzialmente non e' necessario cambiare nulla tra la versione 2.1 di plone e la 2.5, ad eccezione di questi due page template. Infatti in plone 2.5 ho usato le view (cerca per @@calendar_view), che e' una roba di zope3 che sta in plone2.5 grazie a Five (vorresti che avessi messo dei link vero?). In plone2.1 invece bisogna recuperare year, month e day dal modulo DateTime. (probabilmente avremmo potuto farlo anche nel 2.5, ma fa piu' figo usare le view...) |