{"id":18195734,"url":"https://github.com/sikkepitje/wootssync","last_synced_at":"2025-10-10T12:15:16.391Z","repository":{"id":260636706,"uuid":"874798811","full_name":"sikkepitje/WootsSync","owner":"sikkepitje","description":"WootsSync is een applicatie die Woots programma's synchroniseert met Magister","archived":false,"fork":false,"pushed_at":"2024-11-01T21:14:19.000Z","size":33,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-10T12:15:15.464Z","etag":null,"topics":["magister","powershell","powershell-scripts","woots"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sikkepitje.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-18T13:34:52.000Z","updated_at":"2024-11-01T21:14:22.000Z","dependencies_parsed_at":"2024-12-21T07:10:41.323Z","dependency_job_id":"46fee49e-ba17-4c52-9ee5-8088f38150a6","html_url":"https://github.com/sikkepitje/WootsSync","commit_stats":{"total_commits":5,"total_committers":1,"mean_commits":5.0,"dds":0.0,"last_synced_commit":"edcebabe94503bd4b1d9cedd0486e82e1b01b113"},"previous_names":["sikkepitje/wootssync"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sikkepitje/WootsSync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sikkepitje%2FWootsSync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sikkepitje%2FWootsSync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sikkepitje%2FWootsSync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sikkepitje%2FWootsSync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sikkepitje","download_url":"https://codeload.github.com/sikkepitje/WootsSync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sikkepitje%2FWootsSync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279003898,"owners_count":26083639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["magister","powershell","powershell-scripts","woots"],"created_at":"2024-11-03T08:04:40.831Z","updated_at":"2025-10-10T12:15:16.374Z","avatar_url":"https://github.com/sikkepitje.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"= WootsSync\r\n\r\nVersie 20241101b\r\n\r\n== Abstract\r\n\r\nWootsSync synchroniseert programma's in https://app.woots.nl[Woots] met https://magister.nl/[Magister]. Het maakt programma's aan of werkt deze bij, door hieraan de juiste docenten, klassen en legroepen te koppelen. https://magister.nl/[Magister] is een veelgebruikt schooladministratiesysteem voor het voortgezet onderwijs in Nederland. https://app.woots.nl[Woots] is een digitaal toetsplatform en toetsbibliotheek. \r\n\r\nWootsSync bevat schoolspecifieke logica. Het is zaak om deze aan te passen naar eigen wens of behoefte.\r\n\r\n== Vereisten\r\n\r\nDit script vereist:\r\n\r\n* Windows PowerShell 5, PowerShell 7 of hoger.\r\n* https://github.com/sikkepitje/Woots-PowerShell[Woots PowerShell module] \r\n* Gegevens uit Magister; deze worden opgehaald door het ImportMagister script uit https://github.com/sikkepitje/TeamSync[TeamSync].\r\n\r\n== Installatie\r\n\r\n* Download alle bestanden uit de https://github.com/sikkepitje/WootsSync[WootsSync repository] en plaats ze in een map naar keuze. \r\n* Maak een API-token aan: log in als beheerder, kies avatar→instellingen→API-token en klik op \"Generate new token\". Noteer School_id en token.\r\n* Schrijf de gewenste instellingen in ``WootsSync.ini`` . Maak eventueel de gewenste mappen en zet de vereiste invoerbestanden klaar.\r\n\r\n== Gebruik\r\n\r\nWootsSync bestaat uit 3 scripts die achtereenvolgens worden uitgevoerd.\r\n\r\n* ``Import-Magister.ps1`` haalt gegevens op uit Magister.\r\n* ``WootsSync-ReadPhase.ps1`` bepaalt Woots-programma's.\r\n* ``WootsSync-WritePhase.ps1`` werkt in Woots de programma's bij.\r\n\r\n== Documentatie \r\n\r\n=== Import-Magister\r\nHet script ``Import-Magister.ps1`` maakt verbinding met Magister Webservices en haalt leerlingen, docenten en vakken op. Zie de documentatie op https://github.com/sikkepitje/TeamSync[TeamSync GitHub repository]. \r\n\r\nHet script genereert de volgende bestanden:\r\n\r\n* ``magister_leerlingen.clixml``\r\n* ``magister_docenten.clixml``\r\n* ``magister_vak.clixml``\r\n\r\nDeze bestanden moeten worden klaargezet in de WootsSync-importmap en worden ingelezen door WritePhase.\r\n\r\n=== WootsSync-ReadPhase\r\nHet script ``WootsSync-ReadPhase.ps1`` leest de bestanden aangemaakt door Import-Magister en bouwt een \r\nlijst met programma's op. Het genereert een Woots-programma voor elke unieke \r\ncombinatie van leerjaar, studie en vak en koppelt de klassen en docenten \r\nhieraan. Het doet dit als volgt. \r\n\r\n1. Het telt alle leerlingen af, en \r\n .. voor elke leerling loopt alle lesgroepen af. Het splitst de naam van de lesgroep. Het bepaalt afdeling en vakcode op basis van schoolspecifieke logica. Het zoekt de vakomschrijving op voor elke vakcode. Het bouwt nu een programmanaam op door combineren van afdeling en vakomschrijving. Het voegt de lesgroep van de leerling toe aan het programma. \r\n .. indien onderbouw (leerjaar =\u003c 3), loopt alle vakken af. Voor elke combinatie van afdeling en vak voegt de klas van de leerling toe aan het respectievelijke programma. Het maakt het programma aan, indien deze nog  niet bestaat. \r\n2. Het telt alle docenten af, \r\n .. telt alle groepvakken af. Voor elk groepvak, bepaalt afdeling en vak en voegt de docent toe aan het respectievelijke programma, indien  deze bestaat. \r\n .. telt alle klasvakken af en telt alle docentvakken af. Het bepaalt afdeling en voegt voor elke combinatie van afdeling en vak de docent toe aan het respectievelijke programma, indien deze bestaat. \r\n\r\nWootsSync-ReadPhase maakt gebruik van een of meer filters in \r\nbestanden in de datamap. Zie onder voor uitleg.\r\n\r\nWootsSync-ReadPhase genereert de volgende bestanden in de datamap:\r\n\r\n* ``WootsSync.clixml`` bevat een lijst met programma's in XML,\r\n* ``WootsSync.csv`` bevat een lijst met programma's in CSV,\r\n* ``WootsSync.txt`` bevat een lijst met programmanamen.\r\n\r\nHet resultaat kan worden beoordeeld in deze bestanden. Indien alles in orde is, ga door met ``WootsSync-WritePhase.ps1`` om de programma's aan te maken in Woots. \r\n\r\n=== WootsSync-WritePhase\r\nHet script ``WootsSync-WritePhase.ps1`` maakt verbinding met de Woots API, leest ``WootsSync.clixml``, loopt alle programma's af en werkt de programma's in Woots bij door de verschillen naar Woots te schrijven.\r\n\r\n* indien het programma niet bestaat in Woots en het zou volgens het lijst wel moeten bestaan, dan wordt het aangemaakt. \r\n* indien een groep (klas of lesgroep) niet gekoppeld is aan het programma en het zou volgend de lijst wel lid gekoppeld moeten zijn, dan wordt de groep gekoppeld.\r\n* indien een groep (klas of lesgroep) wel gekoppeld is aan het programma en het zou volgend de lijst niet lid gekoppeld moeten zijn, dan wordt de groep afgekoppeld.\r\n* indien een docent niet lid is van het programma, dan wordt de docent gekoppeld. \r\n\r\n(AANPASSEN) Docentcodes worden aangevuld met '@jpthijsse.nl' om een geldig e-mail te genereren. De betreffende docent wordt met dit e-mail in Woots opgezocht.\r\n\r\n=== Filters\r\n\r\nDe volgende filters kunnen worden gedefinieerd om de door ReadPhase aangemaakte lijst programma's te beinvloeden. \r\n\r\n==== Studie uitsluiten\r\nOm specifieke studies uit te sluiten van verwerken, maak het bestand ``Datamap\\WSExcludeStudie.txt`` aan en zet daarin één of meer beschrijvingen van uit te sluiten studies in de vorm van een regular expression, elk op een eigen regel.\r\n\r\n==== Vak uitsluiten\r\nOm specifieke vakken uit te sluiten van verwerking, maak het bestand ``Datamap\\WSExcludeVakcode.txt`` aan en zet daarin één of meer vakcodes van uit te sluiten vakken in de vorm van een regular expression elk op een eigen regel. \r\n\r\nVoorbeeld: ^lo$   filtert alle vakcodes gelijk aan 'lo'\r\nVoorbeeld: ^me    filtert alle vakcodes beginnend met 'me'\r\nVoorbeeld: pws    filtert alle vakcodes waarin 'pws' voorkomt\r\n\r\n==== Klassikale vakken\r\nIndien het bestand ''Datamap\\WSKlassikaleVakken.txt'' aanwezig is, dan wordt een lijst met vakcodes voor klassikale vakken ingelezen. Normaliter worden alleen onderbouwklassen gekoppeld aan programma's, maar voor de vakcodes in deze lijst worden klassen gekoppeld aan programma's in alle leerjaren. \r\n\r\n=== WootsSync.ini\r\n\r\nHet configuratiebestand bevat parameters voor zowel WootsSync-ReadPhase als WootsSync-WritePhase in een tekstbestand met de naam 'WootsSync.ini'. De naam en locatie van het configuratiebestand is ``WootsSync.ini`` in dezelfde map als WootsSync-ReadPhase en WootsSync-WritePhase. Om een ander bestand te kiezen, geeft de naam en locatie van WootsSync.Ini op de commandoregel van WootsSync-ReadPhase.ps1 en WootsSync-WritePhase.ps1 met de parameter -Inifilename \u003cbestandsnaam\u003e. Het configuratiebestand is een bestand dat in een teksteditor is bewerken en bestaat uit een reeks van naam-waarde-paren. Voor een voorbeeld, zie https://github.com/sikkepitje/WootsSync/blob/main/WootsSync-voorbeeld.ini[``WootsSync-voorbeeld.ini``]\r\n\r\n\r\nDe volgende waarden zijn verplicht en mogen niet worden weggelaten: schooldatamap, importmap, tempmap, hostname, school_id, token, wootsinstantie. \r\n\r\n``school`` is een naam die de school aanduidt in ReadPhase ten behoeve van het kiezen van de juiste logica voor het bepalen van lesgroep- en klasnamen.\r\n\r\n``datamap``, ``importmap`` en ``tempmap`` beduiden de naam van een map, relatief ten opzichte van de locatie van de script WootsSync-ReadPhase en WootsSync-WritePhase. \r\n\r\n``importmap`` geeft de naam van de map waarin gegevensbestanden worden opgeslagen voor de communicatie tussen Import-Magister en ReadPhase. Kopieer hierin de uitvoer van \r\n\r\n``datamap`` geeft de naam van de map waarin gegevensbestanden wordt opgeslagen voor de communicatie tussen ReadPhase en WritePhase, alsmedede filters voor ReadPhase.\r\n\r\n``tempmap`` geeft de naam van de map waarin ReadPhase een aantal controlebestanden opslaat. \r\n\r\n``wootsinstantie`` is een vrij te kiezen naam die de Woots-instantie aanduidt in WritePhase voor gebruik in logs en cache-bestandsnamen.\r\n\r\n``hostname`` is de hostname van de API eindpunt.\r\n\r\n``school_id`` is het identificatienummer van de school, te vinden onder instellingen, API-token.\r\n\r\n``token`` is het token dat toegang geeft tot de API, te beheren onder instellingen, API-token. \r\n\r\n``magistersyncleerjaar`` bevat een komma-gescheiden lijst van de leerjaren waarvoor WootsSync programma's aanmaakt. Voor het beste resultaat is het aanbevolen dat WootsSync uitsluitend programma's aanmaakt voor leerjaren die worden gesynchroniseerd met Magister, zoals ingesteld in Woots→Instellingen→Magister. \r\n\r\n``whatif`` is een schakelaar die bepaalt of Write-Phase wijzigingen in Woots aanbrengt ten behoeve van testen en debuggen. 0 betekent: schrijf wijzigingen, 1 betekent: doe alsof, schrijf geen wijzigingen.\r\n\r\n``do_remove_instructors`` is een schakelaar, 0 betekent: laat staan, 1 betekent: verwijder docenten uit programma's indien ze niet meer voorkomen in de door ReadPhase aangemaakte lijst.\r\n\r\n``gridview`` is een schakelaar: 1 betekent: ReadPhase toont interactief het resultaat in een GridView-venster. Het programma is dan niet meer geschikt om uit te voeren als geplande taak zonder toezicht (unattended). \r\n\r\n``onbekendvak_overslaan`` is een schakelaar. 1 betekent dat ReadPhase vakken in de uitvoer overslaat, die niet konden worden gekoppeld aan een bekende vakomschrijving. \r\n\r\n== Extra's \r\n\r\n== Known issues \r\n\r\nWootsSync is niet in staat om docenten aan programma's toe te kennen als ze in Woots een beheerdersrol hebben.\r\n\r\n== To Do\r\n\r\n* toevoegen docenten die ook beheerder zijn.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsikkepitje%2Fwootssync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsikkepitje%2Fwootssync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsikkepitje%2Fwootssync/lists"}