diff --git a/composer.json b/composer.json index 1029c56..4e3abf8 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,8 @@ "phpmailer/phpmailer": "^6.1", "laminas/laminas-diactoros": "^2.2", "laminas/laminas-httphandlerrunner": "^1.1", - "sabre/vobject": "^4.0" + "sabre/vobject": "^4.0", + "michelf/php-markdown": "^2.0" }, "suggest": { "ext-apcu": "Caches LDAP results avoiding continuous lookups" diff --git a/composer.lock b/composer.lock index 6c2adfd..e324064 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bf59f46949c9ec21e7bccda619ce0714", + "content-hash": "ef8ef720a9f44dc08c4274539b59995f", "packages": [ { "name": "jumbojett/openid-connect-php", @@ -342,6 +342,62 @@ }, "time": "2023-01-16T20:25:45+00:00" }, + { + "name": "michelf/php-markdown", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/michelf/php-markdown.git", + "reference": "eb176f173fbac58a045aff78e55f833264b34e71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/eb176f173fbac58a045aff78e55f833264b34e71", + "reference": "eb176f173fbac58a045aff78e55f833264b34e71", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "phpstan/phpstan": ">=1.0", + "phpstan/phpstan-phpunit": ">=1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Michelf\\": "Michelf/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Michel Fortin", + "email": "michel.fortin@michelf.ca", + "homepage": "https://michelf.ca/", + "role": "Developer" + }, + { + "name": "John Gruber", + "homepage": "https://daringfireball.net/" + } + ], + "description": "PHP Markdown", + "homepage": "https://michelf.ca/projects/php-markdown/", + "keywords": [ + "markdown" + ], + "support": { + "issues": "https://github.com/michelf/php-markdown/issues", + "source": "https://github.com/michelf/php-markdown/tree/2.0.0" + }, + "time": "2022-09-26T12:21:08+00:00" + }, { "name": "paragonie/constant_time_encoding", "version": "v2.6.3", diff --git a/database/database.sql b/database/database.sql index c53adc6..0abd6db 100644 --- a/database/database.sql +++ b/database/database.sql @@ -36,7 +36,7 @@ create table config ( ); insert into config (id, value) -values ('expiry', null), ('rolesAvailable', null), ('notifyEmail', 0); +values ('expiry', null), ('notifyEmail', 0); create table evaluation ( id_evaluation integer primary key autoincrement, @@ -60,5 +60,323 @@ create table notes ( primary key (uid, candidate_id) ); +create table if not exists positions ( + id varchar not null primary key, + idx integer not null, + available integer not null +); + +-- this is generic, but actually used only for the positions aka anywhere the text can be dynamically changed +create table if not exists translations ( + id varchar not null, + lang varchar not null, + value varchar not null, + unique(id, lang) +); + +insert into positions (id, idx, available) values + ('hardware-repair', 0, 1), + ('electronics', 1, 1), + ('python-software-dev', 2, 1), + ('php-software-dev', 3, 1), + ('javascript-software-dev', 4, 1), + ('vuejs-software-dev', 5, 1), + ('machine-learning-engineer', 6, 1), + ('sysadmin', 7, 1), + ('communication-and-social', 8, 1), + ('digital-content-creation', 9, 1), + ('creative-reuse', 10, 1), + ('other', 11, 1); + +insert into translations (id, lang, value) values + ('position.hardware-repair.name', 'it-IT', 'Riparazione hardware'), + ('position.electronics.name', 'it-IT', 'Elettronica'), + ('position.python-software-dev.name', 'it-IT', 'Sviluppo software Python'), + ('position.php-software-dev.name', 'it-IT', 'Sviluppo software PHP'), + ('position.javascript-software-dev.name', 'it-IT', 'Sviluppo software JavaScript'), + ('position.vuejs-software-dev.name', 'it-IT', 'Sviluppo software Vue.js'), + ('position.machine-learning-engineer.name', 'it-IT', 'Machine Learning Engineer'), + ('position.sysadmin.name', 'it-IT', 'Sysadmin'), + ('position.communication-and-social.name', 'it-IT', 'Comunicazione e social'), + ('position.digital-content-creation.name', 'it-IT', 'Creazione di contenuti digitali'), + ('position.creative-reuse.name', 'it-IT', 'Riuso creativo'), + ('position.other.name', 'it-IT', 'Altro'), + ('position.hardware-repair.name', 'en-US', 'Hardware repair'), + ('position.electronics.name', 'en-US', 'Electronics'), + ('position.python-software-dev.name', 'en-US', 'Python software development'), + ('position.php-software-dev.name', 'en-US', 'PHP software development'), + ('position.javascript-software-dev.name', 'en-US', 'JavaScript software development'), + ('position.vuejs-software-dev.name', 'en-US', 'Vue.js software development'), + ('position.machine-learning-engineer.name', 'en-US', 'Machine Learning Engineer'), + ('position.sysadmin.name', 'en-US', 'Sysadmin'), + ('position.communication-and-social.name', 'en-US', 'Communication and social'), + ('position.digital-content-creation.name', 'en-US', 'Digital content creation'), + ('position.creative-reuse.name', 'en-US', 'Creative reuse'), + ('position.other.name', 'en-US', 'Other'), + ('position.hardware-repair.description', 'it-IT', 'Descrivi qualsiasi tua esperienza di riparazione di computer (fissi o portatili), o assemblaggio, o saldatura di componenti elettronici. + +Se non sai qualcosa, cosa fai per imparare in autonomia? Puoi anche fornire degli esempi. + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a riparare computer.'), + ('position.electronics.description', 'it-IT', 'Uno degli obiettivi del team è la progettazione di strumenti elettronici per la diagnostica a basso livello e il riuso dell''hardware recuperato. + +Qual è il tuo rapporto con il mondo dell''elettronica? Ti interessa di più l''elettronica digitale o analogica (specialmente di potenza) o ti interessano entrambe? + +Se hai mai realizzato qualche circuito o progetto oltre a quelli nei laboratori didattici, parlane con riferimento anche al metodo con cui è stato realizzato (breadboard, millefori, circuito stampato, componenti through-hole o SMD, etc...). + +Indica anche se hai dimestichezza con qualche software di Electronic Design Automation (progettazione, simulazione, test e verifica, etc...). + +Menziona anche quanto tempo potresti dedicare al team e se fai qualcos''altro di interessante nel tempo libero oltre a progettare circuiti.'), + ('position.python-software-dev.description', 'it-IT', 'Descrivi qualsiasi tua esperienza nel programmare in Python, e se hai un account su Github non esitare a condividerlo nella tua lettera! + +Molti degli strumenti interni del team sono stati creati con python, per esempio la [Peracotta](https://github.com/WEEE-Open/peracotta) ed il [Pesto](https://github.com/WEEE-Open/pesto). Se conosci come lavorare con qt ed interagire con API, sei la persona che stiamo cercando! + +Potresti menzionare se hai mai usato virtual environments, collaborato con qualcuno su un progetto software, o se sai scrivere in altri linguaggi che usiamo nel team, come JavaScript, PHP e Bash o altri ancora. + +Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire tutorial su internet, iniziare a scrivere codice e cercare man mano su Stack Overflow, etc...)? + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.php-software-dev.description', 'it-IT', 'I principali progetti PHP del team sono [Tarallo](https://github.com/WEEE-Open/tarallo), [WEEEHire](https://github.com/WEEE-Open/WEEEHire-ng) e [crauto](https://github.com/WEEE-Open/crauto), puoi darci già un''occhiata per sapere a cosa vai incontro. + +Descrivi qualsiasi tua esperienza nel programmare in PHP, e se hai un account su Github non esitare a condividerlo nella tua lettera! + +Va bene anche "per l''esame di ... ho creato un programma che fa ..." o "ho fatto il sito web per la panetteria all''angolo". + +Se conosci anche altri linguaggi non esitare a condividere la tua esperienza. + +Puoi anche menzionare se conosci altri linguaggi di programmazione o hai mai partecipato ad altri progetti collaborativi. + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.javascript-software-dev.description', 'it-IT', 'Da un paio d''anni abbiamo iniziato a migrare alcuni dei nostri progetti a Node.js. Cerchiamo persone capaci di lavorare con express, MySQL e creare API. + +Parla di qualsiasi tua esperienza riguardante l''utilizzo di JavaScript (backend, app NodeJS, e frontend, sia vanilla JS, sia framework, in particolare Vue.js). Conosci altri linguaggi che usiamo in team, come Python, PHP e Bash, o altri ancora? Menzionali pure! E se hai un account su Github non esitare a condividerlo nella tua lettera! + +Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire tutorial su internet, iniziare a scrivere codice e cercare man mano su Stack Overflow, etc...)? + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.vuejs-software-dev.description', 'it-IT', 'Da un paio d''anni abbiamo iniziato a migrare alcuni dei nostri progetti a Vue.js. Cerchiamo persone capaci di creare SPA e PWA con Vue.js integrate con servizi backend. + +Parla di qualsiasi tua esperienza riguardante l''utilizzo di JavaScript (frontend, vanilla JS, Vue.js or any other framework, e backend, NodeJS). Conosci altri linguaggi che usiamo in team, come Python, PHP e Bash, o altri ancora? Menzionali pure! E se hai un account su Github non esitare a condividerlo nella tua lettera! + +Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire tutorial su internet, iniziare a scrivere codice e cercare man mano su Stack Overflow, etc...)? + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.machine-learning-engineer.description', 'it-IT', 'Dal 2021-2022, grazie all''esperienza acquisita da alcuni membri del team in materia, e al lancio del nostro progetto di software per studenti, cerchiamo una figura che possa occuparsi della creazione di alcuni modelli volti a migliorare l''esperienza utente delle piattaforme web che abbiamo intenzione di sviluppare, in particolare nell''ambito del Natural Language Processing. + +Se hai delle conoscenze riguardo a qualcuno tra Python, PyTorch, Tensorflow, Keras, Jupyter Notebook e GitHub, stiamo cercando proprio te! + +Se in più sai ricercare paper scientifici su nuove tecnologie su ArXiv o simili, o hai intenzione di imparare a farlo, fantastico! + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a progettare intelligenze artificiali.'), + ('position.sysadmin.description', 'it-IT', 'Il compito dei sysadmin è assicurarsi che gli strumenti informatici a cui il team si appoggia per le sue operazioni siano al massimo della loro efficienza. + +Per fare questo gestiscono i server che ospitano i nostri servizi, collaborano con gli sviluppatori per deployare e aggiornare i software che creiamo, monitorano lo stato di salute della nostra infrastruttura e si assicurano che i nostri dati siano protetti da attacchi e perdite. + +I sysadmin seguono l''intero ciclo di vita dei servizi, dalla configurazione del server tramite Ansible, passando per la containerizzazione e gestione dei servizi, alle normali procedure di manutenzione. + +Le competenze esercitate sono una generale conoscenza di Ansible e della containerizzazione, familiarità con la gestione e configurazione di software per server comuni come Nginx, PHP e MariaDB/PostgreSQL e maneggevolezza con il terminale Linux. + +Se hai esperienza con alcune di queste cose, parlane liberamente. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre ad amministrare server.'), + ('position.communication-and-social.description', 'it-IT', 'Hai buone capacità di comunicazione e organizzazione, ti piace il nostro team e vuoi aiutarci a migliorare la nostra immagine? Questo è il posto che fa per te! + +Cerchiamo qualcuno che possa svolgere le seguenti mansioni: + +- Scrittura e pubblicazione di post e storie per i nostri social +- Programmazione temporale dei contenuti +- Definizione della strategia di comunicazione in generale +- Brainstorming di idee per podcast e video tematici +- Intrattenimento di rapporti con terzi, altre associazioni e ospiti + +Ti troverai a lavorare in sinergia con i creatori di contenuti digitali, che si occuperanno di produrre materiale grafico e video (o potrai occupartene tu stesso se ti va e ne sei capace). + +Ora parlaci di te. + +Descrivi qualsiasi tua esperienza nel gestire pagine o profili (e.g. personali, di attività commerciali, di meme nonsense, etc...) sui social network, in particolare Facebook e Instagram. + +Menziona anche i risultati raggiunti con tali attività promozionali, se possibile. + +Se dovessi spiegare in due righe cosa fa il team, cosa diresti? + +Indica anche quanto tempo potresti dedicare a queste attività e se hai qualche altro interesse.'), + ('position.digital-content-creation.description', 'it-IT', 'Sprigiona la tua vena creativa entrando nel nostro team! Abbiamo bisogno di figure che si occupino di realizzare: + +- Design di manifesti, infografiche, biglietti da visita +- Elementi grafici per pagine web e social network +- Sfondi, icone e immagini personalizzate per i nostri software +- Redesign e modding dei case dei computer riparati +- Jingle e motivi musicali per i nostri video + +Se almeno una, o più di una, di queste attività di interessano, questo è il ruolo adatto. + +Parla di qualsiasi esperienza artistica, inclusi progetti personali (anche piccoli) o esami sostenuti. + +Se vuoi mostrarci alcuni dei tuoi lavori passati, abbozzi, concepts o hai idee su come migliorare il volto del team, non esitare! + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero.'), + ('position.creative-reuse.description', 'it-IT', 'Non tutti i computer che ci arrivano sono riparabili, ma vorremmo comunque minimizzare la quantità di materiale che finisce nel bidone. + +Se hai manualità e/o esperienze nel riuso creativo e/o making è il momento di dirlo. + +Puoi anche aggiungere se hai idee su come potremmo riutilizzare case vuoti, schede madri dall''estetica peculiare o i piatti a specchio di hard disk rotti. + +Accenna anche a che metodo seguiresti per progettare queste cose. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero.'), + ('position.other.description', 'it-IT', 'Stupiscici.'), + ('position.hardware-repair.description', 'en-US', 'Describe anything about your experience in computer repairs (desktop or laptops), or building computers, or soldering of electronic components. + +If you don''t know something, what do you do to learn it yourself, usually? You can give us some examples as well. + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than repairing computers.'), + ('position.electronics.description', 'en-US', 'One of the goals of the team is to develop electronic tools for low-level hardware diagnostics and the reuse of recovered hardware. + +What''s your relationship with electronics? Are you more interested in digital or analog (especially power) electronics do you like both equally? + +If you ever made any electronic circuit or project other than those for academic courses, tell us. Explain also the method you''ve used to build them (breadboard, prototype board, PCB, through-hole components or SMD, etc...) + +Tell us if you have experience with any Electronic Design Automation software (project, simulation, test and verification, etc...). + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than designing circuits.'), + ('position.python-software-dev.description', 'en-US', 'Describe any prior experience you have in coding in Python, and don''t hesitate sharing your Github account in your letter if you have one! + +Many of the internal tools of the team have been created with python, for example [Peracotta](https://github.com/WEEE-Open/peracotta) and [Pesto](https://github.com/WEEE-Open/pesto). If you know how to work with qt and interact with APIs, you are the person we are looking for! + +You could mention if you have ever used virtual environments, collaborated with someone else on a software project, or if you can code in other programming languages. + +Besides attending lectures, what do you do to learn? E.g. watching or reading tutorials online, starting to write code and looking things up on Stack Overflow as you go, etc... + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.php-software-dev.description', 'en-US', 'Our main PHP projects are [Tarallo](https://github.com/WEEE-Open/tarallo), [WEEEHire](https://github.com/WEEE-Open/WEEEHire-ng) and [crauto](https://github.com/WEEE-Open/crauto), you can have a look so you know what you''re going to work on. + +Describe any prior experience you have in coding in PHP, and don''t hesitate sharing your Github account in your letter if you have one! + +Even "for the exam of ... I created a program that does ..." or "I made the website for the bakery around the corner" are fine. + +If you know other programming languages, don''t hesitate to share your experience. + +You can also mention whether you know other programming languages or have ever participated to other collaborative projects. + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.javascript-software-dev.description', 'en-US', 'Since a couple of years we started migrating some of our projects to Node.js. We are looking for people capable of working with express, MySQL and creating APIs. + +Talk about any experience you have with JavaScript (backend, NodeJS apps, and frontend, vanilla JS, or any framework, especially Vue.js). Do you know other languages we use in the team, like Python, PHP and Bash, or others? Mention them! + +And if you have a Github account don''t hesitate to share it in your letter! + +Besides attending lectures, what do you do to learn? E.g. watching or reading tutorials online, starting to write code and looking things up on Stack Overflow as you go, etc... + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.vuejs-software-dev.description', 'en-US', 'Since a couple of years we started migrating some of our projects to Vue.js. We are looking for people capable of creating SPAs and PWAs with Vue.js integrated with backend services. + +Talk about any experience you have with JavaScript (frontend, vanilla JS, Vue.js or any other framework, and backend, NodeJS). Do you know other languages we use in the team, like Python, PHP and Bash, or others? Mention them! And if you have a Github account don''t hesitate to share it in your letter! + +Besides attending lectures, what do you do to learn? E.g. watching or reading tutorials online, starting to write code and looking things up on Stack Overflow as you go, etc... + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.machine-learning-engineer.description', 'en-US', 'From 2021-2022, thanks to the experience gained by some team members on the subject, and the launch of our project of software for students, we are looking for a figure who can take care of the creation of some models aimed at improving the user experience of the web platforms we intend to develop, in particular in the field of Natural Language Processing. + +If you know any of Python, PyTorch, Tensorflow, Keras, Jupyter Notebook and GitHub, we are looking for you! + +If you can also research scientific papers on new technologies on ArXiv or similar platforms, or you want to learn how to do it, great! + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests besides designing AIs.'), + ('position.sysadmin.description', 'en-US', 'Our sysadmins ensure that IT tools - which are essential for the team - are operating at peak efficiency. + +To do this, they manage our servers, collaborate with developers to deploy and update the software we made, monitor the health of our infrastructure and ensure that our data is safe from attacks and other disasters. + +Sysadmins oversee the entire service life cycle, from server configuration through Ansible, to containerization and service management, to routine maintenance procedures. + +The competences you will use are general knowledge of Ansible and containes, familiarity with managing and configuring common server software like Nginx, PHP and MariaDB/PostgreSQL, and familiarity with the Linux terminal. + +If you have any experience with this stuff, it''s time to talk about it. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than managing servers.'), + ('position.communication-and-social.description', 'en-US', 'Do you have good communication and organizational skills, you like our team and you want to help us improve our public image? This is the right place! + +We are looking for someone to perform the following tasks: + +- Write and publish posts/stories for our social media +- Organize temporal scheduling of contents +- Define the communication strategy in general +- Come up with new ideas for podcasts and videos +- Maintain relations with third parties, other associations and guests + +You will work together with digital content creators, who will provide graphic and video resources (or you can make them yourself, if you have the skills). + +Now tell us about yourself. + +Describe any experience you have in managing pages or profiles (e.g. personal, business, of random memes, etc...) on social networks, in particular Facebook and Instagram. + +Mention also the results you achieved with such promotional activities, if you can. + +If you had to explain in a few lines what does the team do, what would you write? + +Mention how much time you have for team activities, too, and if you have any other hobby or interests.'), + ('position.digital-content-creation.description', 'en-US', 'Unleash your inner creativity by joining our team! We are looking for people that will produce: + +- Designs for posters, infographics, business cards +- Graphic elements for web pages and social networks +- Backgrounds, icons and custom images for our software +-Redesigns and modding of repaired computer cases +- Jingles and music for our videos + +If you''re interested in at least one, or more than one, of these activities, this is the role for you. + +Tell us about any experience you have with arts, including personal projects (even small ones) or exams. + +If you want to show us some of your past works, sketches, concepts or you have any idea on how to improve the teams public "face", do not hesitate and tell us! + +Mention how much time you have for team activities, too, and if you have any other hobby or interests.'), + ('position.creative-reuse.description', 'en-US', 'Not all the computers that we get are repairable, but we''d still like to minimize the quantity of stuff that goes into the trash can. + +If you have any DIY skills and/or experiences in creative reuse and/or "making" this is the moment to tell us. + +You can also add some ideas (if you have any) on how we could reuse empty cases, particularly beautiful motherboards or shiny plates from broken hard disk drives. + +Point out which method you''d follow to develop these projects, too. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests.'), + ('position.other.description', 'en-US', 'Surprise us.'); + +create trigger if not exists delete_positions_translation + after delete on positions + begin + delete from translations where id = 'position.' || old.id || '.name'; + delete from translations where id = 'position.' || old.id || '.description'; + end; + +create trigger if not exists update_positions_translation + after update on positions + begin + update translations set id = 'position.' || new.id || '.name' where id = 'position.' || old.id || '.name'; + update translations set id = 'position.' || new.id || '.description' where id = 'position.' || old.id || '.description'; + end; + -- Be careful not to change this line other than the number of the version, this is parsed with regex by the updater -insert into config (id, value) values ('SchemaVersion', '0'); \ No newline at end of file +insert into config (id, value) values ('SchemaVersion', '1'); \ No newline at end of file diff --git a/database/update/1.sql b/database/update/1.sql index 9409d08..80b8813 100644 --- a/database/update/1.sql +++ b/database/update/1.sql @@ -1,3 +1,321 @@ +create table if not exists positions ( + id varchar not null primary key, + idx integer not null, + available integer not null +); --- TODO: actually use this \ No newline at end of file +create table if not exists translations ( + id varchar not null, + lang varchar not null, + value varchar not null, + unique(id, lang) +); + +insert into positions (id, idx, available) values + ('hardware-repair', 0, 1), + ('electronics', 1, 1), + ('python-software-dev', 2, 1), + ('php-software-dev', 3, 1), + ('javascript-software-dev', 4, 1), + ('vuejs-software-dev', 5, 1), + ('machine-learning-engineer', 6, 1), + ('sysadmin', 7, 1), + ('communication-and-social', 8, 1), + ('digital-content-creation', 9, 1), + ('creative-reuse', 10, 1), + ('other', 11, 1); + +insert into translations (id, lang, value) values + ('position.hardware-repair.name', 'it-IT', 'Riparazione hardware'), + ('position.electronics.name', 'it-IT', 'Elettronica'), + ('position.python-software-dev.name', 'it-IT', 'Sviluppo software Python'), + ('position.php-software-dev.name', 'it-IT', 'Sviluppo software PHP'), + ('position.javascript-software-dev.name', 'it-IT', 'Sviluppo software JavaScript'), + ('position.vuejs-software-dev.name', 'it-IT', 'Sviluppo software Vue.js'), + ('position.machine-learning-engineer.name', 'it-IT', 'Machine Learning Engineer'), + ('position.sysadmin.name', 'it-IT', 'Sysadmin'), + ('position.communication-and-social.name', 'it-IT', 'Comunicazione e social'), + ('position.digital-content-creation.name', 'it-IT', 'Creazione di contenuti digitali'), + ('position.creative-reuse.name', 'it-IT', 'Riuso creativo'), + ('position.other.name', 'it-IT', 'Altro'), + ('position.hardware-repair.name', 'en-US', 'Hardware repair'), + ('position.electronics.name', 'en-US', 'Electronics'), + ('position.python-software-dev.name', 'en-US', 'Python software development'), + ('position.php-software-dev.name', 'en-US', 'PHP software development'), + ('position.javascript-software-dev.name', 'en-US', 'JavaScript software development'), + ('position.vuejs-software-dev.name', 'en-US', 'Vue.js software development'), + ('position.machine-learning-engineer.name', 'en-US', 'Machine Learning Engineer'), + ('position.sysadmin.name', 'en-US', 'Sysadmin'), + ('position.communication-and-social.name', 'en-US', 'Communication and social'), + ('position.digital-content-creation.name', 'en-US', 'Digital content creation'), + ('position.creative-reuse.name', 'en-US', 'Creative reuse'), + ('position.other.name', 'en-US', 'Other'), + ('position.hardware-repair.description', 'it-IT', 'Descrivi qualsiasi tua esperienza di riparazione di computer (fissi o portatili), o assemblaggio, o saldatura di componenti elettronici. + +Se non sai qualcosa, cosa fai per imparare in autonomia? Puoi anche fornire degli esempi. + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a riparare computer.'), + ('position.electronics.description', 'it-IT', 'Uno degli obiettivi del team è la progettazione di strumenti elettronici per la diagnostica a basso livello e il riuso dell''hardware recuperato. + +Qual è il tuo rapporto con il mondo dell''elettronica? Ti interessa di più l''elettronica digitale o analogica (specialmente di potenza) o ti interessano entrambe? + +Se hai mai realizzato qualche circuito o progetto oltre a quelli nei laboratori didattici, parlane con riferimento anche al metodo con cui è stato realizzato (breadboard, millefori, circuito stampato, componenti through-hole o SMD, etc...). + +Indica anche se hai dimestichezza con qualche software di Electronic Design Automation (progettazione, simulazione, test e verifica, etc...). + +Menziona anche quanto tempo potresti dedicare al team e se fai qualcos''altro di interessante nel tempo libero oltre a progettare circuiti.'), + ('position.python-software-dev.description', 'it-IT', 'Descrivi qualsiasi tua esperienza nel programmare in Python, e se hai un account su Github non esitare a condividerlo nella tua lettera! + +Molti degli strumenti interni del team sono stati creati con python, per esempio la [Peracotta](https://github.com/WEEE-Open/peracotta) ed il [Pesto](https://github.com/WEEE-Open/pesto). Se conosci come lavorare con qt ed interagire con API, sei la persona che stiamo cercando! + +Potresti menzionare se hai mai usato virtual environments, collaborato con qualcuno su un progetto software, o se sai scrivere in altri linguaggi che usiamo nel team, come JavaScript, PHP e Bash o altri ancora. + +Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire tutorial su internet, iniziare a scrivere codice e cercare man mano su Stack Overflow, etc...)? + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.php-software-dev.description', 'it-IT', 'I principali progetti PHP del team sono [Tarallo](https://github.com/WEEE-Open/tarallo), [WEEEHire](https://github.com/WEEE-Open/WEEEHire-ng) e [crauto](https://github.com/WEEE-Open/crauto), puoi darci già un''occhiata per sapere a cosa vai incontro. + +Descrivi qualsiasi tua esperienza nel programmare in PHP, e se hai un account su Github non esitare a condividerlo nella tua lettera! + +Va bene anche "per l''esame di ... ho creato un programma che fa ..." o "ho fatto il sito web per la panetteria all''angolo". + +Se conosci anche altri linguaggi non esitare a condividere la tua esperienza. + +Puoi anche menzionare se conosci altri linguaggi di programmazione o hai mai partecipato ad altri progetti collaborativi. + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.javascript-software-dev.description', 'it-IT', 'Da un paio d''anni abbiamo iniziato a migrare alcuni dei nostri progetti a Node.js. Cerchiamo persone capaci di lavorare con express, MySQL e creare API. + +Parla di qualsiasi tua esperienza riguardante l''utilizzo di JavaScript (backend, app NodeJS, e frontend, sia vanilla JS, sia framework, in particolare Vue.js). Conosci altri linguaggi che usiamo in team, come Python, PHP e Bash, o altri ancora? Menzionali pure! E se hai un account su Github non esitare a condividerlo nella tua lettera! + +Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire tutorial su internet, iniziare a scrivere codice e cercare man mano su Stack Overflow, etc...)? + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.vuejs-software-dev.description', 'it-IT', 'Da un paio d''anni abbiamo iniziato a migrare alcuni dei nostri progetti a Vue.js. Cerchiamo persone capaci di creare SPA e PWA con Vue.js integrate con servizi backend. + +Parla di qualsiasi tua esperienza riguardante l''utilizzo di JavaScript (frontend, vanilla JS, Vue.js or any other framework, e backend, NodeJS). Conosci altri linguaggi che usiamo in team, come Python, PHP e Bash, o altri ancora? Menzionali pure! E se hai un account su Github non esitare a condividerlo nella tua lettera! + +Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire tutorial su internet, iniziare a scrivere codice e cercare man mano su Stack Overflow, etc...)? + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a digitare codice.'), + ('position.machine-learning-engineer.description', 'it-IT', 'Dal 2021-2022, grazie all''esperienza acquisita da alcuni membri del team in materia, e al lancio del nostro progetto di software per studenti, cerchiamo una figura che possa occuparsi della creazione di alcuni modelli volti a migliorare l''esperienza utente delle piattaforme web che abbiamo intenzione di sviluppare, in particolare nell''ambito del Natural Language Processing. + +Se hai delle conoscenze riguardo a qualcuno tra Python, PyTorch, Tensorflow, Keras, Jupyter Notebook e GitHub, stiamo cercando proprio te! + +Se in più sai ricercare paper scientifici su nuove tecnologie su ArXiv o simili, o hai intenzione di imparare a farlo, fantastico! + +Se hai mai usato Linux, parlane liberamente: su tutti i computer che ripariamo installiamo Linux. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre a progettare intelligenze artificiali.'), + ('position.sysadmin.description', 'it-IT', 'Il compito dei sysadmin è assicurarsi che gli strumenti informatici a cui il team si appoggia per le sue operazioni siano al massimo della loro efficienza. + +Per fare questo gestiscono i server che ospitano i nostri servizi, collaborano con gli sviluppatori per deployare e aggiornare i software che creiamo, monitorano lo stato di salute della nostra infrastruttura e si assicurano che i nostri dati siano protetti da attacchi e perdite. + +I sysadmin seguono l''intero ciclo di vita dei servizi, dalla configurazione del server tramite Ansible, passando per la containerizzazione e gestione dei servizi, alle normali procedure di manutenzione. + +Le competenze esercitate sono una generale conoscenza di Ansible e della containerizzazione, familiarità con la gestione e configurazione di software per server comuni come Nginx, PHP e MariaDB/PostgreSQL e maneggevolezza con il terminale Linux. + +Se hai esperienza con alcune di queste cose, parlane liberamente. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero oltre ad amministrare server.'), + ('position.communication-and-social.description', 'it-IT', 'Hai buone capacità di comunicazione e organizzazione, ti piace il nostro team e vuoi aiutarci a migliorare la nostra immagine? Questo è il posto che fa per te! + +Cerchiamo qualcuno che possa svolgere le seguenti mansioni: + +- Scrittura e pubblicazione di post e storie per i nostri social +- Programmazione temporale dei contenuti +- Definizione della strategia di comunicazione in generale +- Brainstorming di idee per podcast e video tematici +- Intrattenimento di rapporti con terzi, altre associazioni e ospiti + +Ti troverai a lavorare in sinergia con i creatori di contenuti digitali, che si occuperanno di produrre materiale grafico e video (o potrai occupartene tu stesso se ti va e ne sei capace). + +Ora parlaci di te. + +Descrivi qualsiasi tua esperienza nel gestire pagine o profili (e.g. personali, di attività commerciali, di meme nonsense, etc...) sui social network, in particolare Facebook e Instagram. + +Menziona anche i risultati raggiunti con tali attività promozionali, se possibile. + +Se dovessi spiegare in due righe cosa fa il team, cosa diresti? + +Indica anche quanto tempo potresti dedicare a queste attività e se hai qualche altro interesse.'), + ('position.digital-content-creation.description', 'it-IT', 'Sprigiona la tua vena creativa entrando nel nostro team! Abbiamo bisogno di figure che si occupino di realizzare: + +- Design di manifesti, infografiche, biglietti da visita +- Elementi grafici per pagine web e social network +- Sfondi, icone e immagini personalizzate per i nostri software +- Redesign e modding dei case dei computer riparati +- Jingle e motivi musicali per i nostri video + +Se almeno una, o più di una, di queste attività di interessano, questo è il ruolo adatto. + +Parla di qualsiasi esperienza artistica, inclusi progetti personali (anche piccoli) o esami sostenuti. + +Se vuoi mostrarci alcuni dei tuoi lavori passati, abbozzi, concepts o hai idee su come migliorare il volto del team, non esitare! + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero.'), + ('position.creative-reuse.description', 'it-IT', 'Non tutti i computer che ci arrivano sono riparabili, ma vorremmo comunque minimizzare la quantità di materiale che finisce nel bidone. + +Se hai manualità e/o esperienze nel riuso creativo e/o making è il momento di dirlo. + +Puoi anche aggiungere se hai idee su come potremmo riutilizzare case vuoti, schede madri dall''estetica peculiare o i piatti a specchio di hard disk rotti. + +Accenna anche a che metodo seguiresti per progettare queste cose. + +Menziona anche quanto tempo potresti dedicare alle attività in team e se fai altro di interessante nel tempo libero.'), + ('position.other.description', 'it-IT', 'Stupiscici.'), + ('position.hardware-repair.description', 'en-US', 'Describe anything about your experience in computer repairs (desktop or laptops), or building computers, or soldering of electronic components. + +If you don''t know something, what do you do to learn it yourself, usually? You can give us some examples as well. + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than repairing computers.'), + ('position.electronics.description', 'en-US', 'One of the goals of the team is to develop electronic tools for low-level hardware diagnostics and the reuse of recovered hardware. + +What''s your relationship with electronics? Are you more interested in digital or analog (especially power) electronics do you like both equally? + +If you ever made any electronic circuit or project other than those for academic courses, tell us. Explain also the method you''ve used to build them (breadboard, prototype board, PCB, through-hole components or SMD, etc...) + +Tell us if you have experience with any Electronic Design Automation software (project, simulation, test and verification, etc...). + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than designing circuits.'), + ('position.python-software-dev.description', 'en-US', 'Describe any prior experience you have in coding in Python, and don''t hesitate sharing your Github account in your letter if you have one! + +Many of the internal tools of the team have been created with python, for example [Peracotta](https://github.com/WEEE-Open/peracotta) and [Pesto](https://github.com/WEEE-Open/pesto). If you know how to work with qt and interact with APIs, you are the person we are looking for! + +You could mention if you have ever used virtual environments, collaborated with someone else on a software project, or if you can code in other programming languages. + +Besides attending lectures, what do you do to learn? E.g. watching or reading tutorials online, starting to write code and looking things up on Stack Overflow as you go, etc... + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.php-software-dev.description', 'en-US', 'Our main PHP projects are [Tarallo](https://github.com/WEEE-Open/tarallo), [WEEEHire](https://github.com/WEEE-Open/WEEEHire-ng) and [crauto](https://github.com/WEEE-Open/crauto), you can have a look so you know what you''re going to work on. + +Describe any prior experience you have in coding in PHP, and don''t hesitate sharing your Github account in your letter if you have one! + +Even "for the exam of ... I created a program that does ..." or "I made the website for the bakery around the corner" are fine. + +If you know other programming languages, don''t hesitate to share your experience. + +You can also mention whether you know other programming languages or have ever participated to other collaborative projects. + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.javascript-software-dev.description', 'en-US', 'Since a couple of years we started migrating some of our projects to Node.js. We are looking for people capable of working with express, MySQL and creating APIs. + +Talk about any experience you have with JavaScript (backend, NodeJS apps, and frontend, vanilla JS, or any framework, especially Vue.js). Do you know other languages we use in the team, like Python, PHP and Bash, or others? Mention them! + +And if you have a Github account don''t hesitate to share it in your letter! + +Besides attending lectures, what do you do to learn? E.g. watching or reading tutorials online, starting to write code and looking things up on Stack Overflow as you go, etc... + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.vuejs-software-dev.description', 'en-US', 'Since a couple of years we started migrating some of our projects to Vue.js. We are looking for people capable of creating SPAs and PWAs with Vue.js integrated with backend services. + +Talk about any experience you have with JavaScript (frontend, vanilla JS, Vue.js or any other framework, and backend, NodeJS). Do you know other languages we use in the team, like Python, PHP and Bash, or others? Mention them! And if you have a Github account don''t hesitate to share it in your letter! + +Besides attending lectures, what do you do to learn? E.g. watching or reading tutorials online, starting to write code and looking things up on Stack Overflow as you go, etc... + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than typing code.'), + ('position.machine-learning-engineer.description', 'en-US', 'From 2021-2022, thanks to the experience gained by some team members on the subject, and the launch of our project of software for students, we are looking for a figure who can take care of the creation of some models aimed at improving the user experience of the web platforms we intend to develop, in particular in the field of Natural Language Processing. + +If you know any of Python, PyTorch, Tensorflow, Keras, Jupyter Notebook and GitHub, we are looking for you! + +If you can also research scientific papers on new technologies on ArXiv or similar platforms, or you want to learn how to do it, great! + +If you ever used Linux, feel free to talk about it: we install Linux on every computer that we repair. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests besides designing AIs.'), + ('position.sysadmin.description', 'en-US', 'Our sysadmins ensure that IT tools - which are essential for the team - are operating at peak efficiency. + +To do this, they manage our servers, collaborate with developers to deploy and update the software we made, monitor the health of our infrastructure and ensure that our data is safe from attacks and other disasters. + +Sysadmins oversee the entire service life cycle, from server configuration through Ansible, to containerization and service management, to routine maintenance procedures. + +The competences you will use are general knowledge of Ansible and containes, familiarity with managing and configuring common server software like Nginx, PHP and MariaDB/PostgreSQL, and familiarity with the Linux terminal. + +If you have any experience with this stuff, it''s time to talk about it. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests other than managing servers.'), + ('position.communication-and-social.description', 'en-US', 'Do you have good communication and organizational skills, you like our team and you want to help us improve our public image? This is the right place! + +We are looking for someone to perform the following tasks: + +- Write and publish posts/stories for our social media +- Organize temporal scheduling of contents +- Define the communication strategy in general +- Come up with new ideas for podcasts and videos +- Maintain relations with third parties, other associations and guests + +You will work together with digital content creators, who will provide graphic and video resources (or you can make them yourself, if you have the skills). + +Now tell us about yourself. + +Describe any experience you have in managing pages or profiles (e.g. personal, business, of random memes, etc...) on social networks, in particular Facebook and Instagram. + +Mention also the results you achieved with such promotional activities, if you can. + +If you had to explain in a few lines what does the team do, what would you write? + +Mention how much time you have for team activities, too, and if you have any other hobby or interests.'), + ('position.digital-content-creation.description', 'en-US', 'Unleash your inner creativity by joining our team! We are looking for people that will produce: + +- Designs for posters, infographics, business cards +- Graphic elements for web pages and social networks +- Backgrounds, icons and custom images for our software +-Redesigns and modding of repaired computer cases +- Jingles and music for our videos + +If you''re interested in at least one, or more than one, of these activities, this is the role for you. + +Tell us about any experience you have with arts, including personal projects (even small ones) or exams. + +If you want to show us some of your past works, sketches, concepts or you have any idea on how to improve the teams public "face", do not hesitate and tell us! + +Mention how much time you have for team activities, too, and if you have any other hobby or interests.'), + ('position.creative-reuse.description', 'en-US', 'Not all the computers that we get are repairable, but we''d still like to minimize the quantity of stuff that goes into the trash can. + +If you have any DIY skills and/or experiences in creative reuse and/or "making" this is the moment to tell us. + +You can also add some ideas (if you have any) on how we could reuse empty cases, particularly beautiful motherboards or shiny plates from broken hard disk drives. + +Point out which method you''d follow to develop these projects, too. + +Mention how much time you have for team activities, too, and if you have any other hobby or interests.'), + ('position.other.description', 'en-US', 'Surprise us.'); + + + +create trigger if not exists delete_positions_translation + after delete on positions + begin + delete from translations where id = 'position.' || old.id || '.name'; + delete from translations where id = 'position.' || old.id || '.description'; + end; + +create trigger if not exists update_positions_translation + after update on positions + begin + update translations set id = 'position.' || new.id || '.name' where id = 'position.' || old.id || '.name'; + update translations set id = 'position.' || new.id || '.description' where id = 'position.' || old.id || '.description'; + end; + +delete from config where id = 'rolesAvailable'; \ No newline at end of file diff --git a/public/position.php b/public/position.php new file mode 100644 index 0000000..4a9949d --- /dev/null +++ b/public/position.php @@ -0,0 +1,12 @@ +handle($request); +(new SapiEmitter())->emit($response); diff --git a/public/weee.css b/public/weee.css index 1e336d8..cbdb2c8 100644 --- a/public/weee.css +++ b/public/weee.css @@ -93,3 +93,7 @@ a.disabled { .hidden { display: none !important; } + +.autoresize { + resize: none; +} \ No newline at end of file diff --git a/resources/locale/en-US/LC_MESSAGES/messages.po b/resources/locale/en-US/LC_MESSAGES/messages.po index 2d1dc40..a209969 100644 --- a/resources/locale/en-US/LC_MESSAGES/messages.po +++ b/resources/locale/en-US/LC_MESSAGES/messages.po @@ -8,51 +8,53 @@ # SPDX-FileCopyrightText: 2024 quel _tale # SPDX-FileCopyrightText: 2024 quel _tale # SPDX-FileCopyrightText: 2024 quel _tale +# SPDX-FileCopyrightText: 2024 enrico msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-14 23:13+0100\n" -"PO-Revision-Date: 2024-03-14 23:14+0100\n" -"Last-Translator: quel_tale \n" -"Language-Team: Italian <>\n" +"POT-Creation-Date: 2024-07-09 11:27+0200\n" +"PO-Revision-Date: 2024-07-09 11:37+0200\n" +"Last-Translator: enrico \n" +"Language-Team: Italian \n" "Language: en_US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 23.08.5\n" +"X-Generator: Lokalize 24.05.0\n" -#: templates/adminnavbar.php:9 +#: templates/adminnavbar.php:15 #, php-format msgid "Ciao, %s (%s)" msgstr "Hi, %s (%s)" -#: templates/adminnavbar.php:13 templates/candidate.php:18 -#: templates/candidates.php:9 templates/candidates.php:23 -#: templates/interviews.php:6 +#: templates/adminnavbar.php:19 templates/candidate.php:20 +#: templates/candidates.php:15 templates/candidates.php:29 +#: templates/interviews.php:12 msgid "Candidati" msgstr "Candidates" -#: templates/adminnavbar.php:16 templates/interview.php:16 +#: templates/adminnavbar.php:22 templates/interview.php:18 msgid "Colloqui" msgstr "Interviews" -#: templates/adminnavbar.php:19 templates/candidate.php:267 -#: templates/candidates.php:31 templates/interview.php:51 -#: templates/interviewsbyrecruiter.php:7 templates/interviewsbyrecruiter.php:26 +#: templates/adminnavbar.php:25 templates/candidate.php:286 +#: templates/candidates.php:37 templates/interview.php:53 +#: templates/interviewsbyrecruiter.php:15 +#: templates/interviewsbyrecruiter.php:34 msgid "Recruiter" msgstr "Recruiter" -#: templates/adminnavbar.php:22 +#: templates/adminnavbar.php:28 msgid "Impostazioni" msgstr "Settings" -#: templates/adminnavbar.php:25 templates/logout.php:3 templates/logout.php:5 +#: templates/adminnavbar.php:31 templates/logout.php:3 templates/logout.php:5 msgid "Logout" msgstr "Logout" -#: templates/base.php:12 templates/index.php:6 +#: templates/base.php:20 templates/index.php:8 msgid "Entra in WEEE Open" msgstr "Join WEEE Open" @@ -70,295 +72,314 @@ msgid "" "futuro." msgstr "Sorry, but applications are closed right now. Try again in the future." -#: templates/candidate.php:11 templates/interview.php:9 +#: templates/candidate.php:13 templates/interview.php:11 #, php-format msgid "%s %s (%s)" msgstr "%s %s (%s)" -#: templates/candidate.php:12 +#: templates/candidate.php:14 #, php-format msgid "%s - Candidatura" msgstr "%s's application" -#: templates/candidate.php:26 +#: templates/candidate.php:28 msgid "" "Candidatura approvata, ma email non ancora inviata" msgstr "Application approved, but email not yet sent" -#: templates/candidate.php:31 +#: templates/candidate.php:33 #, php-format msgid "Candidatura approvata, passa al colloquio" msgstr "Application approved, go to the interview page" -#: templates/candidate.php:38 +#: templates/candidate.php:40 msgid "Candidatura rifiutata" msgstr "Candidate rejected" -#: templates/candidate.php:42 +#: templates/candidate.php:44 msgid "Candidatura rimandata" msgstr "Candidate postponed" -#: templates/candidate.php:47 +#: templates/candidate.php:49 msgid "Risultati pubblicati, ti consiglio di non modificarli" msgstr "Results already published, I suggest you don't edit them" -#: templates/candidate.php:70 +#: templates/candidate.php:72 msgid "Valutazioni" msgstr "Evaluations" -#: templates/candidate.php:74 +#: templates/candidate.php:76 #, php-format msgid "Valutazione: %s %s" msgstr "Evaluation: %s %s" -#: templates/candidate.php:81 +#: templates/candidate.php:83 msgid "Nome valutatore" msgstr "Voter name" -#: templates/candidate.php:82 templates/candidate.php:129 -#: templates/candidates.php:29 +#: templates/candidate.php:84 templates/candidate.php:131 +#: templates/candidates.php:35 msgid "Voto" msgstr "Evaluation" -#: templates/candidate.php:83 templates/interview.php:73 -#: templates/interviews.php:142 templates/notes.php:12 +#: templates/candidate.php:85 templates/interview.php:75 +#: templates/interviews.php:151 templates/notes.php:14 msgid "Data" msgstr "Date" -#: templates/candidate.php:84 templates/notes.php:15 +#: templates/candidate.php:86 templates/notes.php:17 msgid "Azioni" msgstr "Actions" -#: templates/candidate.php:90 templates/candidate.php:125 +#: templates/candidate.php:92 templates/candidate.php:127 #, php-format msgid "%s (%s)" msgstr "%s (%s)" -#: templates/candidate.php:97 +#: templates/candidate.php:99 msgid "Elimina 🗑" msgstr "Delete 🗑" -#: templates/candidate.php:104 templates/candidates.php:129 +#: templates/candidate.php:106 templates/candidates.php:137 msgid "Mostra (spoiler!)" msgstr "Show (spoiler!)" -#: templates/candidate.php:141 +#: templates/candidate.php:143 msgid "Vota" msgstr "Vote" -#: templates/candidate.php:151 templates/interview.php:132 +#: templates/candidate.php:153 templates/interview.php:131 msgid "Note" msgstr "Notes" -#: templates/candidate.php:166 templates/candidate.php:172 -#: templates/interview.php:146 templates/interview.php:152 +#: templates/candidate.php:168 templates/candidate.php:174 +#: templates/interview.php:145 templates/interview.php:151 msgid "Aggiungi nota" msgstr "Add note" -#: templates/candidate.php:181 templates/interview.php:129 +#: templates/candidate.php:180 templates/interview.php:128 msgid "Modifica dati" msgstr "Edit info" -#: templates/candidate.php:185 +#: templates/candidate.php:184 msgid "Precedente da valutare" msgstr "Previous to be evaluated" -#: templates/candidate.php:186 +#: templates/candidate.php:185 msgid "Precedente" msgstr "Previous" -#: templates/candidate.php:187 +#: templates/candidate.php:186 msgid "Successivo" msgstr "Next" -#: templates/candidate.php:188 +#: templates/candidate.php:187 msgid "Successivo da valutare" msgstr "Next to be evaluated" -#: templates/candidate.php:195 +#: templates/candidate.php:194 msgid "Motivazioni (visibili alla persona interessata)" msgstr "Motivation (visible to this person)" -#: templates/candidate.php:206 +#: templates/candidate.php:205 msgid "Rinvia email" msgstr "Send email again" -#: templates/candidate.php:208 templates/candidate.php:253 +#: templates/candidate.php:207 templates/candidate.php:252 msgid "Approva candidatura" msgstr "Approve" -#: templates/candidate.php:210 +#: templates/candidate.php:209 msgid "Rifiuta candidatura" msgstr "Reject" -#: templates/candidate.php:212 templates/candidate.php:247 -#: templates/interview.php:172 +#: templates/candidate.php:211 templates/candidate.php:246 +#: templates/interview.php:171 msgid "Metti in lista d'attesa" msgstr "Put on hold" -#: templates/candidate.php:218 templates/candidate.php:226 -#: templates/interview.php:180 +#: templates/candidate.php:217 templates/candidate.php:225 +#: templates/interview.php:179 msgid "Rimanda nel limbo" msgstr "Send back to limbo" -#: templates/candidate.php:224 templates/candidate.php:233 +#: templates/candidate.php:223 templates/candidate.php:232 msgid "Pubblica" msgstr "Publish" -#: templates/candidate.php:235 templates/interview.php:169 +#: templates/candidate.php:234 templates/interview.php:168 msgid "Togli dalla lista d'attesa" msgstr "Remove from hold" -#: templates/candidate.php:237 templates/candidate.php:257 +#: templates/candidate.php:236 templates/candidate.php:256 msgid "Salva motivazioni" msgstr "Save motivation" -#: templates/candidate.php:255 +#: templates/candidate.php:254 msgid "Rifiuta candidatura definitivamente" msgstr "Reject, at last" -#: templates/candidate.php:288 +#: templates/candidate.php:266 templates/position.php:117 +#: templates/settings.php:51 templates/settings.php:55 +msgid "Conferma" +msgstr "Confirm" + +#: templates/candidate.php:272 +msgid "Sei sicuro di voler rinviare l'email di candidatura?" +msgstr "Are you sure you wish to send the email again?" + +#: templates/candidate.php:275 templates/position.php:127 +#: templates/settings.php:110 templates/userinfo.php:64 +msgid "Annulla" +msgstr "Cancel" + +#: templates/candidate.php:277 templates/form.php:240 +msgid "Invia" +msgstr "Send" + +#: templates/candidate.php:307 msgid "Lingua e template" msgstr "Language and template" -#: templates/candidate.php:295 +#: templates/candidate.php:314 msgid "Template" msgstr "Template" -#: templates/candidate.php:308 +#: templates/candidate.php:327 msgid "Oggetto" msgstr "Subject" -#: templates/candidate.php:314 +#: templates/candidate.php:333 msgid "Email" msgstr "Email" -#: templates/candidate.php:319 +#: templates/candidate.php:338 msgid "Pubblica e manda email" msgstr "Publish and send email" -#: templates/candidate.php:410 +#: templates/candidate.php:429 #, php-format msgid "Mail inviata da %s" msgstr "Mail sent by %s" -#: templates/candidate.php:416 templates/interview.php:187 +#: templates/candidate.php:435 templates/interview.php:186 #, php-format msgid "Link d'invito: %s" msgstr "Invite link: %s" -#: templates/candidates.php:27 templates/form.php:50 -#: templates/interviews.php:26 templates/interviews.php:106 -#: templates/interviews.php:141 templates/userinfo.php:14 +#: templates/candidates.php:33 templates/form.php:53 +#: templates/interviews.php:32 templates/interviews.php:112 +#: templates/interviews.php:150 templates/position.php:80 +#: templates/settings.php:101 templates/userinfo.php:20 msgid "Nome" msgstr "Name" -#: templates/candidates.php:28 templates/form.php:193 -#: templates/interviews.php:27 templates/interviews.php:107 -#: templates/userinfo.php:43 +#: templates/candidates.php:34 templates/form.php:196 +#: templates/interviews.php:33 templates/interviews.php:113 +#: templates/userinfo.php:49 msgid "Interesse" msgstr "Preference" -#: templates/candidates.php:30 +#: templates/candidates.php:36 msgid "Inviato" msgstr "Sent" -#: templates/candidates.php:32 templates/interviews.php:30 +#: templates/candidates.php:38 templates/interviews.php:36 msgid "Stato" msgstr "Status" -#: templates/candidates.php:47 templates/interviews.php:47 +#: templates/candidates.php:55 templates/interviews.php:53 msgid "Da decidere" msgstr "To be decided" -#: templates/candidates.php:53 +#: templates/candidates.php:61 msgid "Approvata, da pubblicare" msgstr "Approved, not yet published" -#: templates/candidates.php:59 +#: templates/candidates.php:67 msgid "Rifiutata, da pubblicare" msgstr "Rejected, not yet published" -#: templates/candidates.php:65 templates/interviews.php:49 +#: templates/candidates.php:73 templates/interviews.php:55 msgid "In lista d'attesa" msgstr "On hold" -#: templates/candidates.php:71 +#: templates/candidates.php:79 msgid "Approvata, pubblicata" msgstr "Approved, published" -#: templates/candidates.php:77 +#: templates/candidates.php:85 msgid "Rifiutata, pubblicata" msgstr "Rejected, published" -#: templates/candidates.php:83 +#: templates/candidates.php:91 msgid "In lista d'attesa, pubblicata" msgstr "On hold, published" -#: templates/candidates.php:163 +#: templates/candidates.php:171 msgid "Pubblica rifiutati" msgstr "Publish rejected" -#: templates/candidates.php:175 +#: templates/candidates.php:183 msgid "Cancella" msgstr "Delete" -#: templates/candidates.php:176 +#: templates/candidates.php:184 msgid "Cancella candidati più vecchi di tot giorni (solo pubblicati)" msgstr "Delete older than n days (published only)" -#: templates/candidates.php:181 +#: templates/candidates.php:189 #, php-format msgid "%d candidato in totale" msgid_plural "%d candidati totali" msgstr[0] "%d candidate" msgstr[1] "%d candidates" -#: templates/candidates.php:182 +#: templates/candidates.php:190 #, php-format msgid "%d da valutare" msgid_plural "%d da valutare" msgstr[0] "%d to be decided" msgstr[1] "%d to be decided" -#: templates/candidates.php:183 templates/interviews.php:126 +#: templates/candidates.php:191 templates/interviews.php:132 #, php-format msgid "%d approvato" msgid_plural "%d approvati" msgstr[0] "%d approved" msgstr[1] "%d approved" -#: templates/candidates.php:184 templates/interviews.php:127 +#: templates/candidates.php:192 templates/interviews.php:133 #, php-format msgid "%d rifiutato" msgid_plural "%d rifiutati" msgstr[0] "%d rejected" msgstr[1] "%d rejected" -#: templates/candidates.php:185 +#: templates/candidates.php:193 #, php-format msgid "%d da pubblicare" msgid_plural "%d da pubblicare" msgstr[0] "%d to be published" msgstr[1] "%d to be published" -#: templates/candidates.php:186 +#: templates/candidates.php:194 #, php-format msgid "%d pubblicato" msgid_plural "%d pubblicati" msgstr[0] "%d published" msgstr[1] "%d published" -#: templates/confirm_email.php:7 +#: templates/confirm_email.php:13 msgid "Candidatura in WEEE Open" msgstr "Your application to WEEE Open" -#: templates/confirm_email.php:9 +#: templates/confirm_email.php:15 msgid "Ciao!" msgstr "Hi!" -#: templates/confirm_email.php:10 +#: templates/confirm_email.php:16 #, php-format msgid "" "Abbiamo ricevuto la tua candidatura per il team WEEE Open, questa è la " @@ -367,7 +388,7 @@ msgstr "" "We have received your application for the WEEE Open team, this is the web " "page where you’ll be able to check the status of your application: %s" -#: templates/confirm_email.php:11 +#: templates/confirm_email.php:17 msgid "" "Se la domanda sarà approvata, riceverai un'email sempre a questo indirizzo " "con scritto chi contattare per passare al colloquio. Le stesse informazioni " @@ -377,11 +398,11 @@ msgstr "" "address with our contacts to to schedule an interview with someone from our " "team. The same information will be available at the web page linked above." -#: templates/confirm_email.php:12 +#: templates/confirm_email.php:18 msgid "Buona fortuna ;)" msgstr "Good luck ;)" -#: templates/confirm_email.php:14 +#: templates/confirm_email.php:20 msgid "" "Nota: se hai già ricevuto un email come questa, il link sulla precedente " "email non è più valido. Usa il link sopra per verificare lo stato della tua " @@ -391,7 +412,7 @@ msgstr "" "email is expired. Use the new link above to check the status of your " "application." -#: templates/confirm_email.php:16 +#: templates/confirm_email.php:22 #, php-format msgid "" "Se non hai inviato tu questa candidatura e presumi che questa e-mail ti sia " @@ -402,7 +423,7 @@ msgstr "" "sent to you by mistake, you can ignore it. If the issue persists, please, " "contact us at the following e-mail address: %s" -#: templates/confirm_email.php:17 +#: templates/confirm_email.php:23 msgid "Il software WEEEHire per conto del team WEEE Open" msgstr "The WEEEHire software on behalf of WEEE Open Team" @@ -425,51 +446,51 @@ msgid "" msgstr "" "All other roles allow you to participated from home, entirely or partially." -#: templates/day.php:6 +#: templates/day.php:8 msgid "Lunedì" msgstr "Monday" -#: templates/day.php:9 +#: templates/day.php:11 msgid "Martedì" msgstr "Tuesday" -#: templates/day.php:12 +#: templates/day.php:14 msgid "Mercoledì" msgstr "Wednesday" -#: templates/day.php:15 +#: templates/day.php:17 msgid "Giovedì" msgstr "Thursday" -#: templates/day.php:18 +#: templates/day.php:20 msgid "Venerdì" msgstr "Friday" -#: templates/day.php:21 +#: templates/day.php:23 msgid "Sabato" msgstr "Saturday" -#: templates/day.php:24 +#: templates/day.php:26 msgid "Domenica" msgstr "Sunday" -#: templates/error.php:4 templates/error.php:7 +#: templates/error.php:6 templates/error.php:9 msgid "Errore" msgstr "Error" -#: templates/form.php:13 +#: templates/form.php:16 msgid "Compila il questionario" msgstr "Fill the application form" -#: templates/form.php:21 +#: templates/form.php:24 msgid "Riempi tutti i campi del form, per favore" msgstr "Fill the entire form, please" -#: templates/form.php:24 +#: templates/form.php:27 msgid "È necessario prestare il consenso per procedere" msgstr "You need to agree to the terms to proceed" -#: templates/form.php:28 +#: templates/form.php:31 #, php-format msgid "" "Errore di connessione al database. Se il problema persiste, puoi contattarci " @@ -478,7 +499,7 @@ msgstr "" "Error connecting to database. If the problem continues, you can contact us " "at %s" -#: templates/form.php:33 +#: templates/form.php:36 msgid "" "Hai già inviato una candidatura con questa matricola. Puoi controllare la " "pagina con lo stato dal link che ti abbiamo mandato via email. Per favore " @@ -493,7 +514,7 @@ msgstr "" "polito.it/en_us/contattaci/\" target=\"_blank\">send us a message through " "the website or tell us during the interview." -#: templates/form.php:37 +#: templates/form.php:40 #, php-format msgid "" "Si è rotto qualcosa (o hai rotto qualcosa?) durante l'invio. Puoi " @@ -502,59 +523,59 @@ msgstr "" "Something broke (or you did broke something?) while submitting the form. You " "can contact us at %s and tell us what happened, if you want." -#: templates/form.php:54 templates/userinfo.php:19 +#: templates/form.php:57 templates/userinfo.php:25 msgid "Cognome" msgstr "Surname" -#: templates/form.php:61 templates/userinfo.php:31 +#: templates/form.php:64 templates/userinfo.php:37 msgid "Anno" msgstr "Year" -#: templates/form.php:65 +#: templates/form.php:68 msgid "1º Triennale" msgstr "1st Bachelor's degree" -#: templates/form.php:66 +#: templates/form.php:69 msgid "2º Triennale" msgstr "2nd Bachelor's degree" -#: templates/form.php:67 +#: templates/form.php:70 msgid "3º Triennale" msgstr "3rd Bachelor's degree" -#: templates/form.php:68 +#: templates/form.php:71 msgid "1º Magistrale" msgstr "1st Master's degree" -#: templates/form.php:69 +#: templates/form.php:72 msgid "2º Magistrale" msgstr "2nd Master's degree" -#: templates/form.php:70 templates/form.php:161 +#: templates/form.php:73 templates/form.php:164 msgid "Dottorato" msgstr "PhD" -#: templates/form.php:73 templates/userinfo.php:26 +#: templates/form.php:76 templates/userinfo.php:32 msgid "Corso di laurea" msgstr "Academic Program" -#: templates/form.php:77 templates/form.php:109 +#: templates/form.php:80 templates/form.php:112 msgid "Ingegneria" msgstr "Engineering" -#: templates/form.php:102 templates/form.php:141 +#: templates/form.php:105 templates/form.php:144 msgid "Design" msgstr "Design" -#: templates/form.php:105 templates/form.php:144 +#: templates/form.php:108 templates/form.php:147 msgid "Architettura e pianificazione urbanistica" msgstr "Architecture and urban planning" -#: templates/form.php:188 templates/userinfo.php:38 +#: templates/form.php:191 templates/userinfo.php:44 msgid "Matricola" msgstr "Matricola" -#: templates/form.php:205 +#: templates/form.php:208 msgid "" "Al momento alcune aree del team sono al completo, è possibile candidarsi " "solo nelle aree selezionabili dall'elenco. In futuro le aree disponibili " @@ -564,11 +585,11 @@ msgstr "" "only for areas that can be selected in the list. Available areas might " "change without notice." -#: templates/form.php:209 templates/userinfo.php:50 +#: templates/form.php:212 templates/userinfo.php:56 msgid "Lettera motivazionale" msgstr "Motivational letter" -#: templates/form.php:212 +#: templates/form.php:215 msgid "" "Seleziona l'area del team che più ti interessa e qui compariranno delle " "linee guida su cosa scrivere." @@ -576,543 +597,27 @@ msgstr "" "Select the area of the team that you like and you'll see some guidelines for " "the letter here." -#: templates/form.php:215 -msgid "" -"Descrivi qualsiasi tua esperienza di riparazione di computer (fissi o " -"portatili), o assemblaggio, o saldatura di componenti elettronici." -msgstr "" -"Describe anything about your experience in computer repairs (desktop or " -"laptops), or building computers, or soldering of electronic components." - -#: templates/form.php:216 -msgid "" -"Se non sai qualcosa, cosa fai per imparare in autonomia? Puoi anche fornire " -"degli esempi." -msgstr "" -"If you don't know something, what do you do to learn it yourself, usually? " -"You can give us some examples as well." - -#: templates/form.php:217 templates/form.php:243 templates/form.php:253 -#: templates/form.php:261 templates/form.php:269 templates/form.php:285 -msgid "" -"Se hai mai usato Linux, parlane liberamente: su tutti i computer che " -"ripariamo installiamo Linux." -msgstr "" -"If you ever used Linux, feel free to talk about it: we install Linux on " -"every computer that we repair." - -#: templates/form.php:218 -msgid "" -"Menziona anche quanto tempo potresti dedicare alle attività in team e se fai " -"altro di interessante nel tempo libero oltre a riparare computer." -msgstr "" -"Mention how much time you have for team activities, too, and if you have any " -"other hobby or interests other than repairing computers." - -#: templates/form.php:219 templates/form.php:227 templates/form.php:236 -#: templates/form.php:245 templates/form.php:255 templates/form.php:263 -#: templates/form.php:271 templates/form.php:279 templates/form.php:305 -#: templates/form.php:320 -msgid "" -"Queste sono solo linee guida, scrivi tutto ciò che ti " -"sembra rilevante dire." -msgstr "" -"These are just guidelines, write anything that you consider " -"relevant." - -#: templates/form.php:222 -msgid "" -"Uno degli obiettivi del team è la progettazione di strumenti elettronici per " -"la diagnostica a basso livello e il riuso dell'hardware recuperato." -msgstr "" -"One of the goals of the team is to develop electronic tools for low-level " -"hardware diagnostics and the reuse of recovered hardware." - -#: templates/form.php:223 -msgid "" -"Qual è il tuo rapporto con il mondo dell'elettronica? Ti interessa di più " -"l'elettronica digitale o analogica (specialmente di potenza) o ti " -"interessano entrambe?" -msgstr "" -"What's your relationship with electronics? Are you more interested in " -"digital or analog (especially power) electronics do you like both equally?" - -#: templates/form.php:224 -msgid "" -"Se hai mai realizzato qualche circuito o progetto oltre a quelli nei " -"laboratori didattici, parlane con riferimento anche al metodo con cui è " -"stato realizzato (breadboard, millefori, circuito stampato, componenti " -"through-hole o SMD, etc...)." -msgstr "" -"If you ever made any electronic circuit or project other than those for " -"academic courses, tell us. Explain also the method you've used to build them " -"(breadboard, prototype board, PCB, through-hole components or SMD, etc...)" - -#: templates/form.php:225 -msgid "" -"Indica anche se hai dimestichezza con qualche software di Electronic Design " -"Automation (progettazione, simulazione, test e verifica, etc...)." -msgstr "" -"Tell us if you have experience with any Electronic Design Automation " -"software (project, simulation, test and verification, etc...)." - -#: templates/form.php:226 -msgid "" -"Menziona anche quanto tempo potresti dedicare al team e se fai qualcos'altro " -"di interessante nel tempo libero oltre a progettare circuiti." -msgstr "" -"Mention how much time you have for team activities, too, and if you have any " -"other hobby or interests other than designing circuits." - -#: templates/form.php:230 -msgid "" -"Il compito dei sysadmin è assicurarsi che gli strumenti informatici a cui il " -"team si appoggia per le sue operazioni siano al massimo della loro " -"efficienza." -msgstr "" -"Our sysadmins ensure that IT tools - which are essential for the team - are " -"operating at peak efficiency." - -#: templates/form.php:231 -msgid "" -"Per fare questo gestiscono i server che ospitano i nostri servizi, " -"collaborano con gli sviluppatori per deployare e aggiornare i software che " -"creiamo, monitorano lo stato di salute della nostra infrastruttura e si " -"assicurano che i nostri dati siano protetti da attacchi e perdite" -msgstr "" -"To do this, they manage our servers, collaborate with developers to deploy " -"and update the software we made, monitor the health of our infrastructure " -"and ensure that our data is safe from attacks and other disasters" - -#: templates/form.php:232 -msgid "" -"I sysadmin seguono l'intero ciclo di vita dei servizi, dalla configurazione " -"del server tramite Ansible, passando per la containerizzazione e gestione " -"dei servizi, alle normali procedure di manutenzione." -msgstr "" -"Sysadmins oversee the entire service life cycle, from server configuration " -"through Ansible, to containerization and service management, to routine " -"maintenance procedures." - -#: templates/form.php:233 -msgid "" -"Le competenze esercitate sono una generale conoscenza di Ansible e della " -"containerizzazione, familiarità con la gestione e configurazione di software " -"per server comuni come Nginx, PHP e MariaDB/PostgreSQL e maneggevolezza con " -"il terminale Linux." -msgstr "" -"The competences you will use are general knowledge of Ansible and containes, " -"familiarity with managing and configuring common server software like Nginx, " -"PHP and MariaDB/PostgreSQL, and familiarity with the Linux terminal." - -#: templates/form.php:234 -msgid "Se hai esperienza con alcune di queste cose, parlane liberamente." -msgstr "" -"If you have any experience with this stuff, it's time to talk about it." - -#: templates/form.php:235 -msgid "" -"Menziona anche quanto tempo potresti dedicare alle attività in team e se fai " -"altro di interessante nel tempo libero oltre ad amministrare server." -msgstr "" -"Mention how much time you have for team activities, too, and if you have any " -"other hobby or interests other than managing servers." - -#: templates/form.php:239 -msgid "" -"Descrivi qualsiasi tua esperienza nel programmare in Python, e se hai un " -"account su Github non esitare a condividerlo nella tua lettera!" -msgstr "" -"Describe any prior experience you have in coding in Python, and don't " -"hesitate sharing your Github account in your letter if you have one!" - -#: templates/form.php:240 -msgid "" -"Molti degli strumenti interni del team sono stati creati con python, per " -"esempio la Peracotta ed il Pesto. Se conosci come lavorare con qt ed " -"interagire con API, sei la persona che stiamo cercando!" -msgstr "" -"Many of the team's internal toold have been created with python, for example " -"Peracotta ed il Pesto. If you know how to work with Qt and how " -"to integrate with APIs, you are the member we are looking for!" - -#: templates/form.php:241 -msgid "" -"Potresti menzionare se hai mai usato virtual environments, collaborato con " -"qualcuno su un progetto software, o se sai scrivere in altri linguaggi che " -"usiamo nel team, come JavaScript, PHP e Bash o altri ancora." -msgstr "" -"You could mention if you have ever used virtual environments, collaborated " -"with someone else on a software project, or if you can code in other " -"programming languages." - -#: templates/form.php:242 templates/form.php:260 templates/form.php:268 -msgid "" -"Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire " -"tutorial su internet, iniziare a scrivere codice e cercare man mano su Stack " -"Overflow, etc...)?" -msgstr "" -"Besides attending lectures, what do you do to learn? E.g. watching or " -"reading tutorials online, starting to write code and looking things up on " -"Stack Overflow as you go, etc..." - -#: templates/form.php:244 templates/form.php:254 templates/form.php:262 -#: templates/form.php:270 -msgid "" -"Menziona anche quanto tempo potresti dedicare alle attività in team e se fai " -"altro di interessante nel tempo libero oltre a digitare codice." -msgstr "" -"Mention how much time you have for team activities, too, and if you have any " -"other hobby or interests other than typing code." - -#: templates/form.php:248 -msgid "" -"I principali progetti PHP del team sono Tarallo, WEEEHire e crauto, puoi darci già " -"un'occhiata per sapere a cosa vai incontro." -msgstr "" -"Our main PHP projects are Tarallo, WEEEHire and crauto, you can have a look so " -"you know what you're going to work on." - -#: templates/form.php:249 -#, fuzzy -msgid "" -"Descrivi qualsiasi tua esperienza nel programmare in PHP, e se hai un " -"account su Github non esitare a condividerlo nella tua lettera!" -msgstr "" -"Describe any prior experience you have in coding in Python, and don't " -"hesitate sharing your Github account in your letter if you have one!" - -#: templates/form.php:250 -#, fuzzy -msgid "" -"Va bene anche \"per l'esame di ... ho creato un programma che fa ...\" o " -"\"ho fatto il sito web per la panetteria all'angolo\"." -msgstr "" -"Tell us about your experience developing software in PHP or for the web in " -"general. It's also fine to say \"for the ... exam I've created a program " -"that does ...\" or \"I've made a website for the bakery near my house\"." - -#: templates/form.php:251 -msgid "" -"Se conosci anche altri linguaggi non esitare a condividere la tua esperienza." -msgstr "If you also know other languages don't hesitate to tell us about it." - -#: templates/form.php:252 -msgid "" -"Puoi anche menzionare se conosci altri linguaggi di programmazione o hai mai " -"partecipato ad altri progetti collaborativi." -msgstr "" -"You can also mention whether you know other programming languages or have " -"ever participated to other collaborative projects." - -#: templates/form.php:258 -msgid "" -"Da un paio d'anni abbiamo iniziato a migrare alcuni dei nostri progetti a " -"Node.js. Cerchiamo persone capaci di lavorare con express, MySQL e creare " -"API." -msgstr "" -"Since a couple of years, we've started to migrate some of our projects to " -"Node.js. We are looking for people capable of working with express, MySQL " -"and create APIs." - -#: templates/form.php:259 -#, fuzzy -msgid "" -"Parla di qualsiasi tua esperienza riguardante l'utilizzo di JavaScript " -"(backend, app NodeJS, e frontend, sia vanilla JS, sia framework, in " -"particolare Vue.js). Conosci altri linguaggi che usiamo in team, come " -"Python, PHP e Bash, o altri ancora? Menzionali pure! E se hai un account su " -"Github non esitare a condividerlo nella tua lettera!" -msgstr "" -"Talk about any of your experiences using JavaScript (frontend - especially " -"ReactJS and Angular -, backend, NodeJS app) or Docker. Do you know any other " -"languages we use in our team, such as Python, PHP and Bash, or even more? " -"Mention them here! And if you have a GitHub account don’t hesitate sharing " -"it in your letter!" - -#: templates/form.php:266 -msgid "" -"Da un paio d'anni abbiamo iniziato a migrare alcuni dei nostri progetti a " -"Vue.js. Cerchiamo persone capaci di creare SPA e PWA con Vue.js integrate " -"con servizi backend." -msgstr "" -"Since a couple of years, we've started to migrate some of out projects to " -"Vue.js. We are looking for people capable of creating SPAs and PWAs with Vue." -"js integrated with backend services." - -#: templates/form.php:267 -#, fuzzy -msgid "" -"Parla di qualsiasi tua esperienza riguardante l'utilizzo di JavaScript " -"(frontend, vanilla JS, Vue.js or any other framework, e backend, NodeJS). " -"Conosci altri linguaggi che usiamo in team, come Python, PHP e Bash, o altri " -"ancora? Menzionali pure! E se hai un account su Github non esitare a " -"condividerlo nella tua lettera!" -msgstr "" -"Talk about any of your experiences using JavaScript (frontend - especially " -"ReactJS and Angular -, backend, NodeJS app) or Docker. Do you know any other " -"languages we use in our team, such as Python, PHP and Bash, or even more? " -"Mention them here! And if you have a GitHub account don’t hesitate sharing " -"it in your letter!" - -#: templates/form.php:274 -msgid "" -"Non tutti i computer che ci arrivano sono riparabili, ma vorremmo comunque " -"minimizzare la quantità di materiale che finisce nel bidone." -msgstr "" -"Not all the computers that we get are repairable, but we'd still like to " -"minimize the quantity of stuff that goes into the trash can." - -#: templates/form.php:275 -msgid "" -"Se hai manualità e/o esperienze nel riuso creativo e/o making è il momento " -"di dirlo." -msgstr "" -"If you have any DIY skills and/or experiences in creative reuse and/or " -"\"making\" this is the moment to tell us." - -#: templates/form.php:276 -msgid "" -"Puoi anche aggiungere se hai idee su come potremmo riutilizzare case " -"vuoti, schede madri dall'estetica peculiare o i piatti a specchio di hard " -"disk rotti." -msgstr "" -"You can also add some ideas (if you have any) on how we could reuse empty " -"cases, particularly beautiful motherboards or shiny plates from broken hard " -"disk drives." - -#: templates/form.php:277 -msgid "Accenna anche a che metodo seguiresti per progettare queste cose." -msgstr "Point out which method you'd follow to develop these projects, too." - -#: templates/form.php:278 templates/form.php:319 -msgid "" -"Menziona anche quanto tempo potresti dedicare alle attività in team e se fai " -"altro di interessante nel tempo libero." -msgstr "" -"Mention how much time you have for team activities, too, and if you have any " -"other hobby or interests." - -#: templates/form.php:282 -msgid "" -"Dal 2021-2022, grazie all'esperienza acquisita da alcuni membri del team in " -"materia, e al lancio del nostro progetto di software per studenti, cerchiamo " -"una figura che possa occuparsi della creazione di alcuni modelli volti a " -"migliorare l'esperienza utente delle piattaforme web che abbiamo intenzione " -"di sviluppare, in particolare nell'ambito del Natural Language Processing." -msgstr "" -"From 2021-2022, thanks to the experience gained by some team members on the " -"subject, and the launch of our project of software for students, we are " -"looking for a figure who can take care of the creation of some models aimed " -"at improving the user experience of the web platforms we intend to develop, " -"in particular in the field of Natural Language Processing." - -#: templates/form.php:283 -msgid "" -"Se hai delle conoscenze riguardo a qualcuno tra Python, PyTorch, Tensorflow, " -"Keras, Jupyter Notebook e GitHub, stiamo cercando proprio te!" -msgstr "" -"If you know any of Python, PyTorch, Tensorflow, Keras, Jupyter Notebook and " -"GitHub, we are looking for you!" - -#: templates/form.php:284 -msgid "" -"Se in più sai ricercare paper scientifici su nuove tecnologie su ArXiv o " -"simili, o hai intenzione di imparare a farlo, fantastico!" -msgstr "" -"If you can also research scientific papers on new technologies on ArXiv or " -"similar platforms, or you want to learn how to do it, great!" - -#: templates/form.php:286 -msgid "" -"Menziona anche quanto tempo potresti dedicare alle attività in team e se fai " -"altro di interessante nel tempo libero oltre a progettare intelligenze " -"artificiali." -msgstr "" -"Mention how much time you have for team activities, too, and if you have any " -"other hobby or interests besides designing AIs." - -#: templates/form.php:287 -msgid "" -"Queste sono solo linee guida, scrivi tutto ciò che ti " -"sembra rilevante dire, e se hai già lavorato su qualche progetto non esitare " -"a condividerne il link nella tua lettera!." -msgstr "" -"These are just guidelines, write anything that you consider " -"relevant, and if you have already worked on some project do not hesitate to " -"share the link in your letter!" - -#: templates/form.php:290 -msgid "" -"Hai buone capacità di comunicazione e organizzazione, ti piace il nostro " -"team e vuoi aiutarci a migliorare la nostra immagine? Questo è il posto che " -"fa per te!" -msgstr "" -"Do you have good communication and organizational skills, you like our team " -"and you want to help us improve our public image? This is the right place!" - -#: templates/form.php:291 -msgid "Cerchiamo qualcuno che possa svolgere le seguenti mansioni:" -msgstr "We are looking for someone to perform the following tasks:" - -#: templates/form.php:293 -msgid "Scrittura e pubblicazione di post e storie per i nostri social" -msgstr "Write and publish posts/stories for our social media" - -#: templates/form.php:294 -msgid "Programmazione temporale dei contenuti" -msgstr "Organize temporal scheduling of contents" - -#: templates/form.php:295 -msgid "Definizione della strategia di comunicazione in generale" -msgstr "Define the communication strategy in general" - -#: templates/form.php:296 -msgid "Brainstorming di idee per podcast e video tematici" -msgstr "Come up with new ideas for podcasts and videos" - -#: templates/form.php:297 -msgid "Intrattenimento di rapporti con terzi, altre associazioni e ospiti" -msgstr "Maintain relations with third parties, other associations and guests" - -#: templates/form.php:299 -msgid "" -"Ti troverai a lavorare in sinergia con i creatori di contenuti digitali, che " -"si occuperanno di produrre materiale grafico e video (o potrai occupartene " -"tu stesso se ti va e ne sei capace)." -msgstr "" -"You will work together with digital content creators, who will provide " -"graphic and video resources (or you can make them yourself, if you have the " -"skills)." - -#: templates/form.php:300 -msgid "Ora parlaci di te." -msgstr "Now tell us about yourself." - -#: templates/form.php:301 -msgid "" -"Descrivi qualsiasi tua esperienza nel gestire pagine o profili (e.g. " -"personali, di attività commerciali, di meme nonsense, etc...) sui " -"social network, in particolare Facebook e Instagram." -msgstr "" -"Describe any experience you have in managing pages or profiles (e.g. " -"personal, business, of random memes, etc...) on social networks, in " -"particular Facebook and Instagram." - -#: templates/form.php:302 -msgid "" -"Menziona anche i risultati raggiunti con tali attività promozionali, se " -"possibile." -msgstr "" -"Mention also the results you achieved with such promotional activities, if " -"you can." - -#: templates/form.php:303 -msgid "Se dovessi spiegare in due righe cosa fa il team, cosa diresti?" -msgstr "" -"If you had to explain in a few lines what does the team do, what would you " -"write?" - -#: templates/form.php:304 -msgid "" -"Indica anche quanto tempo potresti dedicare a queste attività e se hai " -"qualche altro interesse." -msgstr "" -"Mention how much time you have for team activities, too, and if you have any " -"other hobby or interests." - -#: templates/form.php:308 -msgid "" -"Sprigiona la tua vena creativa entrando nel nostro team! Abbiamo bisogno di " -"figure che si occupino di realizzare:" -msgstr "" -"Unleash your inner creativity by joining our team! We are looking for people " -"that will produce:" - -#: templates/form.php:310 -msgid "Design di manifesti, infografiche, biglietti da visita" -msgstr "Designs for posters, infographics, business cards" - -#: templates/form.php:311 -msgid "Elementi grafici per pagine web e social network" -msgstr "Graphic elements for web pages and social networks" - -#: templates/form.php:312 -msgid "Sfondi, icone e immagini personalizzate per i nostri software" -msgstr "Backgrounds, icons and custom images for our software" - -#: templates/form.php:313 -msgid "Redesign e modding dei case dei computer riparati" -msgstr "Redesigns and modding of repaired computer cases" - -#: templates/form.php:314 -msgid "Jingle e motivi musicali per i nostri video" -msgstr "Jingles and music for our videos" - -#: templates/form.php:316 -msgid "" -"Se almeno una, o più di una, di queste attività di " -"interessano, questo è il ruolo adatto." -msgstr "" -"If you're interested in at least one, or more than one, of " -"these activities, this is the role for you." - -#: templates/form.php:317 -msgid "" -"Parla di qualsiasi esperienza artistica, inclusi progetti personali (anche " -"piccoli) o esami sostenuti." -msgstr "" -"Tell us about any experience you have with arts, including personal projects " -"(even small ones) or exams." - -#: templates/form.php:318 -msgid "" -"Se vuoi mostrarci alcuni dei tuoi lavori passati, abbozzi, concepts o hai " -"idee su come migliorare il volto del team, non esitare!" -msgstr "" -"If you want to show us some of your past works, sketches, concepts or you " -"have any idea on how to improve the teams public \"face\", do not hesitate " -"and tell us!" - -#: templates/form.php:323 -msgid "Stupiscici." -msgstr "Surprise us." - -#: templates/form.php:331 +#: templates/form.php:228 msgid "" "Una conferma della tua candidatura verrà inviata all'indirizzo ." msgstr "" "A confirmation email will be sent to ." -#: templates/form.php:332 +#: templates/form.php:229 #, php-format msgid "" "Visualizza le Informazioni sul trattamento dei dati " "personali." msgstr "View Privacy Policy." -#: templates/form.php:338 +#: templates/form.php:235 msgid "" "Ho letto le Informazioni sul trattamento dei dati personali e accetto le " "condizioni lì delineate" msgstr "I read the Privacy Policy and accept its conditions" -#: templates/form.php:343 -msgid "Invia" -msgstr "Send" - -#: templates/index.php:7 +#: templates/index.php:9 msgid "" "Compila il questionario per fare richiesta di ammissione in team. Premi il " "bottone qui sotto per iniziare." @@ -1120,62 +625,62 @@ msgstr "" "Fill the application form if you want to join the team. Press the button " "below to start." -#: templates/index.php:41 +#: templates/index.php:43 msgid "Le candidature si chiuderanno tra meno di un'ora, affrettati!" msgstr "Applications will close in less than an hour, hurry up!" -#: templates/index.php:43 +#: templates/index.php:45 msgid "Le candidature si chiuderanno tra 1 ora." msgstr "Applications will close in 1 hour." -#: templates/index.php:45 +#: templates/index.php:47 msgid "Le candidature si chiuderanno tra ${hours} ore." msgstr "Applications will close in ${hours} hours." -#: templates/index.php:49 +#: templates/index.php:51 msgid "Le candidature si chiuderanno tra 1 giorno." msgstr "Applications will close in 1 day." -#: templates/index.php:51 +#: templates/index.php:53 msgid "Le candidature si chiuderanno tra 1 giorno e 1 ora." msgstr "Applications will close in 1 day and 1 hour." -#: templates/index.php:53 +#: templates/index.php:55 msgid "Le candidature si chiuderanno tra 1 giorno e ${hours} ore." msgstr "Applications will close in 1 day and ${hours} hours." -#: templates/index.php:57 +#: templates/index.php:59 msgid "Le candidature si chiuderanno tra ${days} giorni." msgstr "Applications will close in ${days} days." -#: templates/index.php:59 +#: templates/index.php:61 msgid "Le candidature si chiuderanno tra ${days} giorni e 1 ora." msgstr "Applications will close in ${days} days and 1 hour." -#: templates/index.php:61 +#: templates/index.php:63 msgid "Le candidature si chiuderanno tra ${days} giorni e ${hours} ore." msgstr "Applications will close in ${days} days and ${hours} hours." -#: templates/interview.php:10 +#: templates/interview.php:12 #, php-format msgid "%s - Colloquio" msgstr "%s's interview" -#: templates/interview.php:23 +#: templates/interview.php:25 #, php-format msgid "Colloquio superato secondo %s" msgstr "Interview passed according to %s" -#: templates/interview.php:27 +#: templates/interview.php:29 #, php-format msgid "Colloquio fallito secondo %s" msgstr "Interview failed according to %s" -#: templates/interview.php:33 +#: templates/interview.php:35 msgid "Colloquio da fissare" msgstr "Interview to be scheduled" -#: templates/interview.php:38 +#: templates/interview.php:40 #, php-format msgid "" "Colloquio fissato per il %s alle %s con %s. " @@ -1184,112 +689,112 @@ msgstr "" "Interview scheduled for %s at %s with %s. 🗓 Add to calendar." -#: templates/interview.php:79 templates/interviews.php:28 +#: templates/interview.php:81 templates/interviews.php:34 msgid "Ora" msgstr "Time" -#: templates/interview.php:87 +#: templates/interview.php:89 msgid "Fissa colloquio" msgstr "Schedule interview" -#: templates/interview.php:89 +#: templates/interview.php:91 msgid "Annulla colloquio" msgstr "Cancel interview" -#: templates/interview.php:158 +#: templates/interview.php:157 msgid "Commenti vari post-colloquio" msgstr "Comments on the interview" -#: templates/interview.php:163 +#: templates/interview.php:162 msgid "Salva commenti" msgstr "Save comments" -#: templates/interview.php:175 +#: templates/interview.php:174 msgid "Colloquio passato" msgstr "Interview passed" -#: templates/interview.php:177 templates/interviews.php:60 +#: templates/interview.php:176 templates/interviews.php:66 msgid "Colloquio fallito" msgstr "Interview failed" -#: templates/interview.php:192 +#: templates/interview.php:191 msgid "Genera link d'invito" msgstr "Generate an invite link" -#: templates/interviewsbyrecruiter.php:31 +#: templates/interviewsbyrecruiter.php:39 msgid "Mostra vecchi colloqui" msgstr "Show old interviews" -#: templates/interviewsbyrecruiter.php:66 templates/interviews.php:83 +#: templates/interviewsbyrecruiter.php:74 templates/interviews.php:89 #, php-format msgid "Giorno %s (%s)" msgstr "%s (%s)" -#: templates/interviewsbyrecruiter.php:72 +#: templates/interviewsbyrecruiter.php:80 #, php-format msgid "%s (%s)" msgstr "%s (%s)" -#: templates/interviews.php:22 +#: templates/interviews.php:28 msgid "Colloqui fissati" msgstr "Scheduled interviews" -#: templates/interviews.php:29 +#: templates/interviews.php:35 msgid "Tenuto da" msgstr "Done by" -#: templates/interviews.php:56 +#: templates/interviews.php:62 msgid "Colloquio superato, con link d'invito" msgstr "Interview passed, with invite link" -#: templates/interviews.php:56 +#: templates/interviews.php:62 msgid "Colloquio superato" msgstr "Interview passed" -#: templates/interviews.php:102 +#: templates/interviews.php:108 msgid "Colloqui da fissare" msgstr "Interviews to be scheduled" -#: templates/interviews.php:108 +#: templates/interviews.php:114 msgid "Recruiter che ha approvato" msgstr "Recruiter that approved" -#: templates/interviews.php:123 +#: templates/interviews.php:129 #, php-format msgid "%d candidato per il colloquio" msgid_plural "%d candidati per i colloqui" msgstr[0] "%d candidate for interview" msgstr[1] "%d candidates for interviews" -#: templates/interviews.php:124 +#: templates/interviews.php:130 #, php-format msgid "%d da fissare" msgid_plural "%d da fissare" msgstr[0] "%d to be scheduled" msgstr[1] "%d to be scheduled" -#: templates/interviews.php:125 +#: templates/interviews.php:131 #, php-format msgid "%d colloquio fissato" msgid_plural "%d colloqui fissati" msgstr[0] "%d interview scheduled" msgstr[1] "%d interviews scheduled" -#: templates/interviews.php:128 +#: templates/interviews.php:134 #, php-format msgid "%d da invitare" msgid_plural "%d da invitare" msgstr[0] "%d to invite" msgstr[1] "%d to invite" -#: templates/interviews.php:129 +#: templates/interviews.php:135 #, php-format msgid "%d invitato" msgid_plural "%d invitati" msgstr[0] "%d invited" msgstr[1] "%d invited" -#: templates/interviews.php:137 +#: templates/interviews.php:146 msgid "Candidati con data esame sicurezza" msgstr "Candidates with safery exam date" @@ -1297,156 +802,140 @@ msgstr "Candidates with safery exam date" msgid "Logout completato" msgstr "Logout done" -#: templates/notes.php:6 +#: templates/notes.php:8 msgid "Testo" msgstr "Text" -#: templates/notes.php:9 +#: templates/notes.php:11 msgid "Autore" msgstr "Author" -#: templates/notes.php:35 +#: templates/notes.php:37 templates/position.php:53 templates/position.php:69 +#: templates/position.php:109 templates/settings.php:72 msgid "Modifica" msgstr "Edit" -#: templates/notes.php:43 +#: templates/notes.php:45 msgid "Nessuna nota" msgstr "No notes" -#: templates/privacy.php:3 -msgid "Informazioni sul trattamento dei dati personali" -msgstr "Privacy Policy" +#: templates/position.php:25 templates/position.php:39 +msgid "Modifica posizione" +msgstr "Edit position" -#: templates/roles.php:6 -msgid "Riparazione hardware" -msgstr "Hardware Repairs" +#: templates/position.php:41 +msgid "Modifica id" +msgstr "Edit id" -#: templates/roles.php:7 -msgid "Elettronica" -msgstr "Electronics" +#: templates/position.php:57 +msgid "Modifica index" +msgstr "Edit index" -#: templates/roles.php:8 -msgid "Sviluppo software Python" -msgstr "Software Development (Python)" +#: templates/position.php:74 +msgid "Modifica nome" +msgstr "Edit name" -#: templates/roles.php:9 -msgid "Sviluppo software PHP" -msgstr "Software Development (PHP)" +#: templates/position.php:89 +msgid "Modifica descrizione" +msgstr "Edit description" -#: templates/roles.php:10 -msgid "Sviluppo software JavaScript" -msgstr "Software Development (JavaScript)" +#: templates/position.php:90 +msgid "Ricorda che puoi usare il Markdown per formattare il testo" +msgstr "Remember that you can use Markdown to format the text" -#: templates/roles.php:11 -#, fuzzy -msgid "Sviluppo software Vue.js" -msgstr "Software Development (PHP)" +#: templates/position.php:95 +msgid "Descrizione" +msgstr "Description" -#: templates/roles.php:12 -msgid "Machine Learning Engineer" -msgstr "Machine Learning Engineer" - -#: templates/roles.php:13 -msgid "Sysadmin" -msgstr "Sysadmin" - -#: templates/roles.php:14 -msgid "Comunicazione e social" -msgstr "Communication and social media" +#: templates/position.php:106 templates/position.php:129 +#: templates/settings.php:57 +msgid "Elimina" +msgstr "Delete" -#: templates/roles.php:15 -msgid "Creazione di contenuti digitali" -msgstr "Digital content creation" +#: templates/position.php:123 +msgid "Sei sicuro di voler eliminare questa posizione?" +msgstr "Are you sure you'd like to delete this position?" -#: templates/roles.php:16 -msgid "Riuso creativo" -msgstr "Creative Reuse" +#: templates/position.php:124 +msgid "Questa azione non può essere annullata." +msgstr "This action cannot be undone." -#: templates/roles.php:17 -msgid "Altro" -msgstr "Other" +#: templates/privacy.php:3 +msgid "Informazioni sul trattamento dei dati personali" +msgstr "Privacy Policy" -#: templates/settings.php:8 templates/settings.php:29 +#: templates/settings.php:18 templates/settings.php:32 msgid "Opzioni WEEEHire" msgstr "WEEEHire options" -#: templates/settings.php:31 +#: templates/settings.php:34 msgid "Modifica scadenza candidature" msgstr "Edit applications expiry time" -#: templates/settings.php:37 +#: templates/settings.php:40 #, php-format msgid "Scadenza Candidature (%s)" msgstr "Applications expiry (%s)" -#: templates/settings.php:38 +#: templates/settings.php:41 msgid "nessuna scadenza" msgstr "no expiry" -#: templates/settings.php:38 +#: templates/settings.php:41 msgid "alle 00:00" msgstr "at 00:00" -#: templates/settings.php:48 templates/settings.php:52 -#: templates/settings.php:93 -msgid "Conferma" -msgstr "Confirm" - -#: templates/settings.php:54 -msgid "Elimina" -msgstr "Delete" - -#: templates/settings.php:60 +#: templates/settings.php:63 msgid "Modifica i ruoli disponibili per i nuovi candidati" msgstr "Edit roles available to new applicants" -#: templates/settings.php:66 -msgid "Ruoli disponibili" -msgstr "Available roles" +#: templates/settings.php:79 +msgid "Salva" +msgstr "Save" -#: templates/settings.php:74 -msgid "Ruoli non disponibili" -msgstr "Unavailable roles" +#: templates/settings.php:83 +msgid "Crea nuova posizione" +msgstr "Create new position" -#: templates/settings.php:85 -msgid "Seleziona i ruoli da rendere disponibili" -msgstr "Select roles that should be available" +#: templates/settings.php:92 +msgid "Nuova posizione" +msgstr "New position" -#: templates/settings.php:94 -msgid "Rendi tutti non disponibili" -msgstr "Make all unavailable" +#: templates/settings.php:111 +msgid "Crea" +msgstr "Create" -#: templates/settings.php:100 +#: templates/settings.php:117 msgid "Invia email a noi quando arriva una nuova candidatura" msgstr "Send an email to us when a new application arrives" -#: templates/settings.php:105 +#: templates/settings.php:122 #, php-format msgid "" "Viene inviata un'email a %s ogni volta che riceviamo una nuova candidatura." msgstr "An email is sent to %s every time we receive a new application." -#: templates/settings.php:107 +#: templates/settings.php:124 msgid "Non riceviamo notifiche per le nuove candidature." msgstr "We do not receive any notifications for new applications." -#: templates/settings.php:114 +#: templates/settings.php:131 msgid "Disattiva email" msgstr "Disable email" -#: templates/settings.php:116 +#: templates/settings.php:133 msgid "Attiva email" msgstr "Enable email" -#: templates/status.php:7 templates/status.php:10 +#: templates/status.php:13 templates/status.php:16 msgid "Stato della richiesta" msgstr "Application status" -#: templates/status.php:12 +#: templates/status.php:18 msgid "Ammesso/a al colloquio" msgstr "Admitted to the interview" -#: templates/status.php:13 +#: templates/status.php:19 #, php-format msgid "" "Ti abbiamo mandato un'email per informarti, ma se non fosse arrivata per " @@ -1457,52 +946,552 @@ msgstr "" "contact %1$s (@%2$s) on Telegram to " "schedule an interview." -#: templates/status.php:15 +#: templates/status.php:21 msgid "Domanda respinta" msgstr "Rejected" -#: templates/status.php:17 +#: templates/status.php:23 msgid "Richiesta sospesa" msgstr "Postponed" -#: templates/status.php:19 +#: templates/status.php:25 msgid "Valutazione in corso" msgstr "Evaluation in progress" -#: templates/status.php:20 +#: templates/status.php:26 msgid "" "Salva questa pagina nei preferiti e torna a controllare lo stato più avanti." msgstr "" "Save this page in your favorites and come back later to check the status." -#: templates/status.php:26 +#: templates/status.php:32 #, php-format msgid "Candidatura inviata il %1$s alle %2$s" msgstr "Form sent on %1$s at %2$s" -#: templates/status.php:31 +#: templates/status.php:37 msgid "Motivazioni:" msgstr "Motivation:" -#: templates/status.php:36 +#: templates/status.php:42 msgid "Elimina candidatura" msgstr "Delete my application" -#: templates/status.php:38 +#: templates/status.php:44 msgid "Scarica tutti i miei dati" msgstr "Download all my data" -#: templates/status.php:41 +#: templates/status.php:47 msgid "Visto come siamo GDPR-compliant?" msgstr "We're very GDPR-compliant, aren't we?" -#: templates/userinfo.php:56 +#: templates/userinfo.php:62 msgid "Aggiorna dati" msgstr "Update info" -#: templates/userinfo.php:61 -msgid "Annulla" -msgstr "Cancel" +#~ msgid "" +#~ "Descrivi qualsiasi tua esperienza di riparazione di computer (fissi o " +#~ "portatili), o assemblaggio, o saldatura di componenti elettronici." +#~ msgstr "" +#~ "Describe anything about your experience in computer repairs (desktop or " +#~ "laptops), or building computers, or soldering of electronic components." + +#~ msgid "" +#~ "Se non sai qualcosa, cosa fai per imparare in autonomia? Puoi anche " +#~ "fornire degli esempi." +#~ msgstr "" +#~ "If you don't know something, what do you do to learn it yourself, " +#~ "usually? You can give us some examples as well." + +#~ msgid "" +#~ "Se hai mai usato Linux, parlane liberamente: su tutti i computer che " +#~ "ripariamo installiamo Linux." +#~ msgstr "" +#~ "If you ever used Linux, feel free to talk about it: we install Linux on " +#~ "every computer that we repair." + +#~ msgid "" +#~ "Menziona anche quanto tempo potresti dedicare alle attività in team e se " +#~ "fai altro di interessante nel tempo libero oltre a riparare computer." +#~ msgstr "" +#~ "Mention how much time you have for team activities, too, and if you have " +#~ "any other hobby or interests other than repairing computers." + +#~ msgid "" +#~ "Queste sono solo linee guida, scrivi tutto ciò che ti " +#~ "sembra rilevante dire." +#~ msgstr "" +#~ "These are just guidelines, write anything that you " +#~ "consider relevant." + +#~ msgid "" +#~ "Uno degli obiettivi del team è la progettazione di strumenti elettronici " +#~ "per la diagnostica a basso livello e il riuso dell'hardware recuperato." +#~ msgstr "" +#~ "One of the goals of the team is to develop electronic tools for low-level " +#~ "hardware diagnostics and the reuse of recovered hardware." + +#~ msgid "" +#~ "Qual è il tuo rapporto con il mondo dell'elettronica? Ti interessa di più " +#~ "l'elettronica digitale o analogica (specialmente di potenza) o ti " +#~ "interessano entrambe?" +#~ msgstr "" +#~ "What's your relationship with electronics? Are you more interested in " +#~ "digital or analog (especially power) electronics do you like both equally?" + +#~ msgid "" +#~ "Se hai mai realizzato qualche circuito o progetto oltre a quelli nei " +#~ "laboratori didattici, parlane con riferimento anche al metodo con cui è " +#~ "stato realizzato (breadboard, millefori, circuito stampato, componenti " +#~ "through-hole o SMD, etc...)." +#~ msgstr "" +#~ "If you ever made any electronic circuit or project other than those for " +#~ "academic courses, tell us. Explain also the method you've used to build " +#~ "them (breadboard, prototype board, PCB, through-hole components or SMD, " +#~ "etc...)" + +#~ msgid "" +#~ "Indica anche se hai dimestichezza con qualche software di Electronic " +#~ "Design Automation (progettazione, simulazione, test e verifica, etc...)." +#~ msgstr "" +#~ "Tell us if you have experience with any Electronic Design Automation " +#~ "software (project, simulation, test and verification, etc...)." + +#~ msgid "" +#~ "Menziona anche quanto tempo potresti dedicare al team e se fai " +#~ "qualcos'altro di interessante nel tempo libero oltre a progettare " +#~ "circuiti." +#~ msgstr "" +#~ "Mention how much time you have for team activities, too, and if you have " +#~ "any other hobby or interests other than designing circuits." + +#~ msgid "" +#~ "Il compito dei sysadmin è assicurarsi che gli strumenti informatici a cui " +#~ "il team si appoggia per le sue operazioni siano al massimo della loro " +#~ "efficienza." +#~ msgstr "" +#~ "Our sysadmins ensure that IT tools - which are essential for the team - " +#~ "are operating at peak efficiency." + +#~ msgid "" +#~ "Per fare questo gestiscono i server che ospitano i nostri servizi, " +#~ "collaborano con gli sviluppatori per deployare e aggiornare i software " +#~ "che creiamo, monitorano lo stato di salute della nostra infrastruttura e " +#~ "si assicurano che i nostri dati siano protetti da attacchi e perdite" +#~ msgstr "" +#~ "To do this, they manage our servers, collaborate with developers to " +#~ "deploy and update the software we made, monitor the health of our " +#~ "infrastructure and ensure that our data is safe from attacks and other " +#~ "disasters" + +#~ msgid "" +#~ "I sysadmin seguono l'intero ciclo di vita dei servizi, dalla " +#~ "configurazione del server tramite Ansible, passando per la " +#~ "containerizzazione e gestione dei servizi, alle normali procedure di " +#~ "manutenzione." +#~ msgstr "" +#~ "Sysadmins oversee the entire service life cycle, from server " +#~ "configuration through Ansible, to containerization and service " +#~ "management, to routine maintenance procedures." + +#~ msgid "" +#~ "Le competenze esercitate sono una generale conoscenza di Ansible e della " +#~ "containerizzazione, familiarità con la gestione e configurazione di " +#~ "software per server comuni come Nginx, PHP e MariaDB/PostgreSQL e " +#~ "maneggevolezza con il terminale Linux." +#~ msgstr "" +#~ "The competences you will use are general knowledge of Ansible and " +#~ "containes, familiarity with managing and configuring common server " +#~ "software like Nginx, PHP and MariaDB/PostgreSQL, and familiarity with the " +#~ "Linux terminal." + +#~ msgid "Se hai esperienza con alcune di queste cose, parlane liberamente." +#~ msgstr "" +#~ "If you have any experience with this stuff, it's time to talk about it." + +#~ msgid "" +#~ "Menziona anche quanto tempo potresti dedicare alle attività in team e se " +#~ "fai altro di interessante nel tempo libero oltre ad amministrare server." +#~ msgstr "" +#~ "Mention how much time you have for team activities, too, and if you have " +#~ "any other hobby or interests other than managing servers." + +#~ msgid "" +#~ "Descrivi qualsiasi tua esperienza nel programmare in Python, e se hai un " +#~ "account su Github non esitare a condividerlo nella tua lettera!" +#~ msgstr "" +#~ "Describe any prior experience you have in coding in Python, and don't " +#~ "hesitate sharing your Github account in your letter if you have one!" + +#~ msgid "" +#~ "Molti degli strumenti interni del team sono stati creati con python, per " +#~ "esempio la Peracotta ed il Pesto. Se conosci come lavorare con qt " +#~ "ed interagire con API, sei la persona che stiamo cercando!" +#~ msgstr "" +#~ "Many of the team's internal toold have been created with python, for " +#~ "example Peracotta ed il Pesto. If you know how to work with Qt " +#~ "and how to integrate with APIs, you are the member we are looking for!" + +#~ msgid "" +#~ "Potresti menzionare se hai mai usato virtual environments, collaborato " +#~ "con qualcuno su un progetto software, o se sai scrivere in altri " +#~ "linguaggi che usiamo nel team, come JavaScript, PHP e Bash o altri ancora." +#~ msgstr "" +#~ "You could mention if you have ever used virtual environments, " +#~ "collaborated with someone else on a software project, or if you can code " +#~ "in other programming languages." + +#~ msgid "" +#~ "Oltre a seguire le lezioni, che metodo usi per imparare (e.g. seguire " +#~ "tutorial su internet, iniziare a scrivere codice e cercare man mano su " +#~ "Stack Overflow, etc...)?" +#~ msgstr "" +#~ "Besides attending lectures, what do you do to learn? E.g. watching or " +#~ "reading tutorials online, starting to write code and looking things up on " +#~ "Stack Overflow as you go, etc..." + +#~ msgid "" +#~ "Menziona anche quanto tempo potresti dedicare alle attività in team e se " +#~ "fai altro di interessante nel tempo libero oltre a digitare codice." +#~ msgstr "" +#~ "Mention how much time you have for team activities, too, and if you have " +#~ "any other hobby or interests other than typing code." + +#~ msgid "" +#~ "I principali progetti PHP del team sono Tarallo, WEEEHire e crauto, puoi darci già un'occhiata per sapere a cosa vai incontro." +#~ msgstr "" +#~ "Our main PHP projects are Tarallo, WEEEHire and crauto, you can have a look so you know what you're going to work on." + +#, fuzzy +#~ msgid "" +#~ "Descrivi qualsiasi tua esperienza nel programmare in PHP, e se hai un " +#~ "account su Github non esitare a condividerlo nella tua lettera!" +#~ msgstr "" +#~ "Describe any prior experience you have in coding in Python, and don't " +#~ "hesitate sharing your Github account in your letter if you have one!" + +#, fuzzy +#~ msgid "" +#~ "Va bene anche \"per l'esame di ... ho creato un programma che fa ...\" o " +#~ "\"ho fatto il sito web per la panetteria all'angolo\"." +#~ msgstr "" +#~ "Tell us about your experience developing software in PHP or for the web " +#~ "in general. It's also fine to say \"for the ... exam I've created a " +#~ "program that does ...\" or \"I've made a website for the bakery near my " +#~ "house\"." + +#~ msgid "" +#~ "Se conosci anche altri linguaggi non esitare a condividere la tua " +#~ "esperienza." +#~ msgstr "" +#~ "If you also know other languages don't hesitate to tell us about it." + +#~ msgid "" +#~ "Puoi anche menzionare se conosci altri linguaggi di programmazione o hai " +#~ "mai partecipato ad altri progetti collaborativi." +#~ msgstr "" +#~ "You can also mention whether you know other programming languages or have " +#~ "ever participated to other collaborative projects." + +#~ msgid "" +#~ "Da un paio d'anni abbiamo iniziato a migrare alcuni dei nostri progetti a " +#~ "Node.js. Cerchiamo persone capaci di lavorare con express, MySQL e creare " +#~ "API." +#~ msgstr "" +#~ "Since a couple of years, we've started to migrate some of our projects to " +#~ "Node.js. We are looking for people capable of working with express, MySQL " +#~ "and create APIs." + +#, fuzzy +#~ msgid "" +#~ "Parla di qualsiasi tua esperienza riguardante l'utilizzo di JavaScript " +#~ "(backend, app NodeJS, e frontend, sia vanilla JS, sia framework, in " +#~ "particolare Vue.js). Conosci altri linguaggi che usiamo in team, come " +#~ "Python, PHP e Bash, o altri ancora? Menzionali pure! E se hai un account " +#~ "su Github non esitare a condividerlo nella tua lettera!" +#~ msgstr "" +#~ "Talk about any of your experiences using JavaScript (frontend - " +#~ "especially ReactJS and Angular -, backend, NodeJS app) or Docker. Do you " +#~ "know any other languages we use in our team, such as Python, PHP and " +#~ "Bash, or even more? Mention them here! And if you have a GitHub account " +#~ "don’t hesitate sharing it in your letter!" + +#~ msgid "" +#~ "Da un paio d'anni abbiamo iniziato a migrare alcuni dei nostri progetti a " +#~ "Vue.js. Cerchiamo persone capaci di creare SPA e PWA con Vue.js integrate " +#~ "con servizi backend." +#~ msgstr "" +#~ "Since a couple of years, we've started to migrate some of out projects to " +#~ "Vue.js. We are looking for people capable of creating SPAs and PWAs with " +#~ "Vue.js integrated with backend services." + +#, fuzzy +#~ msgid "" +#~ "Parla di qualsiasi tua esperienza riguardante l'utilizzo di JavaScript " +#~ "(frontend, vanilla JS, Vue.js or any other framework, e backend, NodeJS). " +#~ "Conosci altri linguaggi che usiamo in team, come Python, PHP e Bash, o " +#~ "altri ancora? Menzionali pure! E se hai un account su Github non esitare " +#~ "a condividerlo nella tua lettera!" +#~ msgstr "" +#~ "Talk about any of your experiences using JavaScript (frontend - " +#~ "especially ReactJS and Angular -, backend, NodeJS app) or Docker. Do you " +#~ "know any other languages we use in our team, such as Python, PHP and " +#~ "Bash, or even more? Mention them here! And if you have a GitHub account " +#~ "don’t hesitate sharing it in your letter!" + +#~ msgid "" +#~ "Non tutti i computer che ci arrivano sono riparabili, ma vorremmo " +#~ "comunque minimizzare la quantità di materiale che finisce nel bidone." +#~ msgstr "" +#~ "Not all the computers that we get are repairable, but we'd still like to " +#~ "minimize the quantity of stuff that goes into the trash can." + +#~ msgid "" +#~ "Se hai manualità e/o esperienze nel riuso creativo e/o making è il " +#~ "momento di dirlo." +#~ msgstr "" +#~ "If you have any DIY skills and/or experiences in creative reuse and/or " +#~ "\"making\" this is the moment to tell us." + +#~ msgid "" +#~ "Puoi anche aggiungere se hai idee su come potremmo riutilizzare case vuoti, schede madri dall'estetica peculiare o i piatti a specchio di " +#~ "hard disk rotti." +#~ msgstr "" +#~ "You can also add some ideas (if you have any) on how we could reuse empty " +#~ "cases, particularly beautiful motherboards or shiny plates from broken " +#~ "hard disk drives." + +#~ msgid "Accenna anche a che metodo seguiresti per progettare queste cose." +#~ msgstr "Point out which method you'd follow to develop these projects, too." + +#~ msgid "" +#~ "Menziona anche quanto tempo potresti dedicare alle attività in team e se " +#~ "fai altro di interessante nel tempo libero." +#~ msgstr "" +#~ "Mention how much time you have for team activities, too, and if you have " +#~ "any other hobby or interests." + +#~ msgid "" +#~ "Dal 2021-2022, grazie all'esperienza acquisita da alcuni membri del team " +#~ "in materia, e al lancio del nostro progetto di software per studenti, " +#~ "cerchiamo una figura che possa occuparsi della creazione di alcuni " +#~ "modelli volti a migliorare l'esperienza utente delle piattaforme web che " +#~ "abbiamo intenzione di sviluppare, in particolare nell'ambito del Natural " +#~ "Language Processing." +#~ msgstr "" +#~ "From 2021-2022, thanks to the experience gained by some team members on " +#~ "the subject, and the launch of our project of software for students, we " +#~ "are looking for a figure who can take care of the creation of some models " +#~ "aimed at improving the user experience of the web platforms we intend to " +#~ "develop, in particular in the field of Natural Language Processing." + +#~ msgid "" +#~ "Se hai delle conoscenze riguardo a qualcuno tra Python, PyTorch, " +#~ "Tensorflow, Keras, Jupyter Notebook e GitHub, stiamo cercando proprio te!" +#~ msgstr "" +#~ "If you know any of Python, PyTorch, Tensorflow, Keras, Jupyter Notebook " +#~ "and GitHub, we are looking for you!" + +#~ msgid "" +#~ "Se in più sai ricercare paper scientifici su nuove tecnologie su ArXiv o " +#~ "simili, o hai intenzione di imparare a farlo, fantastico!" +#~ msgstr "" +#~ "If you can also research scientific papers on new technologies on ArXiv " +#~ "or similar platforms, or you want to learn how to do it, great!" + +#~ msgid "" +#~ "Menziona anche quanto tempo potresti dedicare alle attività in team e se " +#~ "fai altro di interessante nel tempo libero oltre a progettare " +#~ "intelligenze artificiali." +#~ msgstr "" +#~ "Mention how much time you have for team activities, too, and if you have " +#~ "any other hobby or interests besides designing AIs." + +#~ msgid "" +#~ "Queste sono solo linee guida, scrivi tutto ciò che ti " +#~ "sembra rilevante dire, e se hai già lavorato su qualche progetto non " +#~ "esitare a condividerne il link nella tua lettera!." +#~ msgstr "" +#~ "These are just guidelines, write anything that you " +#~ "consider relevant, and if you have already worked on some project do not " +#~ "hesitate to share the link in your letter!" + +#~ msgid "" +#~ "Hai buone capacità di comunicazione e organizzazione, ti piace il nostro " +#~ "team e vuoi aiutarci a migliorare la nostra immagine? Questo è il posto " +#~ "che fa per te!" +#~ msgstr "" +#~ "Do you have good communication and organizational skills, you like our " +#~ "team and you want to help us improve our public image? This is the right " +#~ "place!" + +#~ msgid "Cerchiamo qualcuno che possa svolgere le seguenti mansioni:" +#~ msgstr "We are looking for someone to perform the following tasks:" + +#~ msgid "Scrittura e pubblicazione di post e storie per i nostri social" +#~ msgstr "Write and publish posts/stories for our social media" + +#~ msgid "Programmazione temporale dei contenuti" +#~ msgstr "Organize temporal scheduling of contents" + +#~ msgid "Definizione della strategia di comunicazione in generale" +#~ msgstr "Define the communication strategy in general" + +#~ msgid "Brainstorming di idee per podcast e video tematici" +#~ msgstr "Come up with new ideas for podcasts and videos" + +#~ msgid "Intrattenimento di rapporti con terzi, altre associazioni e ospiti" +#~ msgstr "" +#~ "Maintain relations with third parties, other associations and guests" + +#~ msgid "" +#~ "Ti troverai a lavorare in sinergia con i creatori di contenuti digitali, " +#~ "che si occuperanno di produrre materiale grafico e video (o potrai " +#~ "occupartene tu stesso se ti va e ne sei capace)." +#~ msgstr "" +#~ "You will work together with digital content creators, who will provide " +#~ "graphic and video resources (or you can make them yourself, if you have " +#~ "the skills)." + +#~ msgid "Ora parlaci di te." +#~ msgstr "Now tell us about yourself." + +#~ msgid "" +#~ "Descrivi qualsiasi tua esperienza nel gestire pagine o profili (e.g. " +#~ "personali, di attività commerciali, di meme nonsense, etc...) sui " +#~ "social network, in particolare Facebook e Instagram." +#~ msgstr "" +#~ "Describe any experience you have in managing pages or profiles (e.g. " +#~ "personal, business, of random memes, etc...) on social networks, " +#~ "in particular Facebook and Instagram." + +#~ msgid "" +#~ "Menziona anche i risultati raggiunti con tali attività promozionali, se " +#~ "possibile." +#~ msgstr "" +#~ "Mention also the results you achieved with such promotional activities, " +#~ "if you can." + +#~ msgid "Se dovessi spiegare in due righe cosa fa il team, cosa diresti?" +#~ msgstr "" +#~ "If you had to explain in a few lines what does the team do, what would " +#~ "you write?" + +#~ msgid "" +#~ "Indica anche quanto tempo potresti dedicare a queste attività e se hai " +#~ "qualche altro interesse." +#~ msgstr "" +#~ "Mention how much time you have for team activities, too, and if you have " +#~ "any other hobby or interests." + +#~ msgid "" +#~ "Sprigiona la tua vena creativa entrando nel nostro team! Abbiamo bisogno " +#~ "di figure che si occupino di realizzare:" +#~ msgstr "" +#~ "Unleash your inner creativity by joining our team! We are looking for " +#~ "people that will produce:" + +#~ msgid "Design di manifesti, infografiche, biglietti da visita" +#~ msgstr "Designs for posters, infographics, business cards" + +#~ msgid "Elementi grafici per pagine web e social network" +#~ msgstr "Graphic elements for web pages and social networks" + +#~ msgid "Sfondi, icone e immagini personalizzate per i nostri software" +#~ msgstr "Backgrounds, icons and custom images for our software" + +#~ msgid "Redesign e modding dei case dei computer riparati" +#~ msgstr "Redesigns and modding of repaired computer cases" + +#~ msgid "Jingle e motivi musicali per i nostri video" +#~ msgstr "Jingles and music for our videos" + +#~ msgid "" +#~ "Se almeno una, o più di una, di queste attività di " +#~ "interessano, questo è il ruolo adatto." +#~ msgstr "" +#~ "If you're interested in at least one, or more than one, " +#~ "of these activities, this is the role for you." + +#~ msgid "" +#~ "Parla di qualsiasi esperienza artistica, inclusi progetti personali " +#~ "(anche piccoli) o esami sostenuti." +#~ msgstr "" +#~ "Tell us about any experience you have with arts, including personal " +#~ "projects (even small ones) or exams." + +#~ msgid "" +#~ "Se vuoi mostrarci alcuni dei tuoi lavori passati, abbozzi, concepts o hai " +#~ "idee su come migliorare il volto del team, non esitare!" +#~ msgstr "" +#~ "If you want to show us some of your past works, sketches, concepts or you " +#~ "have any idea on how to improve the teams public \"face\", do not " +#~ "hesitate and tell us!" + +#~ msgid "Stupiscici." +#~ msgstr "Surprise us." + +#~ msgid "Riparazione hardware" +#~ msgstr "Hardware Repairs" + +#~ msgid "Elettronica" +#~ msgstr "Electronics" + +#~ msgid "Sviluppo software Python" +#~ msgstr "Software Development (Python)" + +#~ msgid "Sviluppo software PHP" +#~ msgstr "Software Development (PHP)" + +#~ msgid "Sviluppo software JavaScript" +#~ msgstr "Software Development (JavaScript)" + +#, fuzzy +#~ msgid "Sviluppo software Vue.js" +#~ msgstr "Software Development (PHP)" + +#~ msgid "Machine Learning Engineer" +#~ msgstr "Machine Learning Engineer" + +#~ msgid "Sysadmin" +#~ msgstr "Sysadmin" + +#~ msgid "Comunicazione e social" +#~ msgstr "Communication and social media" + +#~ msgid "Creazione di contenuti digitali" +#~ msgstr "Digital content creation" + +#~ msgid "Riuso creativo" +#~ msgstr "Creative Reuse" + +#~ msgid "Altro" +#~ msgstr "Other" + +#~ msgid "Ruoli disponibili" +#~ msgstr "Available roles" + +#~ msgid "Ruoli non disponibili" +#~ msgstr "Unavailable roles" + +#~ msgid "Seleziona i ruoli da rendere disponibili" +#~ msgstr "Select roles that should be available" + +#~ msgid "Rendi tutti non disponibili" +#~ msgstr "Make all unavailable" #~ msgid "" #~ "Dal 2021-2022 abbiamo lanciato un programma per il miglioramento della " diff --git a/src/Database.php b/src/Database.php index d3de028..bf30405 100644 --- a/src/Database.php +++ b/src/Database.php @@ -22,6 +22,7 @@ public function __construct() /** * ⚠️ THIS METHOD IS UNSAFE, NEVER EXPOSE IT, ONLY FOR DB UPGRADE ⚠️ * Get the SQLite3 object + * * @return SQLite3 */ @@ -91,9 +92,11 @@ public function regenerateToken(int $id): string */ public function getUser(string $id): ?User { - $stmt = $this->db->prepare('SELECT id, name, surname, degreecourse, year, matricola, area, letter, published, status, + $stmt = $this->db->prepare( + 'SELECT id, name, surname, degreecourse, year, matricola, area, letter, published, status, hold, recruiter, recruitertg, submitted, emailed, invitelink, visiblenotes - FROM users WHERE id = :id LIMIT 1'); + FROM users WHERE id = :id LIMIT 1' + ); $stmt->bindValue(':id', $id, SQLITE3_TEXT); $result = $stmt->execute(); if ($result === false) { @@ -107,23 +110,23 @@ public function getUser(string $id): ?User $user = new User(); foreach ( [ - 'id', - 'name', - 'surname', - 'degreecourse', - 'year', - 'matricola', - 'area', - 'letter', - 'published', - 'status', - 'hold', - 'recruiter', - 'recruitertg', - 'submitted', - 'visiblenotes', - 'emailed', - 'invitelink', + 'id', + 'name', + 'surname', + 'degreecourse', + 'year', + 'matricola', + 'area', + 'letter', + 'published', + 'status', + 'hold', + 'recruiter', + 'recruitertg', + 'submitted', + 'visiblenotes', + 'emailed', + 'invitelink', ] as $attr ) { $user->$attr = $row[$attr]; @@ -140,7 +143,8 @@ public function getUser(string $id): ?User public function getPrevAndNextUser(User $user, string $myself): ?User { $id = $user->id; - $stmt = $this->db->prepare('SELECT + $stmt = $this->db->prepare( + 'SELECT ( SELECT MAX(prev_users.id) FROM users as prev_users @@ -173,7 +177,8 @@ public function getPrevAndNextUser(User $user, string $myself): ?User AND next_evaluation.id_evaluator = :self ) ) AS next_not_evaluated_user - FROM users WHERE id = :id LIMIT 1'); + FROM users WHERE id = :id LIMIT 1' + ); $stmt->bindValue(':id', $id, SQLITE3_TEXT); $stmt->bindValue(':self', $myself, SQLITE3_TEXT); $result = $stmt->execute(); @@ -187,10 +192,10 @@ public function getPrevAndNextUser(User $user, string $myself): ?User } foreach ( [ - 'prev_user', - 'next_user', - 'prev_not_evaluated_user', - 'next_not_evaluated_user', + 'prev_user', + 'next_user', + 'prev_not_evaluated_user', + 'next_not_evaluated_user', ] as $attr ) { $user->$attr = $row[$attr]; @@ -244,7 +249,7 @@ public function unsetConfigValue(string $option) * Set a value in the config table * * @param string $option Key for the value - * @param string $value Value to set + * @param string $value Value to set */ public function setConfigValue(string $option, string $value) { @@ -273,12 +278,12 @@ public function getEvaluation(int $userId) $compact = []; while ($row = $result->fetchArray(SQLITE3_ASSOC)) { $compact[] = [ - 'id_evaluation' => $row['id_evaluation'], - 'id_user' => $row['ref_user_id'], - 'id_evaluator' => $row['id_evaluator'], - 'name_evaluator' => $row['desc_evaluator'], - 'date' => $row['date'], - 'vote' => $row['vote'], + 'id_evaluation' => $row['id_evaluation'], + 'id_user' => $row['ref_user_id'], + 'id_evaluator' => $row['id_evaluator'], + 'name_evaluator' => $row['desc_evaluator'], + 'date' => $row['date'], + 'vote' => $row['vote'], ]; } @@ -291,10 +296,10 @@ public function getEvaluation(int $userId) /** * Set evaluation for a candidate, by a recruiter * - * @param int $userId User ID - * @param string $idEvaluator ID of the evaluator/recruiter (LDAP uid attribute) + * @param int $userId User ID + * @param string $idEvaluator ID of the evaluator/recruiter (LDAP uid attribute) * @param string $descEvaluator Evaluator/recruiter description (LDAP cn attribute, aka full name) - * @param int $vote Vote + * @param int $vote Vote */ public function setEvaluation(int $userId, string $idEvaluator, string $descEvaluator, int $vote) { @@ -328,7 +333,7 @@ public function removeEvaluation(int $id) /** * Check that a token is valid * - * @param int $id User ID + * @param int $id User ID * @param string $token Token * * @return bool Valid or not @@ -391,17 +396,17 @@ public function getUsersWithNotesAndEvaluations(string $evaluatorName): array $compact = []; while ($row = $result->fetchArray(SQLITE3_ASSOC)) { $compact[] = [ - 'id' => $row['id'], - 'name' => $row['name'] . ' ' . $row['surname'], - 'area' => $row['area'], - 'recruiter' => $row['recruiter'], - 'hold' => (bool) $row['hold'], - 'published' => (bool) $row['published'], - 'myvote' => $row['myvote'] === null ? null : (int) $row['myvote'], - 'status' => $row['status'] === null ? null : (bool) $row['status'], - 'submitted' => $row['submitted'], - 'evaluation' => $votes[$row['id']] ?? null, - 'has_note' => $row['has_note'], // convert candidate_id to has_note + 'id' => $row['id'], + 'name' => $row['name'] . ' ' . $row['surname'], + 'area' => $row['area'], + 'recruiter' => $row['recruiter'], + 'hold' => (bool) $row['hold'], + 'published' => (bool) $row['published'], + 'myvote' => $row['myvote'] === null ? null : (int) $row['myvote'], + 'status' => $row['status'] === null ? null : (bool) $row['status'], + 'submitted' => $row['submitted'], + 'evaluation' => $votes[$row['id']] ?? null, + 'has_note' => $row['has_note'], // convert candidate_id to has_note ]; } @@ -412,8 +417,8 @@ public function getUsersWithNotesAndEvaluations(string $evaluatorName): array * Save notes. * * @param string $author - * @param int $candidate User ID - * @param string $note Notes + * @param int $candidate User ID + * @param string $note Notes * @param string $type */ public function saveNotes(string $author, int $candidate, string $note) @@ -436,7 +441,7 @@ public function saveNotes(string $author, int $candidate, string $note) /** * Update note. * - * @param int $id User ID + * @param int $id User ID * @param string $note Notes * @param string $type */ @@ -461,8 +466,8 @@ public function updateNote(string $author, int $id, ?string $note) /** * Retrieve notes on a candidate * - * @param int $candidateId - * @param string $type + * @param int $candidateId + * @param string $type * @return array */ public function getNotesByCandidateId(int $candidateId) @@ -486,7 +491,7 @@ public function getNotesByCandidateId(int $candidateId) /** * Save the visible notes. * - * @param int $id User ID + * @param int $id User ID * @param string $notes Notes */ public function saveVisibleNotes(int $id, string $notes) @@ -507,8 +512,8 @@ public function saveVisibleNotes(int $id, string $notes) /** * Set candidate status * - * @param int $id User ID - * @param bool|null $status True for approved, False for rejected, null to unset + * @param int $id User ID + * @param bool|null $status True for approved, False for rejected, null to unset * @param string|null $recruiter Recruiter that made this difficult choice */ public function setStatus(int $id, ?bool $status, ?string $recruiter) @@ -534,7 +539,7 @@ public function setStatus(int $id, ?bool $status, ?string $recruiter) /** * Set the "hold" status of candidates (waiting list) * - * @param int $id User ID + * @param int $id User ID * @param bool $hold True to put on hold, false to not put on hold */ public function setHold(int $id, bool $hold) @@ -551,9 +556,9 @@ public function setHold(int $id, bool $hold) /** * Set if status is published and visible or not * - * @param int $id User ID + * @param int $id User ID * @param bool $published True for published and visible, false for not published (only admins can see it) - * @see setStatus + * @see setStatus */ public function setPublished(int $id, bool $published) { @@ -569,7 +574,7 @@ public function setPublished(int $id, bool $published) /** * Set recruiter for a user * - * @param int $id User ID + * @param int $id User ID * @param string $name Recruiter full name * @param string $tgid Recruiter Telegram nickname */ @@ -588,7 +593,7 @@ public function setRecruiter(int $id, string $name, string $tgid) /** * Set invite link for a candidate. Use after generating such a link. * - * @param int $id User ID + * @param int $id User ID * @param string $invite Invite link */ public function setInviteLink(int $id, string $invite) @@ -605,7 +610,7 @@ public function setInviteLink(int $id, string $invite) /** * Set candidate as "emailed" or not, when approved. * - * @param int $id User ID + * @param int $id User ID * @param bool $emailed The email has been sent or not */ public function setEmailed(int $id, bool $emailed) @@ -648,7 +653,7 @@ public function publishRejected() /** * Delete candidates older than X days, if they are published * - * @param int $days Days + * @param int $days Days * @param bool $deleteHold Also delete candidates put on hold (default false) */ public function deleteOlderThan(int $days, bool $deleteHold = false) @@ -712,10 +717,10 @@ public function getInterview(string $id): ?Interview /** * Set date and time for an interview * - * @param int $id User ID - * @param string|null $recruiter Recruiter full name - * @param string|null $recruitertg Recruiter Telegram nickname - * @param DateTime|null $when When the interview is scheduled + * @param int $id User ID + * @param string|null $recruiter Recruiter full name + * @param string|null $recruitertg Recruiter Telegram nickname + * @param DateTime|null $when When the interview is scheduled */ public function setInterviewSchedule(int $id, ?string $recruiter, ?string $recruitertg, ?DateTime $when) { @@ -737,9 +742,9 @@ public function setInterviewSchedule(int $id, ?string $recruiter, ?string $recru /** * Set data for an interview * - * @param int $id User ID + * @param int $id User ID * @param string|null $questions Questions to ask and notes - * @param string|null $answers Answers given by the candidate and comments + * @param string|null $answers Answers given by the candidate and comments */ public function setInterviewData(int $id, ?string $answers) { @@ -755,7 +760,7 @@ public function setInterviewData(int $id, ?string $answers) /** * Set interview status. Yeah. * - * @param int $id User ID + * @param int $id User ID * @param bool|null $status True for approved, false for rejected, null to unset */ public function setInterviewStatus(int $id, ?bool $status) @@ -821,17 +826,17 @@ public function getAllInterviewsForTable() } $compact[] = [ - 'id' => $row['id'], - 'name' => $row['name'] . ' ' . $row['surname'], - 'area' => $row['area'], - 'interviewer' => $row['interviewer'], - 'hold' => $row['hold'], - 'recruiter' => $row['recruiter'], - 'interviewstatus' => $row['interviewstatus'] === null ? null : (bool) $row['interviewstatus'], - 'answers' => (bool) $row['al'], - 'when' => $when, - 'invite' => (bool) $row['il'], - 'safetyTestDate' => $safetyTestDate + 'id' => $row['id'], + 'name' => $row['name'] . ' ' . $row['surname'], + 'area' => $row['area'], + 'interviewer' => $row['interviewer'], + 'hold' => $row['hold'], + 'recruiter' => $row['recruiter'], + 'interviewstatus' => $row['interviewstatus'] === null ? null : (bool) $row['interviewstatus'], + 'answers' => (bool) $row['al'], + 'when' => $when, + 'invite' => (bool) $row['il'], + 'safetyTestDate' => $safetyTestDate ]; } @@ -856,30 +861,275 @@ public function getAllAssignedInterviewsForTable(): array $compact[$row['interviewer']] = []; } $compact[$row['interviewer']][] = [ - 'id' => $row['id'], - 'name' => $row['name'] . ' ' . $row['surname'], - 'area' => $row['area'], - 'when' => $dt, - 'status' => $row['status'] === null ? null : (bool) $row['status'], + 'id' => $row['id'], + 'name' => $row['name'] . ' ' . $row['surname'], + 'area' => $row['area'], + 'when' => $dt, + 'status' => $row['status'] === null ? null : (bool) $row['status'], ]; } return $compact; } - /** @noinspection PhpDocMissingThrowsInspection */ + /** + * Get all positions + * + * @param string $lang Language (optional), if not set, won't provide name or description + * + * @return array Array of associative arrays with id, availability, printable name and description + */ + public function getPositions($lang = null) + { + if ($lang) { + $stmt = $this->db->prepare( + "SELECT + p.id, + p.idx, + p.available, + t_name.value AS name, + t_desc.value AS description + FROM + positions p + LEFT JOIN + translations t_name ON t_name.id = 'position.' || p.id || '.name' AND t_name.lang = :lang + LEFT JOIN + translations t_desc ON t_desc.id = 'position.' || p.id || '.description' AND t_desc.lang = :lang + ORDER BY + p.idx ASC" + ); + $stmt->bindValue(':lang', $lang, SQLITE3_TEXT); + } else { + $stmt = $this->db->prepare('SELECT id, idx, available FROM positions'); + } + $result = $stmt->execute(); + + $positions = []; + while ($row = $result->fetchArray(SQLITE3_ASSOC)) { + $positions[] = $row; + } + return $positions; + } + + /** + * Get available positions + * + * @param string $lang Language (optional), if not set, won't provide name or description + * + * @return array Array of associative arrays with id, availability, printable name and description + */ + public function getAvailablePositions($lang = null) + { + if ($lang) { + $stmt = $this->db->prepare( + "SELECT + p.id, + p.idx, + p.available, + t_name.value AS name, + t_desc.value AS description + FROM + positions p + LEFT JOIN + translations t_name ON t_name.id = 'position.' || p.id || '.name' AND t_name.lang = :lang + LEFT JOIN + translations t_desc ON t_desc.id = 'position.' || p.id || '.description' AND t_desc.lang = :lang + WHERE + p.available = 1 + ORDER BY + p.idx ASC" + ); + $stmt->bindValue(':lang', $lang, SQLITE3_TEXT); + } else { + $stmt = $this->db->prepare('SELECT id, idx, available FROM positions'); + } + $result = $stmt->execute(); + + $positions = []; + while ($row = $result->fetchArray(SQLITE3_ASSOC)) { + $positions[] = $row; + } + return $positions; + } + + /** + * Get a single position + * + * @param int $id Position ID + * @param string $lang Language (optional), if not set, won't provide name or description + * + * @return array Associative array with id, availability, printable name and description + */ + public function getPosition($id, $lang = null) + { + if ($lang) { + $stmt = $this->db->prepare( + "SELECT + p.id, + p.idx, + p.available, + t_name.value AS name, + t_desc.value AS description + FROM + positions p + LEFT JOIN + translations t_name ON t_name.id = 'position.' || p.id || '.name' AND t_name.lang = :lang + LEFT JOIN + translations t_desc ON t_desc.id = 'position.' || p.id || '.description' AND t_desc.lang = :lang + WHERE + p.id = :id" + ); + $stmt->bindValue(':lang', $lang, SQLITE3_TEXT); + } else { + $stmt = $this->db->prepare('SELECT id, idx, available FROM positions WHERE id = :id'); + } + $stmt->bindValue(':id', $id, SQLITE3_TEXT); + $result = $stmt->execute(); + + return $result->fetchArray(SQLITE3_ASSOC); + } + + /** + * Add a new position + * + * @param string $id Position ID + * @param int $available Availability + */ + public function setPositionAvailability($id, $available) + { + $stmt = $this->db->prepare('UPDATE positions SET available=:available WHERE id=:id'); + $stmt->bindValue(':id', $id, SQLITE3_TEXT); + $stmt->bindValue(':available', $available, SQLITE3_INTEGER); + $result = $stmt->execute(); + if ($result === false) { + throw new DatabaseException(); + } + } + + /** + * Add a new position + * + * @param string $id Position ID + * + * @throws DatabaseException + */ + public function addPosition($id) + { + $stmt = $this->db->prepare('INSERT INTO positions (id, available, idx) VALUES (:id, 0, (SELECT MAX(idx) + 1 FROM positions))'); + $stmt->bindValue(':id', $id, SQLITE3_TEXT); + $result = $stmt->execute(); + if ($result === false) { + throw new DatabaseException(); + } + } + + /** + * Update a position id + * + * @param string $oldId Old position ID + * @param string $newId New position ID + */ + public function updatePositionId($oldId, $newId) + { + $stmt = $this->db->prepare('UPDATE positions SET id=:newId WHERE id=:oldId'); + $stmt->bindValue(':oldId', $oldId, SQLITE3_TEXT); + $stmt->bindValue(':newId', $newId, SQLITE3_TEXT); + $result = $stmt->execute(); + if ($result === false) { + throw new DatabaseException(); + } + } + + /** + * Update a position index + * + * @param string $id Position ID + * @param int $index Position index + */ + public function updatePositionIndex($id, $index) + { + $stmt = $this->db->prepare('UPDATE positions SET idx=:index WHERE id=:id'); + $stmt->bindValue(':id', $id, SQLITE3_TEXT); + $stmt->bindValue(':index', $index, SQLITE3_INTEGER); + $result = $stmt->execute(); + if ($result === false) { + throw new DatabaseException(); + } + } + + /** + * Delete a positionù + * + * @param int $id Position ID + */ + public function deletePosition($id) + { + $stmt = $this->db->prepare('DELETE FROM positions WHERE id = :id'); + $stmt->bindValue(':id', $id, SQLITE3_TEXT); + $result = $stmt->execute(); + if ($result === false) { + throw new DatabaseException(); + } + } + + /** + * Get a translation + * + * @param string $id Translation ID + * @param string $lang Language + * + * @return array Associative array with value + */ + public function getTranslation($id, $lang) + { + $stmt = $this->db->prepare('SELECT value FROM translations WHERE id = :id AND lang = :lang'); + $stmt->bindValue(':id', $id, SQLITE3_TEXT); + $stmt->bindValue(':lang', $lang, SQLITE3_TEXT); + $result = $stmt->execute(); + + return $result->fetchArray(SQLITE3_ASSOC); + } + + /** + * Update a translation + * + * @param string $id Translation ID + * @param string $lang Language + * @param string $value Translation value + * + * @throws DatabaseException + * + * @return void + */ + public function updateTranslation($id, $lang, $value) + { + $stmt = $this->db->prepare('INSERT OR REPLACE INTO translations (id, lang, value) VALUES (:id, :lang, :value)'); + $stmt->bindValue(':id', $id, SQLITE3_TEXT); + $stmt->bindValue(':lang', $lang, SQLITE3_TEXT); + $stmt->bindValue(':value', $value, SQLITE3_TEXT); + $result = $stmt->execute(); + if ($result === false) { + throw new DatabaseException(); + } + } + + /** + * @noinspection PhpDocMissingThrowsInspection + */ /** * Convert timestamp to a DateTime * - * @param int $timestamp Unix Timestamp - * @param DateTimeZone|null $dtz Timezone, null for default + * @param int $timestamp Unix Timestamp + * @param DateTimeZone|null $dtz Timezone, null for default * * @return DateTime */ private function timestampToTime(int $timestamp, ?DateTimeZone $dtz = null): DateTime { $dtz = $dtz ?? new DateTimeZone('Europe/Rome'); - /** @noinspection PhpUnhandledExceptionInspection */ + /** + * @noinspection PhpUnhandledExceptionInspection +*/ $dt = new DateTime('now', $dtz); $dt->setTimestamp($timestamp); @@ -904,7 +1154,7 @@ private function getAllEvaluationsAverage() } /** - * @param User|null $user + * @param User|null $user * @param \SQLite3Stmt $stmt */ private function bindUserParameters(?User $user, \SQLite3Stmt $stmt): void diff --git a/src/Email.php b/src/Email.php index e645bd9..2811929 100644 --- a/src/Email.php +++ b/src/Email.php @@ -11,9 +11,9 @@ class Email * Send an email from noreply@join.weeeopen.it * If TEST_MODE is enabled, no email is sent and this method prints the contents on the console instead. * - * @param string $to Address + * @param string $to Address * @param string $subject Subject line - * @param string $body Email body, plain text only + * @param string $body Email body, plain text only */ public static function sendMail(string $to, string $subject, string $body) { diff --git a/src/Interview.php b/src/Interview.php index c122556..a5fa4ad 100644 --- a/src/Interview.php +++ b/src/Interview.php @@ -5,7 +5,9 @@ class Interview { public $id; - /** @noinspection PhpFullyQualifiedNameUsageInspection */ + /** + * @noinspection PhpFullyQualifiedNameUsageInspection + */ /** * @var $when \DateTime|null Date of the interview */ diff --git a/src/Ldap.php b/src/Ldap.php index 82a3c65..5290965 100644 --- a/src/Ldap.php +++ b/src/Ldap.php @@ -46,17 +46,21 @@ public function getRecruiters(): array error_log('Test mode enabled, returning sample data'); return [ - ['Alice', 'ali'], - ['Bob', 'b0b'], - ['Mario Rossi', 'test'], + ['Alice', 'ali'], + ['Bob', 'b0b'], + ['Mario Rossi', 'test'], ]; } if ($this->apcu) { $cached = false; - /** @noinspection PhpComposerExtensionStubsInspection */ + /** + * @noinspection PhpComposerExtensionStubsInspection +*/ $recruiters = apcu_fetch('recruiters', $cached); - /** @noinspection PhpComposerExtensionStubsInspection */ + /** + * @noinspection PhpComposerExtensionStubsInspection +*/ if ($cached) { return $recruiters; } @@ -89,7 +93,9 @@ public function getRecruiters(): array } ksort($recruiters, SORT_STRING | SORT_FLAG_CASE); if ($this->apcu) { - /** @noinspection PhpComposerExtensionStubsInspection */ + /** + * @noinspection PhpComposerExtensionStubsInspection +*/ apcu_store('recruiters', $recruiters, 3600); // 1 hour } @@ -110,20 +116,20 @@ public function createInvite(User $user): string $normalizedSurname = Utils::normalizeCase($user->surname); $add = [ - 'cn' => $normalizedName . ' ' . $normalizedSurname, // Mandatory attribute - 'objectclass' => [ - 'inviteCodeContainer', - 'schacLinkageIdentifiers', - 'schacPersonalCharacteristics', - 'telegramAccount', - 'weeeOpenPerson', - ], - 'givenname' => $normalizedName, - 'sn' => $normalizedSurname, - 'mail' => Utils::politoMail($user->matricola), - 'schacpersonaluniquecode' => $user->matricola, - 'degreecourse' => $user->degreecourse, - 'weeeOpenUniqueId' => $inviteCode, + 'cn' => $normalizedName . ' ' . $normalizedSurname, // Mandatory attribute + 'objectclass' => [ + 'inviteCodeContainer', + 'schacLinkageIdentifiers', + 'schacPersonalCharacteristics', + 'telegramAccount', + 'weeeOpenPerson', + ], + 'givenname' => $normalizedName, + 'sn' => $normalizedSurname, + 'mail' => Utils::politoMail($user->matricola), + 'schacpersonaluniquecode' => $user->matricola, + 'degreecourse' => $user->degreecourse, + 'weeeOpenUniqueId' => $inviteCode, ]; if (TEST_MODE) { diff --git a/src/PageCandidates.php b/src/PageCandidates.php index 2484fa1..b472587 100644 --- a/src/PageCandidates.php +++ b/src/PageCandidates.php @@ -36,7 +36,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $user = $db->getUser($id); if ($user === null) { - return new HtmlResponse($template->render('error', ['message' => 'Invalid user ID']), 404); + return new HtmlResponse($template->render('error', ['message' => 'Invalid user ID']), 404); } // A form has been submitted @@ -67,9 +67,9 @@ public function handle(ServerRequestInterface $request): ResponseInterface } elseif (isset($POST['resendemail'])) { if ($status === User::STATUS_NEW) { try { - $token = $db->regenerateToken($id); + $token = $db->regenerateToken($id); } catch (DatabaseException $e) { - return new HtmlResponse($template->render('error', ['message' => 'Database error']), 500); + return new HtmlResponse($template->render('error', ['message' => 'Database error']), 500); } catch (\Exception $e) { return new HtmlResponse($template->render('error', ['message' => 'User does not exists']), 404); } @@ -101,7 +101,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $subject = $POST['subject'] ?? ''; $recruiter = $POST['recruiter'] ?? ''; if (strlen($email) <= 0) { - return new HtmlResponse($template->render('error', ['message' => 'Write an email']), 400); + return new HtmlResponse($template->render('error', ['message' => 'Write an email']), 400); } if (strlen($subject) <= 0) { return new HtmlResponse( @@ -168,13 +168,13 @@ public function handle(ServerRequestInterface $request): ResponseInterface $page = $template->render( 'candidate', [ - 'user' => $user, - 'edit' => isset($GET['edit']), // candidates.php?id=123&edit, allows editing of personal data - 'recruiters' => $ldap->getRecruiters(), - 'evaluations' => $db->getEvaluation($id), - 'uid' => $_SESSION['uid'], - 'cn' => $_SESSION['cn'], - 'notes' => $db->getNotesByCandidateId($id) + 'user' => $user, + 'edit' => isset($GET['edit']), // candidates.php?id=123&edit, allows editing of personal data + 'recruiters' => $ldap->getRecruiters(), + 'evaluations' => $db->getEvaluation($id), + 'uid' => $_SESSION['uid'], + 'cn' => $_SESSION['cn'], + 'notes' => $db->getNotesByCandidateId($id) ] ); return new HtmlResponse($page); diff --git a/src/PageForm.php b/src/PageForm.php index 0ed9660..f765fa3 100644 --- a/src/PageForm.php +++ b/src/PageForm.php @@ -18,11 +18,22 @@ public function handle(ServerRequestInterface $request): ResponseInterface $db = new Database(); $expiry = $db->getConfigValue('expiry'); - $rolesAvailable = $db->getConfigValue('rolesAvailable'); - $rolesAvailableCount = $rolesAvailable ? count(explode('|', $rolesAvailable)) : 0; + $positions = $db->getPositions(Template::getLocale() ?? 'en_US'); // [ ['id' => 1, 'name' => 'name', 'description' => 'description', 'available' => 1], ...]] - if ($rolesAvailableCount === 0) { + if (count($positions) === 0) { $expiry = 1; + } else { + // check that there is at least one position available + $isAtLeastOneAvailable = false; + for ($i = 0; $i < count($positions); $i++) { + if ($positions[$i]['available'] == 1) { + $isAtLeastOneAvailable = true; + break; + } + } + if (!$isAtLeastOneAvailable) { + $expiry = 1; + } } // Get from DB -> if "unixtime.now >= expiry date" then candidate_close : else show the form @@ -37,48 +48,57 @@ public function handle(ServerRequestInterface $request): ResponseInterface if ($request->getMethod() === 'POST') { $POST = $request->getParsedBody(); $checkboxes = [ - 'mandatorycheckbox_0', + 'mandatorycheckbox_0', ]; foreach ($checkboxes as $attr) { if (!isset($POST[$attr]) || $POST[$attr] !== 'true') { - return new HtmlResponse($template->render('form', ['error' => 'consent', 'rolesAvailable' => $rolesAvailable]), 400); + return new HtmlResponse($template->render('form', ['error' => 'consent', 'positions' => $positions]), 400); } } $attrs = [ - 'name', - 'surname', - 'degreecourse', - 'year', - 'matricola', - 'area', - 'letter' + 'name', + 'surname', + 'degreecourse', + 'year', + 'matricola', + 'area', + 'letter' ]; $user = new User(); foreach ($attrs as $attr) { if (isset($POST[$attr]) && $POST[$attr] !== '') { + if ($attr === 'area') { + $indexs = array_column($positions, 'id'); + $index = array_search($POST[$attr], $indexs); + if ($index !== false) { + $POST[$attr] = $positions[$index]['name']; + } else { + // You are a special one, aren't you? this was a challange, if you found out that you can submit any value for the area field, you'll get extra points during the interview, use this box to have fun with your position name, eg. "I'm a hacker", "fsociety" + } + } $user->$attr = $POST[$attr]; if (is_string($user->$attr)) { $user->$attr = trim($user->$attr); } } else { - return new HtmlResponse($template->render('form', ['error' => 'form', 'rolesAvailable' => $rolesAvailable]), 400); + return new HtmlResponse($template->render('form', ['error' => 'form', 'positions' => $positions]), 400); } } $user->submitted = time(); $user->matricola = strtolower($user->matricola); if (preg_match('#^[sd]\d+$#', $user->matricola) !== 1) { - return new HtmlResponse($template->render('form', ['error' => 'form', 'rolesAvailable' => $rolesAvailable]), 400); + return new HtmlResponse($template->render('form', ['error' => 'form', 'positions' => $positions]), 400); } try { list($id, $token) = $db->addUser($user); } catch (DuplicateUserException $e) { - return new HtmlResponse($template->render('form', ['error' => 'duplicate', 'rolesAvailable' => $rolesAvailable]), 400); + return new HtmlResponse($template->render('form', ['error' => 'duplicate', 'positions' => $positions]), 400); } catch (DatabaseException $e) { - return new HtmlResponse($template->render('form', ['error' => 'database', 'rolesAvailable' => $rolesAvailable]), 500); + return new HtmlResponse($template->render('form', ['error' => 'database', 'positions' => $positions]), 500); } catch (Exception $e) { - return new HtmlResponse($template->render('form', ['error' => 'wtf', 'rolesAvailable' => $rolesAvailable]), 500); + return new HtmlResponse($template->render('form', ['error' => 'wtf', 'positions' => $positions]), 500); } $query = http_build_query(['id' => $id, 'token' => $token]); @@ -105,6 +125,6 @@ public function handle(ServerRequestInterface $request): ResponseInterface return new RedirectResponse("/status.php?$query", 303); } - return new HtmlResponse($template->render('form', ['rolesAvailable' => $rolesAvailable])); + return new HtmlResponse($template->render('form', ['positions' => $positions])); } } diff --git a/src/PageIndex.php b/src/PageIndex.php index bec828e..4479ae6 100644 --- a/src/PageIndex.php +++ b/src/PageIndex.php @@ -16,11 +16,22 @@ public function handle(ServerRequestInterface $request): ResponseInterface $db = new Database(); $expiry = $db->getConfigValue('expiry'); - $rolesAvailable = $db->getConfigValue('rolesAvailable'); - $rolesAvailableCount = $rolesAvailable ? count(explode('|', $rolesAvailable)) : 0; + $positions = $db->getPositions(); - if ($rolesAvailableCount === 0) { + if (count($positions) === 0) { $expiry = 1; + } else { + // check that there is at least one position available + $isAtLeastOneAvailable = false; + for ($i = 0; $i < count($positions); $i++) { + if ($positions[$i]['available'] == 1) { + $isAtLeastOneAvailable = true; + break; + } + } + if (!$isAtLeastOneAvailable) { + $expiry = 1; + } } // Get from DB -> if "unixtime.now >= expiry date" then candidate_close : else show the form diff --git a/src/PageInterviews.php b/src/PageInterviews.php index 49a587a..01e0152 100644 --- a/src/PageInterviews.php +++ b/src/PageInterviews.php @@ -50,38 +50,48 @@ public function handle(ServerRequestInterface $request): ResponseInterface $optionalNotes = ""; } - $ical = new VCalendar([ + $ical = new VCalendar( + [ 'VEVENT' => [ - 'SUMMARY' => "Colloquio con $user->name $user->surname", - 'UID' => $user->id, - 'DTSTART' => $interview->when, - 'DTEND' => (clone $interview->when)->add(new \DateInterval('PT30M')), - 'DESCRIPTION' => "Colloquio per $user->area.$optionalNotes", + 'SUMMARY' => "Colloquio con $user->name $user->surname", + 'UID' => $user->id, + 'DTSTART' => $interview->when, + 'DTEND' => (clone $interview->when)->add(new \DateInterval('PT30M')), + 'DESCRIPTION' => "Colloquio per $user->area.$optionalNotes", + ] ] - ]); - /** @noinspection PhpUndefinedFieldInspection */ - /** @noinspection PhpMethodParametersCountMismatchInspection */ + ); + /** + * @noinspection PhpUndefinedFieldInspection +*/ + /** + * @noinspection PhpMethodParametersCountMismatchInspection +*/ $ical->VEVENT->add( 'URL', Utils::appendQueryParametersToRelativeUrl($request->getUri(), ['download' => null]), [ - 'VALUE' => 'URI', + 'VALUE' => 'URI', ] ); - /** @noinspection PhpUndefinedFieldInspection */ - /** @noinspection PhpMethodParametersCountMismatchInspection */ + /** + * @noinspection PhpUndefinedFieldInspection +*/ + /** + * @noinspection PhpMethodParametersCountMismatchInspection +*/ $ical->VEVENT->add( 'ORGANIZER', 'https://t.me/' . $interview->recruitertg, [ - 'CN' => $interview->recruiter, + 'CN' => $interview->recruiter, ] ); $headers = [ - 'Content-Type' => 'text/calendar; charset=utf-8', - 'Content-Description' => 'File Transfer', - 'Content-Disposition' => "attachment; filename=\"colloquio $user->name $user->surname.ics\"", + 'Content-Type' => 'text/calendar; charset=utf-8', + 'Content-Description' => 'File Transfer', + 'Content-Disposition' => "attachment; filename=\"colloquio $user->name $user->surname.ics\"", ]; return new TextResponse($ical->serialize(), 200, $headers); @@ -94,13 +104,16 @@ public function handle(ServerRequestInterface $request): ResponseInterface // Interview page not available? if (!$user->status || !$user->published) { - $page = $template->render('error', [ + $page = $template->render( + 'error', + [ 'message' => sprintf( __('È necessario approvare e pubblicare la candidatura di %s per accedere a questa pagina. Torna alla pagina di gestione candidato.'), htmlspecialchars($user->name, ENT_QUOTES | ENT_HTML5), $user->id ) - ]); + ] + ); return new HtmlResponse($page, 400); } @@ -115,9 +128,9 @@ public function handle(ServerRequestInterface $request): ResponseInterface // A form has been submitted if ($request->getMethod() === 'POST') { - $POST = $request->getParsedBody(); - $changed = false; - $note = $POST['note'] ?? ''; + $POST = $request->getParsedBody(); + $changed = false; + $note = $POST['note'] ?? ''; if (isset($POST['edit'])) { // Update personal details, same as candidates.php @@ -139,21 +152,21 @@ public function handle(ServerRequestInterface $request): ResponseInterface $db->setInviteLink($id, $link); $changed = true; } elseif (isset($POST['setinterview']) && isset($POST['when1']) && isset($POST['when2']) && isset($POST['recruiter'])) { - // Schedule an interview - $recruiter = $POST['recruiter']; + // Schedule an interview + $recruiter = $POST['recruiter']; if (strlen($recruiter) <= 0 || strpos($recruiter, '|') === false) { - return new HtmlResponse($template->render('error', ['message' => 'Select a recruiter']), 400); + return new HtmlResponse($template->render('error', ['message' => 'Select a recruiter']), 400); } - // Split recruiter name and telegram account - $recruiter = explode('|', $recruiter, 2); - // Glue date and time together + // Split recruiter name and telegram account + $recruiter = explode('|', $recruiter, 2); + // Glue date and time together $when = DateTime::createFromFormat( "Y-m-d H:i", $POST['when1'] . ' ' . $POST['when2'], new DateTimeZone('Europe/Rome') ); - $db->setInterviewSchedule($interview->id, $recruiter[1], $recruiter[0], $when); - $changed = true; + $db->setInterviewSchedule($interview->id, $recruiter[1], $recruiter[0], $when); + $changed = true; } elseif (isset($POST['unsetinterview'])) { // Unschedule an interview $db->setInterviewSchedule($interview->id, null, null, null); @@ -200,22 +213,25 @@ public function handle(ServerRequestInterface $request): ResponseInterface } // Render the page - $page = $template->render('interview', [ + $page = $template->render( + 'interview', + [ 'user' => $user, 'interview' => $interview, 'edit' => isset($GET['edit']), 'recruiters' => $ldap->getRecruiters(), 'notes' => $notes, - ]); + ] + ); return new HtmlResponse($page); } else { // No id parameter => list of interviews // No buttons here to submit anything - // if($request->getMethod() === 'POST') { + // if($request->getMethod() === 'POST') { // - // } + // } if (isset($GET['byrecruiter'])) { // List of interviews by recruiter @@ -224,10 +240,10 @@ public function handle(ServerRequestInterface $request): ResponseInterface $page = $template->render( 'interviewsbyrecruiter', [ - 'interviews' => $interviews, - 'myuser' => $_SESSION['uid'], - 'myname' => $_SESSION['cn'], - 'showOldInterviews' => ( isset($GET['showOldInterviews']) && $GET['showOldInterviews'] === 'on' ) + 'interviews' => $interviews, + 'myuser' => $_SESSION['uid'], + 'myname' => $_SESSION['cn'], + 'showOldInterviews' => ( isset($GET['showOldInterviews']) && $GET['showOldInterviews'] === 'on' ) ] ); return new HtmlResponse($page); diff --git a/src/PagePosition.php b/src/PagePosition.php new file mode 100644 index 0000000..100f7b3 --- /dev/null +++ b/src/PagePosition.php @@ -0,0 +1,107 @@ +getUri()); + + Utils::requireAdmin(); + + if (!isset($_GET['id'])) { + return new RedirectResponse('settings.php', 303); + } + + $db = new Database(); + + $position = $db->getPosition($_GET['id']); + + if ($position == false) { + return new RedirectResponse('settings.php', 303); + } + + $nameTranslations = []; + $descriptionTranslations = []; + + foreach (Template::SUPPORTED_LOCALES as $locale) { + $nameTranslations[$locale] = $db->getTranslation("position." . $_GET['id'] . ".name", $locale); + if ($nameTranslations[$locale] !== false) { + $nameTranslations[$locale] = $nameTranslations[$locale]['value']; + } + $descriptionTranslations[$locale] = $db->getTranslation("position." . $_GET['id'] . ".description", $locale); + if ($descriptionTranslations[$locale] !== false) { + $descriptionTranslations[$locale] = $descriptionTranslations[$locale]['value']; + } + } + + $error = null; + + if ($request->getMethod() === 'POST') { + $POST = $request->getParsedBody(); + // Form submission + $changed = false; + if (isset($POST['delete'])) { + // Delete position + $db->deletePosition($_GET['id']); + return new RedirectResponse('settings.php', 303); + } elseif (isset($POST['id'])) { + // Update the id of the position + // Make sure the id is url safe (aka keep only lowercase letters and dashes) and replace spaces with dashes + $newId = preg_replace('/[^a-z-]/', '', preg_replace('/ /', '-', strtolower($POST['id']))); + if ($newId !== $_GET['id']) { + $existingPosition = $db->getPosition($newId); + if ($existingPosition !== false) { + $error = 'Position with id ' . $newId . ' already exists'; + } else { + $db->updatePositionId($_GET['id'], $newId); + return new RedirectResponse('position.php?id=' . $newId, 303); + } + } + } elseif (isset($POST['index'])) { + // Update the index of the position + $db->updatePositionIndex($_GET['id'], $POST['index']); + $changed = true; + } elseif (isset($POST['translation'])) { + // Figure out which translation has been changed and update it + foreach (Template::SUPPORTED_LOCALES as $locale) { + if (isset($POST['name-' . $locale]) && $POST['name-' . $locale] !== $nameTranslations[$locale]) { + $db->updateTranslation("position." . $_GET['id'] . ".name", $locale, $POST['name-' . $locale]); + } + if (isset($POST['description-' . $locale]) && $POST['description-' . $locale] !== $descriptionTranslations[$locale]) { + $db->updateTranslation("position." . $_GET['id'] . ".description", $locale, $POST['description-' . $locale]); + } + } + $changed = true; + } + + if ($changed) { + // This is a pattern: https://en.wikipedia.org/wiki/Post/Redirect/Get + // $_SERVER['REQUEST_URI'] is already url encoded + return new RedirectResponse($_SERVER['REQUEST_URI'], 303); + } + } + + return new HtmlResponse( + $template->render( + 'position', + [ + 'myuser' => $_SESSION['uid'], + 'myname' => $_SESSION['cn'], + 'position' => $position, + 'nameTranslations' => $nameTranslations, + 'descriptionTranslations' => $descriptionTranslations, + 'error' => $error + ] + ) + ); + } +} diff --git a/src/PageSettings.php b/src/PageSettings.php index 0ff8d61..da31761 100644 --- a/src/PageSettings.php +++ b/src/PageSettings.php @@ -40,15 +40,25 @@ public function handle(ServerRequestInterface $request): ResponseInterface } catch (Exception $e) { $error = $e->getMessage(); } - } elseif (isset($POST['rolesReset'])) { - // Make all roles unavailable - $db->unsetConfigValue('rolesAvailable'); - $changed = true; - } elseif (isset($POST['roles'])) { - // Set available roles - $rolesRule = implode('|', $POST['roles']); - $db->setConfigValue('rolesAvailable', $rolesRule); + } elseif (isset($POST['positions'])) { + // Positions + $positions = $db->getPositions(); + foreach ($positions as $position) { + $available = isset($POST['position-' . $position['id']]); + if ($available == ($position['available'] == 1)) { + continue; + } + $db->setPositionAvailability($position['id'], $available ? 1 : 0); + } $changed = true; + } elseif (isset($POST['newPositionName'])) { + $id = preg_replace('/[^a-z-]/', '', preg_replace('/ /', '-', strtolower($POST['newPositionName']))); + $db->addPosition($id); + foreach (Template::SUPPORTED_LOCALES as $locale) { + $db->updateTranslation('position.' . $id . '.name', $POST['newPositionName'], $locale); + $db->updateTranslation('position.' . $id . '.description', '', $locale); + } // setting translations to a default string, we'll edit it right after + return new RedirectResponse('position.php?id=' . $id, 303); } elseif (isset($POST['notifyEmail'])) { if ($POST['notifyEmail'] === 'false') { $email = '0'; @@ -70,17 +80,24 @@ public function handle(ServerRequestInterface $request): ResponseInterface // Get the timestamp in correct format if ($expiry !== null) { - /** @noinspection PhpUnhandledExceptionInspection */ + /** + * @noinspection PhpUnhandledExceptionInspection +*/ $expiry = (new DateTime('now', new DateTimeZone('Europe/Rome')))->setTimestamp($expiry); } - return new HtmlResponse($template->render('settings', [ + return new HtmlResponse( + $template->render( + 'settings', + [ 'myuser' => $_SESSION['uid'], 'myname' => $_SESSION['cn'], 'expiry' => $expiry, 'error' => $error, 'sendMail' => (int) $db->getConfigValue('notifyEmail'), - 'rolesAvailable' => $db->getConfigValue('rolesAvailable') - ])); + 'positions' => $db->getPositions(Template::getLocale() ?? 'en_US') + ] + ) + ); } } diff --git a/src/PageStatus.php b/src/PageStatus.php index ac7211d..4871194 100644 --- a/src/PageStatus.php +++ b/src/PageStatus.php @@ -38,21 +38,21 @@ public function handle(ServerRequestInterface $request): ResponseInterface // GDPR data download button $attributes = (array) $user; $downloadable = [ - 'name', - 'surname', - 'degreecourse', - 'year', - 'matricola', - 'area', - 'letter' + 'name', + 'surname', + 'degreecourse', + 'year', + 'matricola', + 'area', + 'letter' ]; // Filter out other attributes $attributes = array_intersect_key($attributes, array_combine($downloadable, $downloadable)); $headers = [ - 'Content-Transfer-Encoding' => 'Binary', - 'Content-Description' => 'File Transfer', - 'Content-Disposition' => 'attachment; filename=weeehire.json', + 'Content-Transfer-Encoding' => 'Binary', + 'Content-Description' => 'File Transfer', + 'Content-Disposition' => 'attachment; filename=weeehire.json', ]; return new JsonResponse($attributes, 200, $headers, JsonResponse::DEFAULT_JSON_FLAGS | JSON_PRETTY_PRINT); } elseif (isset($GET['delete'])) { diff --git a/src/Template.php b/src/Template.php index 8a38fda..a3e63fb 100644 --- a/src/Template.php +++ b/src/Template.php @@ -9,7 +9,7 @@ class Template { - private const SUPPORTED_LOCALES = ['en-US', 'it-IT']; + public const SUPPORTED_LOCALES = ['en-US', 'it-IT']; public static function getNormalizedLocale(string $locale): ?string @@ -31,8 +31,8 @@ public static function getNormalizedLocaleOrDefault(string $locale): string /** * Prepare the template engine and configure Motranslator if no session is available * - * @param string $locale Template locale (language) - * @param UriInterface $uri Request URI, needed by almost every template + * @param string $locale Template locale (language) + * @param UriInterface $uri Request URI, needed by almost every template * * @return Engine Plates template engine */ @@ -85,10 +85,12 @@ public static function create(UriInterface $uri): Engine * * @return string */ - private static function getLocale(): string + public static function getLocale(): string { // Must be here, or $_SESSION is not available - session_start(); + if (session_status() == PHP_SESSION_NONE) { + session_start(); + } if (isset($_SESSION['locale'])) { return $_SESSION['locale']; } @@ -122,7 +124,9 @@ private static function getLocaleNotCached(): string return 'en-US'; } - /** @noinspection PhpUndefinedMethodInspection */ + /** + * @noinspection PhpUndefinedMethodInspection +*/ $lowercaseLocale = $bestLanguage->getType(); if (strlen($lowercaseLocale) == 5 && $lowercaseLocale[2] == '-') { // gettext (or motranslator) expects the part after the dash to be uppercase diff --git a/src/Utils.php b/src/Utils.php index 7b74c3d..de0b789 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -10,8 +10,8 @@ class Utils /** * Add or remove query parameters from a URL * - * @param UriInterface $uri Current URI, may contain query parameters - * @param array $parameters Parameters to modify. Key is name, value is the value or null to delete it. Other parameters left untouched. + * @param UriInterface $uri Current URI, may contain query parameters + * @param array $parameters Parameters to modify. Key is name, value is the value or null to delete it. Other parameters left untouched. * * @return string resulting URL */ diff --git a/templates/adminnavbar.php b/templates/adminnavbar.php index 6919862..a5771fc 100644 --- a/templates/adminnavbar.php +++ b/templates/adminnavbar.php @@ -1,28 +1,34 @@ diff --git a/templates/base.php b/templates/base.php index 1ab6618..837a405 100644 --- a/templates/base.php +++ b/templates/base.php @@ -1,15 +1,23 @@ - + - <?=$this->e($title)?> - <?=__('Entra in WEEE Open')?> + <?php echo $this->e($title)?> - <?php echo __('Entra in WEEE Open')?> @@ -23,9 +31,9 @@ -fetch('navbar', ['logoHref' => $logoHref ?? '/'])?> +fetch('navbar', ['logoHref' => $logoHref ?? '/'])?>
- section('content')?> + section('content')?>
diff --git a/templates/candidate.php b/templates/candidate.php index d914405..ccbadc3 100644 --- a/templates/candidate.php +++ b/templates/candidate.php @@ -1,12 +1,14 @@ e($user->name), $this->e($user->surname), $this->e($user->matricola)); $title = sprintf(__('%s - Candidatura'), $titleShort); @@ -23,28 +25,28 @@ status === true) : ?> emailed) : ?> status === false) : ?> status === null && $user->hold === true) : ?> published) : ?> @@ -101,7 +103,7 @@ class="btn btn-outline-danger btn-sm"> - + emailed && $user->published && $user->status === true) : ?> status === true) : ?> invitelink !== null) : ?> diff --git a/templates/candidate_close.php b/templates/candidate_close.php index 4be2e74..be3e526 100644 --- a/templates/candidate_close.php +++ b/templates/candidate_close.php @@ -2,5 +2,5 @@ $this->layout('base', ['title' => __('Spiacenti, le candidature sono chiuse!')]) ?> -

-

+

+

diff --git a/templates/candidates.php b/templates/candidates.php index 066f000..ad33302 100644 --- a/templates/candidates.php +++ b/templates/candidates.php @@ -1,8 +1,14 @@ -fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?> +fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?> -

+

- - - - - - + + + + + + - > - - - - - - + > + + + + + + @@ -126,7 +134,7 @@ button.classList.add("btn-secondary"); button.classList.add("p-1"); button.classList.add("spoiler"); - button.textContent = ""; + button.textContent = ""; td.appendChild(button); spoilers.push(stars); @@ -160,7 +168,7 @@
+ class="btn btn-outline-dark">
@@ -172,16 +180,16 @@ class="btn btn-outline-dark">
- + class="btn btn-outline-danger mr-2"> +
    -
  • -
  • -
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +
  • +
diff --git a/templates/confirm_email.php b/templates/confirm_email.php index 4a955b8..db5cb8a 100644 --- a/templates/confirm_email.php +++ b/templates/confirm_email.php @@ -1,8 +1,14 @@ -

le attività del team sono riprese, anche in presenza, con delle limitazioni sul numero massimo di persone in laboratorio. È pertanto possibile candidarsi anche nella categoria riparazione hardware.')?>

-

+

le attività del team sono riprese, anche in presenza, con delle limitazioni sul numero massimo di persone in laboratorio. È pertanto possibile candidarsi anche nella categoria riparazione hardware.')?>

+

diff --git a/templates/day.php b/templates/day.php index ead252a..db50273 100644 --- a/templates/day.php +++ b/templates/day.php @@ -1,6 +1,8 @@ layout('base', ['title' => __('Errore')]) ?> -

-

+

+

diff --git a/templates/form.php b/templates/form.php index 9e6492f..c7ac63e 100644 --- a/templates/form.php +++ b/templates/form.php @@ -1,45 +1,48 @@ layout('base', ['title' => __('Compila il questionario')]) ?>
- inviarci un messaggio tramite il sito o dircelo durante il colloquio.')); - break; - default: - echo sprintf( - __('Si è rotto qualcosa (o hai rotto qualcosa?) durante l\'invio. Puoi contattarci a %s e spiegarci cos\'è successo, se vuoi.'), - WEEEHIRE_EMAIL_FALLBACK - ); - break; - } - ?> + inviarci un messaggio tramite il sito o dircelo durante il colloquio.')); + break; + default: + echo sprintf( + __('Si è rotto qualcosa (o hai rotto qualcosa?) durante l\'invio. Puoi contattarci a %s e spiegarci cos\'è successo, se vuoi.'), + WEEEHIRE_EMAIL_FALLBACK + ); + break; + } + ?>
@@ -47,34 +50,34 @@
- +
- +
- +
- +
- +
- +
-

+

- +
-

-
-
-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-

-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-

Peracotta ed il Pesto. Se conosci come lavorare con qt ed interagire con API, sei la persona che stiamo cercando!')?>

-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

Tarallo, WEEEHire e crauto, puoi darci già un\'occhiata per sapere a cosa vai incontro.')?>

-

-

-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-

-

case vuoti, schede madri dall\'estetica peculiare o i piatti a specchio di hard disk rotti.') ?>

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire, e se hai già lavorato su qualche progetto non esitare a condividerne il link nella tua lettera!.')?>

-
-
-

-

-
    -
  • -
  • -
  • -
  • -
  • -
-

-

-

meme nonsense, etc...) sui social network, in particolare Facebook e Instagram.')?>

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

-
    -
  • -
  • -
  • -
  • -
  • -
-

almeno una, o più di una, di queste attività di interessano, questo è il ruolo adatto.')?>

-

-

-

-

sono solo linee guida, scrivi tutto ciò che ti sembra rilevante dire.')?>

-
-
-

+

+ +
+ +
+
- .') ?> - Informazioni sul trattamento dei dati personali.'), 'privacy.php')?> + .') ?> + Informazioni sul trattamento dei dati personali.'), 'privacy.php')?>
+ class="form-check-label">
- +
diff --git a/templates/index.php b/templates/index.php index f91a6f1..3aae265 100644 --- a/templates/index.php +++ b/templates/index.php @@ -1,16 +1,18 @@ layout('base', ['title' => 'WEEElcome']) ?> -

-

+

+

insert('covid') ?> @@ -38,27 +40,27 @@ function countdown() { // Display the result in the element with id="demo" if(days === 0) { if(hours === 0) { - timer.textContent = ``; + timer.textContent = ``; } else if(hours === 1) { - timer.textContent = ``; + timer.textContent = ``; } else { - timer.textContent = ``; + timer.textContent = ``; } } else if(days === 1) { if(hours === 0) { - timer.textContent = ``; + timer.textContent = ``; } else if(hours === 1) { - timer.textContent = ``; + timer.textContent = ``; } else { - timer.textContent = ``; + timer.textContent = ``; } } else { if(hours === 0) { - timer.textContent = ``; + timer.textContent = ``; } else if(hours === 1) { - timer.textContent = ``; + timer.textContent = ``; } else { - timer.textContent = ``; + timer.textContent = ``; } } diff --git a/templates/interview.php b/templates/interview.php index ceb9e36..8aacf4f 100644 --- a/templates/interview.php +++ b/templates/interview.php @@ -1,10 +1,12 @@ e($user->name), $this->e($user->surname), $this->e($user->matricola)); $title = sprintf(__('%s - Colloquio'), $titleShort); @@ -20,28 +22,28 @@ status === true) : ?> status === false) : ?> when === null) : ?> @@ -93,29 +95,29 @@ class="btn btn-outline-danger">status === true && !$edit) : /* ?> -
- -
+
+ +
-
- -
+
+ +
-
-
- -
-
- -
-
+
+
-fetch('userinfo', ['user' => $user, 'edit' => $edit])?> @@ -123,14 +125,11 @@ class="btn btn-outline-danger">
+ href="e(\WEEEOpen\WEEEHire\Utils::appendQueryParametersToRelativeUrl($globalRequestUri, ['edit' => 'true']))?>">
-

- fetch('notes', ['notes' => $notes]); ?> +

+ fetch('notes', ['notes' => $notes]); ?>
- +
@@ -163,30 +162,30 @@ class="form-control">e($interview->answers)?>
- status === null && $interview->recruiter !== null && $interview->when !== null) : ?> - hold) : ?> - - - - - - - recruiter !== null && $interview->when !== null) : ?> - - + status === null && $interview->recruiter !== null && $interview->when !== null) : ?> + hold) : ?> + + + + + + + recruiter !== null && $interview->when !== null) : ?> + +
- invitelink !== null) : ?> + invitelink !== null) : ?> - +
diff --git a/templates/interviews.php b/templates/interviews.php index 7b8c612..b5fe2e1 100644 --- a/templates/interviews.php +++ b/templates/interviews.php @@ -1,8 +1,14 @@ layout('base', ['title' => __('Candidati'), 'fontAwesome' => true, 'logoHref' => 'interviews.php']); $total = 0; $approved = 0; @@ -17,17 +23,17 @@ $prevdate = null; ?> -fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?> +fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?> -

+

e($user['name']) ?>e($user['area'])?>e($user['recruiter'])?>>
e($user['name']) ?>e($user['area'])?>e($user['recruiter'])?>>
- - - - - + + + + + @@ -80,7 +86,7 @@ $prevdate = $date; ?> - + - > - - - - - + > + + + + +
fetch('day', ['day' => $int['when']->format('N')]))?>fetch('day', ['day' => $int['when']->format('N')]))?>
e($int['name'])?>e($int['area'])?>e($int['interviewer'])?>
e($int['name'])?>e($int['area'])?>e($int['interviewer'])?>
-

+

- - - + + + - - - + + +
e($int['name'])?>e($int['area'])?>e($int['recruiter'])?>e($int['name'])?>e($int['area'])?>e($int['recruiter'])?>
    -
  • -
  • -
  • -
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +
  • +
  • +
$b['safetyTestDate']; -}); +usort( + $hasSafetyTestDate, + function ($a, $b) { + return $a['safetyTestDate'] <=> $b['safetyTestDate']; + } +); ?> -

+

- - + + - - + + diff --git a/templates/interviewsbyrecruiter.php b/templates/interviewsbyrecruiter.php index 3f55481..0327508 100644 --- a/templates/interviewsbyrecruiter.php +++ b/templates/interviewsbyrecruiter.php @@ -1,9 +1,17 @@ layout('base', ['title' => __('Recruiter'), 'logoHref' => 'interviews.php?byrecruiter=true']); $later = []; @@ -21,14 +29,14 @@ $today = $dt->format('Y-m-d'); ?> -fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?> +fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?>
-

+

@@ -62,15 +70,15 @@ if ($date !== $prevdate) { $prevdate = $date; ?> -
  • - fetch('day', ['day' => $int['when']->format('N')])) ?> +
  • + fetch('day', ['day' => $int['when']->format('N')])) ?>
  • -
  • - %s (%s)'), $this->e($int['id']), $this->e($int['name']), $this->e($int['area']))?> - +
  • + %s (%s)'), $this->e($int['id']), $this->e($int['name']), $this->e($int['area']))?> +
  • layout('base', ['title' => __('Logout')]) ?> -

    -

    +

    +

    diff --git a/templates/navbar.php b/templates/navbar.php index 30c44e4..9dfb2fe 100644 --- a/templates/navbar.php +++ b/templates/navbar.php @@ -1,18 +1,26 @@ diff --git a/templates/notes.php b/templates/notes.php index 603f270..980a880 100644 --- a/templates/notes.php +++ b/templates/notes.php @@ -1,18 +1,20 @@
    -

    +

    -

    +

    -

    +

    -

    +

    @@ -22,24 +24,24 @@
    - - - -
    - + + + +
    +
    -
    -
    format('Y-m-d') ?> format('H:i') ?>
    +
    +
    format('Y-m-d') ?> format('H:i') ?>
    - - - + + +
    -
    +
    \ No newline at end of file diff --git a/templates/notification_email.php b/templates/notification_email.php index 968c124..fc7f2fd 100644 --- a/templates/notification_email.php +++ b/templates/notification_email.php @@ -1,7 +1,11 @@ layout('base', ['title' => __('Modifica posizione'), 'logoHref' => 'settings.php']); + +$currentFileName = basename(__FILE__); + +?> + +fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName]) ?> + + +
    + e($error) ?> +
    + +
    +

    +
    +

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +

    + + +
    +
    + +
    +
    + +
    +
    + +
    +

    +

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    diff --git a/templates/roles.php b/templates/roles.php deleted file mode 100644 index 4e9cdb6..0000000 --- a/templates/roles.php +++ /dev/null @@ -1,19 +0,0 @@ - __('Riparazione hardware'), - 'Elettronica' => __('Elettronica'), - 'Sviluppo software Python' => __('Sviluppo software Python'), - 'Sviluppo software PHP' => __('Sviluppo software PHP'), - 'Sviluppo software JavaScript' => __('Sviluppo software JavaScript'), - 'Sviluppo software Vuejs' => __('Sviluppo software Vue.js'), - 'Machine Learning Engineer' => __('Machine Learning Engineer'), - 'Sysadmin' => __('Sysadmin'), - 'Comunicazione e social' => __('Comunicazione e social'), - 'Creazione di contenuti digitali' => __('Creazione di contenuti digitali'), - 'Riuso creativo' => __('Riuso creativo'), - 'Altro' => __('Altro'), - ]; -} diff --git a/templates/settings.php b/templates/settings.php index 783bbe3..698495a 100644 --- a/templates/settings.php +++ b/templates/settings.php @@ -1,39 +1,42 @@ layout('base', ['title' => __('Opzioni WEEEHire'), 'logoHref' => 'settings.php']); -require_once 'roles.php'; -$allRoles = getRoles(); -if ($rolesAvailable === null) { - $roles = []; -} else { - $roles = explode('|', $rolesAvailable); - $roles = array_combine($roles, $roles); -} + $currentFileName = basename(__FILE__); ?> -fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?> +fetch('adminnavbar', ['name' => $myname, 'user' => $myuser, 'currentFileName' => $currentFileName])?>
    - e($error)?> + e($error)?>
    -

    +


    -

    +

    -
    +
    + value="format('Y-m-d');?>">
    - +
    - + + value="true">❌

    -

    +

    -
    -
    -
    -
    -
    - $role) : ?> - -

    e($role) ?>

    - - -
    -
    -
    - $role) : ?> - -

    e($role) ?>

    - - + +
    + +
    + > + +
    +
    + +
    +
    +
    +
    -
    -
    - - -
    -
    - - +
    +
    +
    +
    -

    +

    -

    +

    -

    +

    - + - +
    diff --git a/templates/status.php b/templates/status.php index 7fe1ad4..9e19189 100644 --- a/templates/status.php +++ b/templates/status.php @@ -1,42 +1,48 @@ layout('base', ['title' => __('Stato della richiesta')]) ?>
    -

    +

    published && $user->status === true) : ?> -

    -

    @%2$s) su Telegram per passare al colloquio.'), $this->e($user->recruiter), $this->e($user->recruitertg))?>

    +

    +

    @%2$s) su Telegram per passare al colloquio.'), $this->e($user->recruiter), $this->e($user->recruitertg))?>

    published && $user->status === false) : ?> -

    +

    published && $user->hold === true) : ?> -

    +

    -

    -

    +

    +

    setTimezone(new DateTimeZone('Europe/Rome')); $date->setTimestamp($user->submitted); ?> -

    format('Y-m-d'), $date->format('H:i'))?>

    +

    format('Y-m-d'), $date->format('H:i'))?>

    published && $user->hold === true && $user->visiblenotes !== null) : ?>
    -

    e($user->visiblenotes) ?>

    +

    e($user->visiblenotes) ?>

    + href="e(WEEEOpen\WEEEHire\Utils::appendQueryParametersToRelativeUrl($globalRequestUri, ['delete' => 'true']))?>"> + href="e(WEEEOpen\WEEEHire\Utils::appendQueryParametersToRelativeUrl($globalRequestUri, ['download' => 'true']))?>">
    - +
    diff --git a/templates/userinfo.php b/templates/userinfo.php index a2f9c2d..09d5a9b 100644 --- a/templates/userinfo.php +++ b/templates/userinfo.php @@ -1,7 +1,13 @@
    - +
    - id="name" name="name" type="text" required="required" class="form-control" - value="e($user->name)?>"> + id="name" name="name" type="text" required="required" class="form-control" + value="e($user->name)?>">
    - +
    - id="surname" name="surname" type="text" required="required" class="form-control" - value="e($user->surname)?>"> + id="surname" name="surname" type="text" required="required" class="form-control" + value="e($user->surname)?>">
    - +
    - type="text" id="degreecourse" name="degreecourse" required="required" - class="form-control" value="e($user->degreecourse)?>"> + type="text" id="degreecourse" name="degreecourse" required="required" + class="form-control" value="e($user->degreecourse)?>">
    - +
    - type="text" id="year" name="year" required="required" class="form-control" - value="e($user->year)?>"> + type="text" id="year" name="year" required="required" class="form-control" + value="e($user->year)?>">
    - +
    - id="matricola" name="matricola" type="text" required="required" class="form-control" - value="e($user->matricola)?>"> + id="matricola" name="matricola" type="text" required="required" class="form-control" + value="e($user->matricola)?>">
    - +
    - type="text" name="area" id="area" required="required" class="form-control" - value="e($user->area)?>"> + type="text" name="area" id="area" required="required" class="form-control" + value="e($user->area)?>">
    - - + +
    - + + href="e(\WEEEOpen\WEEEHire\Utils::appendQueryParametersToRelativeUrl($globalRequestUri, ['edit' => null]))?>">
    diff --git a/tests/PagesTest.php b/tests/PagesTest.php index 4e508a5..00b1736 100644 --- a/tests/PagesTest.php +++ b/tests/PagesTest.php @@ -12,7 +12,6 @@ public static function setUpBeforeClass(): void { require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php'; $db = new Database(); $db->unsetConfigValue('expiry'); - $db->setConfigValue('rolesAvailable', 'Sviluppo software PHP|Sviluppo software Python|Elettronica'); $db->unsetConfigValue('notifyEmail'); }
    e($int['name'])?>e($exam['safetyTestDate']->format('Y-m-d H:i'))?>e($int['name'])?>e($exam['safetyTestDate']->format('Y-m-d H:i'))?>