To-do
m (Admin moved page To-do to Development/To-do without leaving a redirect) |
|||
(31 intermediate revisions by 2 users not shown) | |||
Line 8: | Line 8: | ||
(eventually: "linked_to", with a multiple select with names of all other participants to the same meeting ... or use another hypothetical form for this) '''(DONE)''' | (eventually: "linked_to", with a multiple select with names of all other participants to the same meeting ... or use another hypothetical form for this) '''(DONE)''' | ||
− | *Create sidebar entries with forms: Add Language course student, Add member, Add meeting participant | + | *Create sidebar entries with forms: Add Language course student, Add member, Add meeting participant -- '''DONE''' using page /MediaWiki:Sidebar |
*Reorder our private wiki in order to just have (on the root level) : | *Reorder our private wiki in order to just have (on the root level) : | ||
Line 15: | Line 15: | ||
**List of meeting participants | **List of meeting participants | ||
− | and create a main page reflecting this structure with cards similar to the public mainpage | + | and create a main page reflecting this structure with cards similar to the public mainpage '''DONE''' |
*Create a form "Newsletter", with fields: Date, audience subset/segment, message (this will be filled in by the frontend/nodejs script, but the sending could be also managed in the wiki itself) '''(DONE)''' | *Create a form "Newsletter", with fields: Date, audience subset/segment, message (this will be filled in by the frontend/nodejs script, but the sending could be also managed in the wiki itself) '''(DONE)''' | ||
Line 27: | Line 27: | ||
*<nowiki>***attention: in a further version of the system all these forms/properties/templates could be automatically created, even localized in a given language, by a server side script, in order to easily allow creation, and update, of (public/) private wiki instances</nowiki> | *<nowiki>***attention: in a further version of the system all these forms/properties/templates could be automatically created, even localized in a given language, by a server side script, in order to easily allow creation, and update, of (public/) private wiki instances</nowiki> | ||
− | *set a specific folder for files (named [organization]/media) | + | *set a specific folder for files (named [organization]/media) '''Done''' |
*create a demo private wiki (in this case or public or with a test account with public password) for showcasing | *create a demo private wiki (in this case or public or with a test account with public password) for showcasing | ||
− | *form "member" (or "organization member") : | + | |
+ | *form "member" (or "organization member") : add field "groups": a select with the list of existing group and the ability to create a new one. | ||
+ | This requires another form-template "add group", and the ability from a script in the form to create a new wiki page with that template through mw.api | ||
+ | |||
+ | * create a form "class" to solve the problem of determining relationships (join) between courses and students from the page structure (not a good practice because the structure can change, for instance students may have multiple courses as subpages or a course may have multiple students as subpages). If we only rely on "classes", we organize things like that: personal data of students are always called as page and subpages of the form student. Then we create a class still on the private wiki with fields: course url (public information of the course: the "class" represent the set of participants of a given course), participants: followed by the list of participants, then we can have also multiple classes referring to the same course, eg. class of Monday-Wedn. and class of Tue-Thue, and even further fields... | ||
+ | |||
+ | '''Done''' -- remove the url from the form "class" and ensure the class name correspond | ||
+ | to the course name on the public wiki (as specified in the site's row) | ||
+ | |||
+ | |||
+ | |||
+ | * Create a namespace for the project "Culturaitaliana" or "CI" and put there all relevant pages, for instance "[organization]/Frontend Index", "Sidebar_LoggedIn", "Sidebar_SysOp", [organization]/Banner.jpg, etc. --- ok for those not belonging to an organization but in the latter case this conflicts with editing rights ... | ||
Line 36: | Line 47: | ||
− | *Create a page, for instance /Sidebar Left, where to list forms and templates to be displayed handled from our extension (ci_culturaitaliana_addons) | + | * (navigation menu) Create a page, for instance /Sidebar Left, where to list forms and templates to be displayed handled from our extension (ci_culturaitaliana_addons) ('''Done''' see below) |
*Create a series of email templates in the path /Email templates/[template title] | *Create a series of email templates in the path /Email templates/[template title] | ||
Line 45: | Line 56: | ||
*debug the files subfolder related functions | *debug the files subfolder related functions | ||
− | *complete the pure-html forms (not PageForms) for retrieving contact information on the main page (server-side) | + | *complete the pure-html forms (not PageForms) for retrieving contact information on the main page (server-side) '''DONE''' |
*change the upload folder name from "files" to "media" | *change the upload folder name from "files" to "media" | ||
− | *display banner with our extenstion | + | *display banner with our extenstion ('''DONE''') |
+ | |||
+ | * (navigation menu) created pages [[Sidebar_LoggedIn]] and [[Sidebar_SysOp]] to be used by our extensions to display the sidebar. Complex parser functions inside MediaWiki:Sidebar do not work, see here https://www.mediawiki.org/wiki/Manual:Interface/Sidebar “Parser functions in sidebar” ('''Done''') | ||
+ | |||
+ | * create both on public and private wiki a function to create subpages, ensuring that internal pages are created as well (otherwise the frontend script will not recognize them as pages) | ||
Line 66: | Line 81: | ||
(<u>this page should also provide a way to save contacts through csv in the form organization member of the private wiki</u>) | (<u>this page should also provide a way to save contacts through csv in the form organization member of the private wiki</u>) | ||
− | *(organization's page) create a menu for languages (as described in my communication of 3th of April) and a tab on the page header when a page is localized in multiple languages | + | *(organization's page) create a menu for languages (as described in my communication of 3th of April) '''DONE''', and a tab on the page header when a page is localized in multiple languages |
*create the site's home page (like scambieuropei) | *create the site's home page (like scambieuropei) | ||
− | *show advertisements set by | + | *show advertisements set by organizations, with books suggestions, digital libraries, opportunities (and other forms for general purpose) on the right panel/column through nodejs-socket.io-axios |
− | *(organization's page) handle selection of pages based on the router event (so the navigation menu should contain router-links) (''' | + | *(organization's page) handle selection of pages based on the router event (so the navigation menu should contain router-links) ('''Done''') |
− | * | + | *mention the libraries / technologies which we are using, eg. nodejs, vuejs, mediawiki, knex, lodash, quasar framework, esprima, htmlparser2, cheerio, semantic mediawiki, language detect, jsonwebtoken, mediasoup, nodemailer, email templates (and other relevant mediawiki plugins) |
− | *add library to detect main language of a given page ***we could use the following https://github.com/NaturalNode/natural (even for topic categorization of contents) | + | *add library to detect main language of a given page ***we could use the following https://github.com/NaturalNode/natural (even for topic categorization of contents) *** no, we are using "languagedetect.com" and google, see frontend script (nodejs) |
*complete page with api calls examples | *complete page with api calls examples | ||
− | *post frontend/server scripts to a github public repository ? | + | *post frontend/server scripts to a github public repository ? (see rather the following) |
+ | |||
+ | * ''' create an api interface for some common operations, like to retrieve pages with a given form, and providing some "join" ''' (by this way it's not necessary to publish on github the frontend-server side script) | ||
+ | |||
+ | |||
+ | ===Site structure=== | ||
+ | |||
+ | * home page (fare alla fine sulla base di tutto il materiale e le funzioni da rappresentare) | ||
+ | |||
+ | * page: organizations: aggiungere icona "exit" sulla toolbar che rimanda alla home page; verificare se le pagine possono essere visualizzate sulla base di temi, ad es. handlebars (v. "ghost"), anche se poi si va ad utilizzare uno solo per tutte le organizzazioni-- per omogeneità | ||
+ | |||
+ | * page: newsletters: | ||
+ | |||
+ | ** signin con credenziali wiki privato (in questo caso deve essere inserito anche l'username della organizzazione) oppure pubblico | ||
+ | |||
+ | ** view a: lista delle newsletter già inviate | ||
+ | |||
+ | ** view b: lista dei membri (audience) della organizzazione (recuperati dal wiki privato), aggiungi membro (vai a view b-a) oppure aggiungi lista (csv-comma separated values) | ||
+ | |||
+ | ** view b-a: modifica membro (form "clone" di quella sul wiki privato) | ||
+ | |||
+ | ** view c: lista dei gruppi (aggiungi, rinomina, cancella, come in "assigni") | ||
+ | |||
+ | ** view c-a: modifica gruppo (aggiungi, rimuovi contatti, sulla base dell'elenco completo dei membri) | ||
+ | |||
+ | ** view d: creazione newsletter: aggiungi uno o più gruppi (incluso "tutti i membri"), aggiungi singoli contatti; oggetto; casella di testo; pulsanti: plain test / rich text / html template (ckeditor); pulsante invio | ||
+ | |||
+ | ** una volta inviata la newsletter viene salvata nel sito wiki privato, form newsletter | ||
+ | |||
+ | * page: classes/[nome classe] ('''Done''') | ||
+ | |||
+ | ** overview (pubblico: informazioni sul corso, sulla base della form language_courses), campo per inserire email e pulsante sign in (se l'email appartiene ad uno degli studenti registrati nel corso (form language course student), invia un codice a questa email oppure chiede di scegliere una password ('''Done''', with reference to "classes") | ||
+ | |||
+ | ** pagina privata dello studente (l'url è la stessa) visualizza la pagina dello studente creata nel wiki privato, inoltre: informazioni sugli altri partecipanti del corso; interfaccia per la lezione in videoconferenza ('''Done''', videoconferencing to be completed) | ||
+ | |||
+ | * funzioni da aggiungere alla pagina "organizations/[nome organizzazione]" | ||
+ | |||
+ | ** paying content: alcuni contenuti possono essere fruibili a pagamento e quindi registrati nel wiki privato; modalità di fruizione: si acquista una combinazione fra numero di parole e tempo speso nella lettura (da valutare meglio), es. 10 000 parole a 5 euro, non relativo ad uno contenuto, bensì a contenuti della intera biblioteca; implementare pwa (progressive web application) in modo da rendere i contenuti fruibili anche online ; implementare una sorta di lettura "paragrafo per paragrafo", con statistiche inviate all'autore, etc. | ||
+ | |||
+ | * sulla barra destra, in tutte queste pagine, vengono sempre visualizzati gli annunci pubblicitari, opportunità, digital libraries, reading suggestions, etc. | ||
+ | |||
+ | * prendere in esame tutte le form e valutare come il sito front end può essere arricchito sulla base di esse | ||
+ | |||
+ | |||
+ | * Riorganizzazione della pagina della organizzazione: | ||
+ | |||
+ | ** url: culturaitaliana.org/istitutoculturaitaliana (organizzazione username) | ||
+ | (lo username viene assegnato al momento dell'iscrizione) | ||
+ | |||
+ | ** culturaitaliana.org/istitutoculturaitaliana/pages (attuale sito frontend della organizzazione, con tutte le pagine del wiki pubblico) | ||
+ | |||
+ | ** culturaitaliana.org/istitutoculturaitaliana/newsletters (signin amministratori) | ||
+ | |||
+ | ** culturaitaliana.org/istitutoculturaitaliana/classes (signin studente) | ||
+ | |||
+ | ** altre pagine che non rientrano nella tipologia di articolo ma che offrono funzionalità (es. "questionari") | ||
+ | |||
+ | No, usare al momento il seguente: | ||
+ | * culturaitaliana.org/organizations/Istituto_cultura_italiana_(NGO) | ||
+ | * culturaitaliana.org/newsletters/istitutoculturaitaliana (username wiki privato) | ||
+ | * culturaitaliana.org/classes/istitutoculturaitaliana (username wiki privato) | ||
+ | |||
+ | organizzazione di "classes": | ||
+ | * scheda studente wiki privato, eventualmente con sottopagine ('''Done''') | ||
+ | * class: videoconferenza con tutti gli altri studenti, e chat | ||
+ | |||
+ | |||
+ | |||
Line 95: | Line 177: | ||
a solution could be: | a solution could be: | ||
culturaitaliana.org/wiki/Istituto_cultura_italiana_(NGO) (public wiki) | culturaitaliana.org/wiki/Istituto_cultura_italiana_(NGO) (public wiki) | ||
− | culturaitaliana.org/wiki | + | culturaitaliana.org/private-wiki/Istituto_cultura_italiana_(NGO) or culturaitaliana.org/private-wiki/istitutoculturaitaliana (private wiki) |
(the latest "Istituto_cultura_italiana_(NGO)" being a username while the first a page name) | (the latest "Istituto_cultura_italiana_(NGO)" being a username while the first a page name) | ||
− | so that whatever folder not starting with wiki/ or wiki | + | so that whatever folder not starting with wiki/ or private-wiki/ will be redirected to the frontend through a proxy |
− | |||
− | |||
use the library https://www.npmjs.com/package/connect-history-api-fallback if necessary | use the library https://www.npmjs.com/package/connect-history-api-fallback if necessary | ||
Line 108: | Line 188: | ||
*Export all members of our organization in our private wiki (form member) (through a script) | *Export all members of our organization in our private wiki (form member) (through a script) | ||
+ | |||
*(Export all communication with more than 1 recipient to the private wiki: this will require a further form, and is related to another phase of the project, regarding dissemination of literary works using a web app allowing to read them offline but at the same time tracking reading information etc..) | *(Export all communication with more than 1 recipient to the private wiki: this will require a further form, and is related to another phase of the project, regarding dissemination of literary works using a web app allowing to read them offline but at the same time tracking reading information etc..) | ||
+ | |||
+ | |||
+ | ==Bugs== | ||
+ | |||
+ | * fix issue with image folder on private wiki ('''SOLVED''') | ||
+ | * il select al seguente indirizzo | ||
+ | https://culturaitaliana.org/w/en/index.php?title=Istituto_cultura_italiana_(NGO)/Language_courses/Impariamo_l%27italiano_2019-2020_A2&action=formedit | ||
+ | non funziona in modo appropriato | ||
Latest revision as of 22:29, 13 February 2021
Private wiki
- Create form "Meeting participant"
(First name, Last name, email, phone number, status (attended/invited), description (textarea) (eventually: "linked_to", with a multiple select with names of all other participants to the same meeting ... or use another hypothetical form for this) (DONE)
- Create sidebar entries with forms: Add Language course student, Add member, Add meeting participant -- DONE using page /MediaWiki:Sidebar
- Reorder our private wiki in order to just have (on the root level) :
- List of language course students
- List of members
- List of meeting participants
and create a main page reflecting this structure with cards similar to the public mainpage DONE
- Create a form "Newsletter", with fields: Date, audience subset/segment, message (this will be filled in by the frontend/nodejs script, but the sending could be also managed in the wiki itself) (DONE)
"message" could be split in "message text" and "message html" (the latter with template)
-- aggiungere: "subject"
- Create a form "Newsletter stats", with fields (first name, last name, email, opens (list of dates), clicks (list of dates and url) -- data of this form will be created by a nodejs script through sendgrid (or other mail provider) hooks *** try to create automatically it, see point below ***
- ***attention: in a further version of the system all these forms/properties/templates could be automatically created, even localized in a given language, by a server side script, in order to easily allow creation, and update, of (public/) private wiki instances
- set a specific folder for files (named [organization]/media) Done
- create a demo private wiki (in this case or public or with a test account with public password) for showcasing
- form "member" (or "organization member") : add field "groups": a select with the list of existing group and the ability to create a new one.
This requires another form-template "add group", and the ability from a script in the form to create a new wiki page with that template through mw.api
- create a form "class" to solve the problem of determining relationships (join) between courses and students from the page structure (not a good practice because the structure can change, for instance students may have multiple courses as subpages or a course may have multiple students as subpages). If we only rely on "classes", we organize things like that: personal data of students are always called as page and subpages of the form student. Then we create a class still on the private wiki with fields: course url (public information of the course: the "class" represent the set of participants of a given course), participants: followed by the list of participants, then we can have also multiple classes referring to the same course, eg. class of Monday-Wedn. and class of Tue-Thue, and even further fields...
Done -- remove the url from the form "class" and ensure the class name correspond to the course name on the public wiki (as specified in the site's row)
- Create a namespace for the project "Culturaitaliana" or "CI" and put there all relevant pages, for instance "[organization]/Frontend Index", "Sidebar_LoggedIn", "Sidebar_SysOp", [organization]/Banner.jpg, etc. --- ok for those not belonging to an organization but in the latter case this conflicts with editing rights ...
Public wiki
- (navigation menu) Create a page, for instance /Sidebar Left, where to list forms and templates to be displayed handled from our extension (ci_culturaitaliana_addons) (Done see below)
- Create a series of email templates in the path /Email templates/[template title]
we could create a form as well (to let the nodejs server side script retrieve them) with fields: name, authors, description, snapshot/preview (so that templates can be listed on the frontend site) the cointainer div of the form must use an identifier known by the nodejs script to parse it
- debug the files subfolder related functions
- complete the pure-html forms (not PageForms) for retrieving contact information on the main page (server-side) DONE
- change the upload folder name from "files" to "media"
- display banner with our extenstion (DONE)
- (navigation menu) created pages Sidebar_LoggedIn and Sidebar_SysOp to be used by our extensions to display the sidebar. Complex parser functions inside MediaWiki:Sidebar do not work, see here https://www.mediawiki.org/wiki/Manual:Interface/Sidebar “Parser functions in sidebar” (Done)
- create both on public and private wiki a function to create subpages, ensuring that internal pages are created as well (otherwise the frontend script will not recognize them as pages)
Mediawiki fork
- set default "leave redirect" to false (on move page)
- set default "watch page" to false (where shown)
Frontend site
- add ssr (server-side rendering) to organization page and redesign the navigation using router path (done)
- create a page (with signin) to select a template, a segment/subset of recipients, enter a text message in a textarea and edit a template with ckeditor, then sending the message: all this information will be recorded in the form above "newsletters" in the private wiki
(this page should also provide a way to save contacts through csv in the form organization member of the private wiki)
- (organization's page) create a menu for languages (as described in my communication of 3th of April) DONE, and a tab on the page header when a page is localized in multiple languages
- create the site's home page (like scambieuropei)
- show advertisements set by organizations, with books suggestions, digital libraries, opportunities (and other forms for general purpose) on the right panel/column through nodejs-socket.io-axios
- (organization's page) handle selection of pages based on the router event (so the navigation menu should contain router-links) (Done)
- mention the libraries / technologies which we are using, eg. nodejs, vuejs, mediawiki, knex, lodash, quasar framework, esprima, htmlparser2, cheerio, semantic mediawiki, language detect, jsonwebtoken, mediasoup, nodemailer, email templates (and other relevant mediawiki plugins)
- add library to detect main language of a given page ***we could use the following https://github.com/NaturalNode/natural (even for topic categorization of contents) *** no, we are using "languagedetect.com" and google, see frontend script (nodejs)
- complete page with api calls examples
- post frontend/server scripts to a github public repository ? (see rather the following)
- create an api interface for some common operations, like to retrieve pages with a given form, and providing some "join" (by this way it's not necessary to publish on github the frontend-server side script)
Site structure
- home page (fare alla fine sulla base di tutto il materiale e le funzioni da rappresentare)
- page: organizations: aggiungere icona "exit" sulla toolbar che rimanda alla home page; verificare se le pagine possono essere visualizzate sulla base di temi, ad es. handlebars (v. "ghost"), anche se poi si va ad utilizzare uno solo per tutte le organizzazioni-- per omogeneità
- page: newsletters:
- signin con credenziali wiki privato (in questo caso deve essere inserito anche l'username della organizzazione) oppure pubblico
- view a: lista delle newsletter già inviate
- view b: lista dei membri (audience) della organizzazione (recuperati dal wiki privato), aggiungi membro (vai a view b-a) oppure aggiungi lista (csv-comma separated values)
- view b-a: modifica membro (form "clone" di quella sul wiki privato)
- view c: lista dei gruppi (aggiungi, rinomina, cancella, come in "assigni")
- view c-a: modifica gruppo (aggiungi, rimuovi contatti, sulla base dell'elenco completo dei membri)
- view d: creazione newsletter: aggiungi uno o più gruppi (incluso "tutti i membri"), aggiungi singoli contatti; oggetto; casella di testo; pulsanti: plain test / rich text / html template (ckeditor); pulsante invio
- una volta inviata la newsletter viene salvata nel sito wiki privato, form newsletter
- page: classes/[nome classe] (Done)
- overview (pubblico: informazioni sul corso, sulla base della form language_courses), campo per inserire email e pulsante sign in (se l'email appartiene ad uno degli studenti registrati nel corso (form language course student), invia un codice a questa email oppure chiede di scegliere una password (Done, with reference to "classes")
- pagina privata dello studente (l'url è la stessa) visualizza la pagina dello studente creata nel wiki privato, inoltre: informazioni sugli altri partecipanti del corso; interfaccia per la lezione in videoconferenza (Done, videoconferencing to be completed)
- funzioni da aggiungere alla pagina "organizations/[nome organizzazione]"
- paying content: alcuni contenuti possono essere fruibili a pagamento e quindi registrati nel wiki privato; modalità di fruizione: si acquista una combinazione fra numero di parole e tempo speso nella lettura (da valutare meglio), es. 10 000 parole a 5 euro, non relativo ad uno contenuto, bensì a contenuti della intera biblioteca; implementare pwa (progressive web application) in modo da rendere i contenuti fruibili anche online ; implementare una sorta di lettura "paragrafo per paragrafo", con statistiche inviate all'autore, etc.
- sulla barra destra, in tutte queste pagine, vengono sempre visualizzati gli annunci pubblicitari, opportunità, digital libraries, reading suggestions, etc.
- prendere in esame tutte le form e valutare come il sito front end può essere arricchito sulla base di esse
- Riorganizzazione della pagina della organizzazione:
- url: culturaitaliana.org/istitutoculturaitaliana (organizzazione username)
(lo username viene assegnato al momento dell'iscrizione)
- culturaitaliana.org/istitutoculturaitaliana/pages (attuale sito frontend della organizzazione, con tutte le pagine del wiki pubblico)
- culturaitaliana.org/istitutoculturaitaliana/newsletters (signin amministratori)
- culturaitaliana.org/istitutoculturaitaliana/classes (signin studente)
- altre pagine che non rientrano nella tipologia di articolo ma che offrono funzionalità (es. "questionari")
No, usare al momento il seguente:
- culturaitaliana.org/organizations/Istituto_cultura_italiana_(NGO)
- culturaitaliana.org/newsletters/istitutoculturaitaliana (username wiki privato)
- culturaitaliana.org/classes/istitutoculturaitaliana (username wiki privato)
organizzazione di "classes":
- scheda studente wiki privato, eventualmente con sottopagine (Done)
- class: videoconferenza con tutti gli altri studenti, e chat
Web server
- Review the directory structure, for instance
- culturaitaliana.org/[organization name]/ -> front end site (vuejs)
- culturaitaliana.org/wiki/ -> public wiki (without language code) (php)
- culturaitaliana.org/wiki/[organization name]/wiki -> public wiki site (php)
- culturaitaliana.org/[other pages] -> -> front end site (vuejs)
- culturaitaliana.org/organization name]/wiki -> private wiki site (php)
(n) this folder structure implies that an organization cannot have name "wiki" (ok) but also that "wiki" cannot be the title of a page/article of an organization (not ok) a solution could be: culturaitaliana.org/wiki/Istituto_cultura_italiana_(NGO) (public wiki) culturaitaliana.org/private-wiki/Istituto_cultura_italiana_(NGO) or culturaitaliana.org/private-wiki/istitutoculturaitaliana (private wiki) (the latest "Istituto_cultura_italiana_(NGO)" being a username while the first a page name) so that whatever folder not starting with wiki/ or private-wiki/ will be redirected to the frontend through a proxy
use the library https://www.npmjs.com/package/connect-history-api-fallback if necessary
Maintenance
- Export all members of our organization in our private wiki (form member) (through a script)
- (Export all communication with more than 1 recipient to the private wiki: this will require a further form, and is related to another phase of the project, regarding dissemination of literary works using a web app allowing to read them offline but at the same time tracking reading information etc..)
Bugs
- fix issue with image folder on private wiki (SOLVED)
- il select al seguente indirizzo
https://culturaitaliana.org/w/en/index.php?title=Istituto_cultura_italiana_(NGO)/Language_courses/Impariamo_l%27italiano_2019-2020_A2&action=formedit non funziona in modo appropriato
Near-future development
- The data related to meetings and meetings participant might make use of "facial recognition" in order to help to locate participants in the photographic album related to the meeting