├── haibun ├── .gitignore ├── e2e │ ├── backgrounds │ │ ├── admin-credentials.feature │ │ ├── form-login.feature │ │ ├── login-successful.feature │ │ ├── form-create-account.feature │ │ └── site.feature │ ├── features │ │ ├── account │ │ │ ├── create-form-a11y.feature │ │ │ └── create-account.feature │ │ ├── page │ │ │ ├── edit-save.feature │ │ │ └── source-edit-save.feature │ │ ├── change-language.feature │ │ └── extensions │ │ │ └── multilang.feature │ └── local │ │ └── config.json ├── publish │ ├── local │ │ └── config.json │ └── features │ │ └── publish.feature ├── gcpedia-docker-address.sh ├── staging │ └── features │ │ └── files │ │ ├── upload-file.feature │ │ └── upload-large-file.feature └── package.json ├── extensions ├── Sudo │ ├── .gitignore │ ├── i18n │ │ ├── ca.json │ │ ├── gv.json │ │ ├── krc.json │ │ ├── scn.json │ │ ├── qu.json │ │ ├── tt-cyrl.json │ │ ├── nds.json │ │ ├── tet.json │ │ ├── ne.json │ │ ├── ce.json │ │ ├── te.json │ │ ├── fy.json │ │ ├── yi.json │ │ ├── bg.json │ │ ├── vi.json │ │ ├── ga.json │ │ ├── eu.json │ │ ├── az.json │ │ ├── cs.json │ │ ├── roa-tara.json │ │ ├── diq.json │ │ ├── ps.json │ │ ├── ku-latn.json │ │ ├── mt.json │ │ ├── et.json │ │ ├── hu.json │ │ ├── ur.json │ │ ├── lv.json │ │ ├── af.json │ │ ├── de-formal.json │ │ ├── ka.json │ │ ├── ta.json │ │ ├── ar.json │ │ ├── lb.json │ │ ├── sv.json │ │ ├── ro.json │ │ ├── zh-hans.json │ │ ├── zh-hant.json │ │ ├── si.json │ │ ├── ko.json │ │ ├── ja.json │ │ ├── he.json │ │ ├── frp.json │ │ ├── nb.json │ │ ├── ru.json │ │ ├── bs.json │ │ ├── id.json │ │ ├── fa.json │ │ ├── fi.json │ │ ├── gl.json │ │ ├── br.json │ │ ├── mk.json │ │ ├── en.json │ │ ├── ms.json │ │ ├── pt-br.json │ │ ├── hsb.json │ │ ├── es.json │ │ ├── it.json │ │ ├── pl.json │ │ ├── pt.json │ │ ├── nl.json │ │ ├── uk.json │ │ ├── pms.json │ │ ├── oc.json │ │ ├── gsw.json │ │ ├── fr.json │ │ ├── be-tarask.json │ │ ├── tl.json │ │ ├── ia.json │ │ ├── de.json │ │ ├── ksh.json │ │ └── qqq.json │ ├── .gitreview │ ├── Sudo.alias.php │ ├── Sudo.i18n.php │ └── Sudo.php ├── SidebarTitleText │ ├── i18n │ │ ├── en.json │ │ └── fr.json │ ├── extension.json │ └── SidebarTitleTextHooks.php ├── GC_tcDisclaimer │ ├── GCPEDIAMainblur.jpg │ ├── GC_Disclaimer_add_user_id.sql │ ├── GC_Disclaimer.sql │ ├── GC_Disclaimer_Pkey_user_id.sql │ ├── dbdisclaimer.php │ ├── Addaccepted.php │ └── updateEmailApi.php ├── awards │ └── readme.txt ├── SkinTweaksGCpedia │ ├── resources │ │ ├── images │ │ │ ├── favicon.ico │ │ │ ├── favicon-mobile.png │ │ │ ├── GCpedia_icon_slogan_Eng.png │ │ │ └── GCpedia_icon_slogan_Fra.png │ │ ├── css │ │ │ └── skintweaksgcpedia.css │ │ └── js │ │ │ ├── newUserPage.js │ │ │ └── skintweaksgcpedia.js │ ├── wet-boew │ │ └── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ ├── i18n │ │ ├── en.json │ │ └── fr.json │ ├── extension.json │ └── SkinTweaksGCpediaHooks.php ├── SkinTweaksGCwiki │ ├── resources │ │ ├── images │ │ │ ├── message_icon.png │ │ │ ├── collab_logo_en.png │ │ │ ├── collab_logo_fr.png │ │ │ ├── mini_wiki_icon.png │ │ │ ├── collab_logo_en_1x.png │ │ │ ├── collab_logo_fr_1x.png │ │ │ └── mini_collab_icon.png │ │ ├── js │ │ │ └── skintweaksgcwiki.js │ │ └── css │ │ │ └── skintweaksgcwiki.css │ ├── i18n │ │ ├── en.json │ │ └── fr.json │ ├── extension.json │ └── SkinTweaksGCwikiHooks.php ├── GC_Messages │ └── GC_Messages.php ├── MagicNumberedHeadings │ ├── MagicNumberedHeadings.i18n.php │ └── MagicNumberedHeadings.php ├── GCUserCreateForm │ ├── resources │ │ ├── js │ │ │ ├── gcuserloginform.js │ │ │ └── gcusercreateform.js │ │ └── css │ │ │ └── gcusercreateform.css │ ├── src │ │ ├── domains │ │ │ ├── readme.txt │ │ │ └── DomainList.php │ │ └── api │ │ │ ├── charFilterAJAX.php │ │ │ ├── findUsernameAJAX.php │ │ │ └── generateUsernameAJAX.php │ ├── extension.json │ └── i18n │ │ ├── en.json │ │ └── fr.json ├── README ├── EmailUpdate │ ├── EmailUpdate.php │ └── EmailUpdate.i18n.php ├── MagicNoNumberedHeadings │ ├── README │ ├── MagicNoNumberedHeadings.php │ └── MagicNoNumberedHeadings.i18n.magic.php ├── GCRandomImage │ └── GCRandomImage.php ├── ROTedits │ └── ROTedits.php └── Multilang │ └── multilang.php ├── .gitattributes ├── .nojekyll ├── .htaccess ├── CODE_OF_CONDUCT.md ├── .stylelintrc.json ├── site └── mediawiki.ini ├── .eslintrc.json ├── .azure ├── env-init.sh ├── dev-setup.sh └── nginx.config ├── composer.local.json ├── .bicep └── PR │ ├── modules │ ├── db_existing_server.bicep │ └── acr_pull_role.bicep │ └── test-instance-setup.bicep ├── Dockerfile.parsoid ├── azure-pipelines-sync.yaml ├── README.md ├── pipelines ├── azp-db-import.yaml └── deploy_mediawiki_version.yaml ├── .gitignore ├── kubernetes ├── persist.yaml └── gcpedia-kube.yaml ├── init ├── checkDB.php └── init.sh ├── docker-compose.yml ├── azure-pipelines-PR-cleanup.yaml ├── brigade.js ├── Dockerfile ├── setup_mediawiki.sh ├── azure-pipelines-deploy.yaml ├── azure-pipelines-PR.yaml └── .github └── workflows └── e2e-tests-reviews.yml /haibun/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | capture 3 | 4 | -------------------------------------------------------------------------------- /extensions/Sudo/.gitignore: -------------------------------------------------------------------------------- 1 | .svn 2 | *~ 3 | *.kate-swp 4 | .*.swp 5 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh eol=lf 2 | *.icc binary 3 | *.webp binary 4 | *.mp3 binary -------------------------------------------------------------------------------- /extensions/SidebarTitleText/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "sidebartitletext-desc": "" 3 | } -------------------------------------------------------------------------------- /extensions/SidebarTitleText/i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "sidebartitletext-desc": "" 3 | } -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- 1 | This is present to prevent github pages from rendering the wrong README file. 2 | 3 | -------------------------------------------------------------------------------- /haibun/e2e/backgrounds/admin-credentials.feature: -------------------------------------------------------------------------------- 1 | 2 | Set Username to "admin" 3 | Set User password to "adminpassword" 4 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | php_value upload_max_filesize 32M 2 | php_value post_max_size 32M 3 | 4 | EnableSendfile On 5 | EnableMMAP On 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct). 2 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "SMP" 5 | ] 6 | }, 7 | "sudo-reason": "Motiu:" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/gv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Shimmin Beg" 5 | ] 6 | }, 7 | "sudo-reason": "Fa:" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/krc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Iltever" 5 | ] 6 | }, 7 | "sudo-form": "Кириу:" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/scn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Gmelfi" 5 | ] 6 | }, 7 | "sudo-submit": "Trasi" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/qu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "AlimanRuna" 5 | ] 6 | }, 7 | "sudo-submit": "Yaykuy" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/tt-cyrl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ilnur efende" 5 | ] 6 | }, 7 | "sudo-form": "Керү" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/GC_tcDisclaimer/GCPEDIAMainblur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/GC_tcDisclaimer/GCPEDIAMainblur.jpg -------------------------------------------------------------------------------- /extensions/Sudo/i18n/nds.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joachim Mos" 5 | ] 6 | }, 7 | "sudo-user": "Brukernaam:" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/tet.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MF-Warburg" 5 | ] 6 | }, 7 | "sudo-user": "Naran uza-na'in:" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ne.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "RajeshPandey" 5 | ] 6 | }, 7 | "sudo-user": "प्रयोगकर्ता नाम:" 8 | } 9 | -------------------------------------------------------------------------------- /extensions/awards/readme.txt: -------------------------------------------------------------------------------- 1 | require_once("extensions/awards/awards.php"); 2 | // for bot edits, etc. 3 | $wgEnableAPI = true; 4 | $wgEnableWriteAPI = true; -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "stylelint-config-wikimedia", 3 | "rules": { 4 | "no-descending-specificity": null, 5 | 6 | "selector-no-id": null 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /extensions/Sudo/.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=gerrit.wikimedia.org 3 | port=29418 4 | project=mediawiki/extensions/Sudo.git 5 | defaultbranch=REL1_26 6 | defaultrebase=0 7 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/resources/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCpedia/resources/images/favicon.ico -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/images/message_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCwiki/resources/images/message_icon.png -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/resources/images/favicon-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCpedia/resources/images/favicon-mobile.png -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/images/collab_logo_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCwiki/resources/images/collab_logo_en.png -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/images/collab_logo_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCwiki/resources/images/collab_logo_fr.png -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/images/mini_wiki_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCwiki/resources/images/mini_wiki_icon.png -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ce.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Умар" 5 | ] 6 | }, 7 | "sudo-user": "Декъашхочун цӀе:", 8 | "sudo-reason": "Бахьана:" 9 | } 10 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/te.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Veeven" 5 | ] 6 | }, 7 | "sudo-user": "వాడుకరి పేరు:", 8 | "sudo-reason": "కారణం:" 9 | } 10 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/images/collab_logo_en_1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCwiki/resources/images/collab_logo_en_1x.png -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/images/collab_logo_fr_1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCwiki/resources/images/collab_logo_fr_1x.png -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/images/mini_collab_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCwiki/resources/images/mini_collab_icon.png -------------------------------------------------------------------------------- /extensions/Sudo/i18n/fy.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robin0van0der0vliet" 5 | ] 6 | }, 7 | "sudo-user": "Brûkersnamme:", 8 | "sudo-reason": "Reden:" 9 | } 10 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/yi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "פוילישער" 5 | ] 6 | }, 7 | "sudo-user": "באַניצער נאָמען:", 8 | "sudo-submit": "אַרײַנלאגירן" 9 | } 10 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/bg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "පසිඳු කාවින්ද" 5 | ] 6 | }, 7 | "sudo-user": "Потребителско име:", 8 | "sudo-reason": "Причина:" 9 | } 10 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/resources/images/GCpedia_icon_slogan_Eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCpedia/resources/images/GCpedia_icon_slogan_Eng.png -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/resources/images/GCpedia_icon_slogan_Fra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCpedia/resources/images/GCpedia_icon_slogan_Fra.png -------------------------------------------------------------------------------- /site/mediawiki.ini: -------------------------------------------------------------------------------- 1 | upload_max_filesize = 32M 2 | post_max_size = 32M 3 | 4 | date.timezone = UTC 5 | 6 | display_errors = On 7 | display_startup_errors = On 8 | error_reporting = E_ALL 9 | 10 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/wet-boew/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCpedia/wet-boew/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/wet-boew/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCpedia/wet-boew/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/wet-boew/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gctools-outilsgc/gcpedia/HEAD/extensions/SkinTweaksGCpedia/wet-boew/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /extensions/Sudo/i18n/vi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "පසිඳු කාවින්ද" 5 | ] 6 | }, 7 | "sudo-user": "Tên người dùng:", 8 | "sudo-reason": "Lý do:", 9 | "sudo-submit": "Đăng nhập" 10 | } 11 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ga.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "පසිඳු කාවින්ද" 5 | ] 6 | }, 7 | "sudo-user": "Ainm úsáideora:", 8 | "sudo-reason": "Fáth:", 9 | "sudo-submit": "Logáil isteach" 10 | } 11 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/eu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "පසිඳු කාවින්ද" 5 | ] 6 | }, 7 | "sudo-user": "Erabiltzaile izena:", 8 | "sudo-reason": "Arrazoia:", 9 | "sudo-submit": "Saioa hasi" 10 | } 11 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/az.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Cekli829", 5 | "Wertuose" 6 | ] 7 | }, 8 | "sudo-user": "İstifadəçi adı:", 9 | "sudo-reason": "Səbəb:", 10 | "sudo-submit": "Daxil ol" 11 | } 12 | -------------------------------------------------------------------------------- /haibun/e2e/backgrounds/form-login.feature: -------------------------------------------------------------------------------- 1 | Concat Site address and "Special:UserLogin" as Log in 2 | 3 | Set Login input to //*[@id="wpName1"] 4 | Set Password input to //*[@id="wpPassword1"] 5 | Set Log in button to //*[@id="wpLoginAttempt"] 6 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/cs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Vks" 5 | ] 6 | }, 7 | "sudo-submit": "Přihlásit se", 8 | "sudo-error-sudo-invaliduser": "Neplatné uživatelské jméno", 9 | "sudo-logpagename": "Sudo log" 10 | } 11 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/roa-tara.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joetaras" 5 | ] 6 | }, 7 | "sudo-form": "Tràse jndr'à:", 8 | "sudo-reason": "Mutive:", 9 | "sudo-submit": "Tràse", 10 | "sudo-unsudo-submit": "Tuèrne" 11 | } 12 | -------------------------------------------------------------------------------- /extensions/GC_tcDisclaimer/GC_Disclaimer_add_user_id.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- Adds user_id field to the accepted table 3 | -- 4 | 5 | ALTER TABLE accepted ADD `user_id` int NOT NULL; 6 | UPDATE accepted a SET `user_id` = (select u.user_id from user u where u.user_name = a.Username); 7 | -------------------------------------------------------------------------------- /haibun/e2e/backgrounds/login-successful.feature: -------------------------------------------------------------------------------- 1 | 2 | Go to the Log in webpage 3 | Input Username for Login input 4 | Input User password for Password input 5 | Click on Log in button 6 | 7 | Logged in, should redirect to the Main page. 8 | 9 | Be on the Main webpage 10 | -------------------------------------------------------------------------------- /extensions/GC_tcDisclaimer/GC_Disclaimer.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- Adds necessary table to the database 3 | -- 4 | 5 | CREATE TABLE IF NOT EXISTS tc_accepted ( 6 | `user_id` int NOT NULL, 7 | `username` varchar(100), 8 | `date` varchar(10), 9 | PRIMARY KEY (`user_id`) 10 | ) -------------------------------------------------------------------------------- /extensions/Sudo/i18n/diq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Erdemaslancan", 5 | "Mirzali" 6 | ] 7 | }, 8 | "sudo-user": "Nameyê karberi:", 9 | "sudo-reason": "Sebeb:", 10 | "sudo-submit": "Cıkewtış", 11 | "sudo-logpagename": "Sudo kewê" 12 | } 13 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ps.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ahmed-Najib-Biabani-Ibrahimkhel" 5 | ] 6 | }, 7 | "sudo-user": "کارن-نوم:", 8 | "sudo-reason": "سبب:", 9 | "sudo-submit": "ننوتل", 10 | "sudo-error-sudo-invaliduser": "ناسم کارن-نوم" 11 | } 12 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ku-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "George Animal" 5 | ] 6 | }, 7 | "sudo-user": "Navê bikarhêner:", 8 | "sudo-reason": "Sedem:", 9 | "sudo-submit": "Têketin", 10 | "sudo-error-sudo-nonexistent": "Ev bikarhêner tune ye" 11 | } 12 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "wikimedia", 3 | "env": { 4 | "browser": true, 5 | "jquery": true 6 | }, 7 | "globals": { 8 | "require": false, 9 | "module": false, 10 | "mediaWiki": false, 11 | "OO": false 12 | }, 13 | "rules": { 14 | "dot-notation": 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "skintweaksgcwiki-desc": "Some UI changes for gcwiki", 3 | "empty-language-selector-body": "Page contents not supported in other languages.", 4 | "wet:logofile": "collab_logo_en.png", 5 | "wet:baraccount": "GCaccount", 6 | "gctools": "GCtools" 7 | } -------------------------------------------------------------------------------- /extensions/Sudo/i18n/mt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chrisportelli" 5 | ] 6 | }, 7 | "unsudo": "Lura għall-kont tiegħek", 8 | "sudo-personal-unsudo": "Lura għall-kont tiegħek", 9 | "sudo-form": "Idħol f':", 10 | "sudo-user": "Isem tal-utent:", 11 | "sudo-reason": "Raġuni:" 12 | } 13 | -------------------------------------------------------------------------------- /extensions/GC_tcDisclaimer/GC_Disclaimer_Pkey_user_id.sql: -------------------------------------------------------------------------------- 1 | -- 2 | -- Sets user_id field as the primary key 3 | -- 4 | 5 | DELETE FROM a USING accepted a WHERE a.user_id IN (SELECT user_id FROM (SELECT user_id FROM accepted) c GROUP BY c.user_id HAVING count(*) > 1); 6 | ALTER TABLE accepted ADD CONSTRAINT PRIMARY KEY (`user_id`); -------------------------------------------------------------------------------- /.azure/env-init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | apt-get update && apt-get install -y --no-install-recommends memcached imagemagick libicu-dev libonig-dev htmldoc ffmpeg 4 | cp /home/site/wwwroot/gcwiki/.azure/nginx.config /etc/nginx/sites-enabled/default 5 | service nginx reload 6 | 7 | # any php extensions need to be installed or activated? 8 | -------------------------------------------------------------------------------- /haibun/e2e/features/account/create-form-a11y.feature: -------------------------------------------------------------------------------- 1 | Feature: Account Creation Page Accessibility 2 | 3 | Scenario: Verify the create account page is accessible 4 | 5 | go to the "http://wiki.local/Main_Page" webpage 6 | then click by text "Create account" 7 | 8 | page is accessible accepting serious 0 and moderate 0 -------------------------------------------------------------------------------- /haibun/publish/local/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "mode": "all", 3 | "steppers": [ 4 | "~@haibun/domain-storage/build/domain-storage", 5 | "~@haibun/out-review/build/out-reviews-stepper", 6 | "~@haibun/storage-fs/build/storage-fs", 7 | "vars", 8 | "credentials", 9 | "haibun" 10 | ], 11 | "features": {} 12 | } -------------------------------------------------------------------------------- /extensions/Sudo/i18n/et.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Avjoska" 5 | ] 6 | }, 7 | "sudo-user": "Kasutajanimi:", 8 | "sudo-reason": "Põhjus:", 9 | "sudo-submit": "Logi sisse", 10 | "sudo-error-sudo-invaliduser": "Vigane kasutajanimi", 11 | "sudo-error-sudo-nonexistent": "Sellist kasutajat ei ole" 12 | } 13 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "skintweaksgcwiki-desc": "Quelques changements de l'IU pour gcwiki", 3 | "empty-language-selector-body": "Le contenu de la page n’est pas pris en charge dans d’autres langues.", 4 | "wet:logofile": "collab_logo_fr.png", 5 | "wet:baraccount": "GCcompte", 6 | "gctools": "outilsGC" 7 | } -------------------------------------------------------------------------------- /extensions/Sudo/i18n/hu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dani" 5 | ] 6 | }, 7 | "sudo-personal-unsudo": "Vissza a saját fiókodhoz", 8 | "sudo-form": "Bejelentkezés ide:", 9 | "sudo-user": "Felhasználónév:", 10 | "sudo-reason": "Ok:", 11 | "sudo-submit": "Bejelentkezés", 12 | "sudo-unsudo-submit": "Visszatérés" 13 | } 14 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ur.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "පසිඳු කාවින්ද" 5 | ] 6 | }, 7 | "unsudo": "اپنے اکاؤنٹ پر واپس", 8 | "sudo-personal-unsudo": "اپنے اکاؤنٹ پر واپس", 9 | "sudo-user": "صارف کا نام:", 10 | "sudo-reason": "وجہ:", 11 | "sudo-submit": "لاگ ان کریں", 12 | "sudo-unsudo-submit": "واپس آ جائیں" 13 | } 14 | -------------------------------------------------------------------------------- /composer.local.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "platform": { 4 | "php": "8.1" 5 | } 6 | }, 7 | "require": { 8 | "mediawiki/pluggable-auth": "^7.1" 9 | }, 10 | "extra": { 11 | "merge-plugin": { 12 | "include": [ 13 | "extensions/OpenIDConnect/composer.json", 14 | "extensions/TimedMediaHandler/composer.json" 15 | ] 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /haibun/gcpedia-docker-address.sh: -------------------------------------------------------------------------------- 1 | docker network inspect gcpedia_default | node -e "process.stdin.resume();process.stdin.setEncoding('utf8');let data='';process.stdin.on('data', chunk => data += chunk);process.stdin.on('end', () => {const containers = Object.values(JSON.parse(data)[0].Containers || {}).filter(c => !c.Name.match(/db/)); containers.forEach(c => console.log(c.IPv4Address.replace(/\/.*/, '')));});" 2 | -------------------------------------------------------------------------------- /extensions/GC_Messages/GC_Messages.php: -------------------------------------------------------------------------------- 1 | __FILE__, 5 | 'name' => "GC_Messages", 6 | 'description' => "Messages extension to avoid modifying core languages files.", 7 | 'version' => 1.0, 8 | 'url' => "http://www.mediawiki.org/wiki/Manual:Developing_extensions", 9 | ); 10 | 11 | $wgExtensionMessagesFiles['GC_Messages'] = dirname( __FILE__ ) . '/GC_Messages.i18n.php'; -------------------------------------------------------------------------------- /extensions/Sudo/i18n/lv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Papuass" 5 | ] 6 | }, 7 | "sudo-form": "Pieslēgties:", 8 | "sudo-user": "Lietotājvārds:", 9 | "sudo-reason": "Iemesls:", 10 | "sudo-submit": "Pieslēgties", 11 | "sudo-error-sudo-invaliduser": "Nederīgs lietotājvārds", 12 | "sudo-error-sudo-ip": "Nevar pieslēgties kā IP adrese", 13 | "sudo-error-sudo-nonexistent": "Šis lietotājs neeksistē" 14 | } 15 | -------------------------------------------------------------------------------- /.bicep/PR/modules/db_existing_server.bicep: -------------------------------------------------------------------------------- 1 | 2 | param dbServerName string 3 | param dbName string 4 | 5 | resource dbserver 'Microsoft.DBforMySQL/flexibleServers@2023-06-30' existing = { 6 | name: dbServerName 7 | } 8 | 9 | resource database 'Microsoft.DBforMySQL/flexibleServers/databases@2023-06-30' = { 10 | parent: dbserver 11 | name: dbName 12 | properties: { 13 | charset: 'utf8' 14 | collation: 'utf8_general_ci' 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /haibun/e2e/features/page/edit-save.feature: -------------------------------------------------------------------------------- 1 | Feature: Edit save rich editor page 2 | 3 | Backgrounds: site, form-login, admin-credentials, login-successful 4 | 5 | When I have a valid random username 6 | Concat "http://wiki.local/" and as Random visual 7 | 8 | Go to the Random visual webpage 9 | 10 | Click "Create" 11 | Click on Wiki editor 12 | Type "Test text" 13 | Click "Save page" 14 | Pause for 2s 15 | See "The page has been created." 16 | 17 | -------------------------------------------------------------------------------- /haibun/publish/features/publish.feature: -------------------------------------------------------------------------------- 1 | 2 | # History 3 | 4 | Create a history of all found reviews in the root directory. 5 | create found history 6 | 7 | # Reviews pages 8 | 9 | (Re-)create a page that finds all existing reviews and displays them. 10 | create reviews pages 11 | 12 | Only keep last couple reviews. 13 | 14 | clear reviews past 3 15 | 16 | Create the pre-populated function for the dashboard to index tracks. 17 | 18 | create indexer from tracks 19 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/af.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Naudefj" 5 | ] 6 | }, 7 | "unsudo": "Keer terug na u eie gebruiker", 8 | "sudo-personal-unsudo": "Keer terug na u eie gebruiker", 9 | "sudo-form": "Meld aan as:", 10 | "sudo-user": "Gebruikersnaam:", 11 | "sudo-reason": "Rede:", 12 | "sudo-submit": "Aanmeld", 13 | "sudo-unsudo-submit": "Terug", 14 | "sudo-error": "Sudo-fout: $1", 15 | "sudo-error-sudo-invaliduser": "Ongeldige gebruikersnaam" 16 | } 17 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/de-formal.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kghbln" 5 | ] 6 | }, 7 | "sudo-unsudo": "Willkommen $1, Sie sind momentan als Benutzer „$2“ im Wiki angemeldet. Klicken Sie auf „{{int:sudo-unsudo-submit}}“, um zu Ihrem eigenen Benutzerkonto zurückzukehren.", 8 | "sudo-success": "Willkommen $1, Sie sind jetzt im Wiki als Benutzer „$2“ angemeldet.", 9 | "sudo-error-nosudo": "Sie scheinen nicht mit einem anderen Benutzerkonto angemeldet zu sein" 10 | } 11 | -------------------------------------------------------------------------------- /haibun/e2e/features/change-language.feature: -------------------------------------------------------------------------------- 1 | Feature: Language toggle 2 | 3 | Backgrounds: site 4 | 5 | Scenario: Switch from default English to French 6 | 7 | Go to the Main webpage 8 | In Language toggle, see "Français" 9 | Click on Language toggle 10 | In Language toggle, see "English" 11 | 12 | Scenario: Switch back to Français 13 | Go to the Main webpage 14 | In Language toggle, see "English" 15 | Click on Language toggle 16 | In Language toggle, see "Français" -------------------------------------------------------------------------------- /haibun/e2e/features/page/source-edit-save.feature: -------------------------------------------------------------------------------- 1 | Feature: Edit save source editor page 2 | 3 | Backgrounds: site, form-login, admin-credentials, login-successful 4 | 5 | When I have a valid random username 6 | Concat "http://wiki.local/" and as Random source 7 | 8 | Go to the Random source webpage 9 | 10 | Click "Create source" 11 | Click on Wiki editor 12 | Type "Test text" 13 | Click "Save page" 14 | Pause for 2s 15 | See "The page has been created." 16 | 17 | 18 | -------------------------------------------------------------------------------- /extensions/MagicNumberedHeadings/MagicNumberedHeadings.i18n.php: -------------------------------------------------------------------------------- 1 | array( 0, '__NUMBEREDHEADINGS__' ), 9 | ); 10 | 11 | $magicWords['de'] = array( 12 | 'MAG_NUMBEREDHEADINGS' => array( 0, '__ÜBERSCHRIFTENNUMMERIERUNG__' ), 13 | ); 14 | 15 | $magicWords['ksh'] = array( 16 | 'MAG_NUMBEREDHEADINGS' => array( 0, '__ÖVVERSCHRIFTENUMMERIERE__' ), 17 | ); -------------------------------------------------------------------------------- /haibun/e2e/local/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "mode": "all", 3 | "steppers": [ 4 | "~@haibun/domain-webpage/build/domain-webpage", 5 | "~@haibun/web-playwright/build/web-playwright", 6 | "~@haibun/domain-storage/build/domain-storage", 7 | "~@haibun/web-accessibility-axe/build/a11y-axe-stepper", 8 | "~@haibun/out-review/build/out-reviews-stepper", 9 | "~@haibun/storage-fs/build/storage-fs", 10 | "vars", 11 | "credentials", 12 | "haibun" 13 | ], 14 | "features": {} 15 | } 16 | -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/resources/js/gcuserloginform.js: -------------------------------------------------------------------------------- 1 | 2 | $( '#findUser' )[0].addEventListener( "click", (event) => { 3 | mw.loader.using( 'mediawiki.api', function () { 4 | ( new mw.Api() ).get( { 5 | action: 'findusernameajax', 6 | emailinput: document.getElementById('byEmail').value, 7 | } ).done( function ( data ) { 8 | document.getElementById('wpName1').value = data.findusernameajax; 9 | } ); 10 | } ); 11 | }, 12 | true, 13 | ); -------------------------------------------------------------------------------- /.azure/dev-setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # automated install 4 | if [ $INIT ] 5 | then 6 | rm /home/site/wwwroot/gcwiki/LocalSettings.php 7 | php /home/site/wwwroot/gcwiki/maintenance/dockerInstall.php 8 | 9 | echo "install complete, swapping in env-based LocalSettings.php" 10 | cp /home/site/wwwroot/gcwiki/docker/LocalSettings.php.docker /home/site/wwwroot/gcwiki/LocalSettings.php 11 | 12 | # run script with the full config 13 | echo "running update maintenance script" 14 | php /home/site/wwwroot/gcwiki/maintenance/update.php -q 15 | fi 16 | -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/resources/css/gcusercreateform.css: -------------------------------------------------------------------------------- 1 | 2 | #userlogin2{ 3 | width: 440px; 4 | } 5 | 6 | #mw-input-wpemailname{ 7 | float: left; 8 | width: 40%; 9 | } 10 | .mw-input-email-symbol div{ 11 | margin: 7px 1% 2px 2%;; 12 | float: left; 13 | width: 4%; 14 | } 15 | 16 | #mw-input-wpemaildomaintext{ 17 | float: left; 18 | width: 40%; 19 | } 20 | #mw-input-wpemaildomain{ 21 | float: left; 22 | width: 40%; 23 | position: relative; 24 | top: 3px; 25 | } 26 | 27 | #registration-faq-head{ 28 | font-size: medium; 29 | } -------------------------------------------------------------------------------- /extensions/GC_tcDisclaimer/dbdisclaimer.php: -------------------------------------------------------------------------------- 1 | query($queryString); 18 | 19 | 20 | /* 21 | $query = "INSERT INTO `accepted` (Username) VALUES ('Ilia.Salem')"; 22 | 23 | $result = $dbr->doQuery($query); 24 | 25 | */ 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | ?> -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ka.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "David1010" 5 | ] 6 | }, 7 | "unsudo": "თქვენ ანგარიშზე დაბრუნება", 8 | "sudo-personal-unsudo": "თქვენ ანგარიშზე დაბრუნება", 9 | "sudo-form": "შესვლა:", 10 | "sudo-user": "მომხმარებლის სახელი:", 11 | "sudo-reason": "მიზეზი:", 12 | "sudo-submit": "შესვლა", 13 | "sudo-unsudo-submit": "დაბრუნება", 14 | "sudo-error": "სუდო-შეცდომა: $1", 15 | "sudo-error-sudo-invaliduser": "არასწორი მომხმარებლის სახელი", 16 | "sudo-error-sudo-nonexistent": "ეს მომხმარებელი არ არსებობს", 17 | "sudo-logpagename": "სუდო-ჟურნალი" 18 | } 19 | -------------------------------------------------------------------------------- /extensions/SidebarTitleText/extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SidebarTitleText", 3 | "version": "1.0", 4 | "author": "GCtools", 5 | "url": "https://github.com/gctools-outilsgc/gcpedia", 6 | "descriptionmsg": "sidebartitletext-desc", 7 | "type": "other", 8 | "requires": { 9 | "MediaWiki": ">= 1.40.0" 10 | }, 11 | "MessagesDirs": { 12 | "SidebarTitleText": [ 13 | "i18n" 14 | ] 15 | }, 16 | "AutoloadClasses": { 17 | "SidebarTitleTextHooks": "SidebarTitleTextHooks.php" 18 | }, 19 | "Hooks": { 20 | "SkinBuildSidebar": "SidebarTitleTextHooks::onSkinBuildSidebar" 21 | }, 22 | "manifest_version": 2 23 | } 24 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/js/skintweaksgcwiki.js: -------------------------------------------------------------------------------- 1 | function addTopBar(){ 2 | 3 | var header = document.createElement('div'); 4 | header.id = "collab-fip-header"; 5 | 6 | header.innerHTML = ' \ 7 |
GCwiki
'; 8 | 9 | document.body.insertBefore(header, document.body.firstChild); 10 | } 11 | 12 | addTopBar(); -------------------------------------------------------------------------------- /haibun/e2e/backgrounds/form-create-account.feature: -------------------------------------------------------------------------------- 1 | Set Institution email to //*[@id="mw-input-wpemailname"] 2 | Set Institution to //*[@id="mw-input-wpemaildomain"] 3 | 4 | Set Create password input to //*[@id="wpPassword2"] 5 | Set Confirm password input to //*[@id="wpRetype"] 6 | Set Real name to //*[@id="wpRealName"] 7 | 8 | Set Accept terms to //*[@id="mw-input-wpterms_checkbox"] 9 | Set Create account to //*[@id="wpCreateaccount"] 10 | 11 | Set Notification title to //*[@id="mw-notification-area"]/div/div[1] 12 | Set User page created link to //*[@id="mw-notification-area"]/div/div[2]/div/a 13 | 14 | Set User page to "http://wiki.local/User:Rnd" 15 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ta.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Karthi.dr", 5 | "Shanmugamp7", 6 | "மதனாஹரன்" 7 | ] 8 | }, 9 | "sudo": "மற்றொரு பயனர் கணக்கில் புகுபதிகை செய்யவும்", 10 | "unsudo": "உங்கள் கணக்கிற்கு திரும்பவும்", 11 | "sudo-personal-unsudo": "உங்கள் கணக்கிற்கு திரும்பவும்", 12 | "sudo-user": "பயனர் பெயர்:", 13 | "sudo-reason": "காரணம்:", 14 | "sudo-submit": "புகுபதிகை", 15 | "sudo-unsudo-submit": "திரும்பு", 16 | "sudo-error": "போலிப் பிழை: $1", 17 | "sudo-error-sudo-invaliduser": "செல்லாத பயனர்பெயர்", 18 | "sudo-error-sudo-ip": "ஐபி முகவரியாக புகுபதிகை செய்ய இயலாது", 19 | "sudo-error-sudo-nonexistent": "அந்த பயனர் இல்லை" 20 | } 21 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "OsamaK", 5 | "روخو" 6 | ] 7 | }, 8 | "sudo": "تسجيل الدخول بحساب مستخدم آخر", 9 | "sudo-personal-unsudo": "عودة إلى حسابك", 10 | "sudo-form": "تسجيل الدخول إلى:", 11 | "sudo-user": "اسم المستخدم:", 12 | "sudo-reason": "السبب:", 13 | "sudo-submit": "تسجيل الدخول", 14 | "sudo-unsudo-submit": "تراجع", 15 | "sudo-success": "مرحبا $1, انت قمت الان بتسجيل الدخول الى الويكي باسم $2.", 16 | "sudo-error-sudo-invaliduser": "اسم المستخدم غير صحيح", 17 | "sudo-error-sudo-nonexistent": "ذلك المستخدم غير موجود", 18 | "sudo-logpagename": "سجل الأمر Sudo", 19 | "right-sudo": "تسجيل الدخول بحساب مستخدم آخر" 20 | } 21 | -------------------------------------------------------------------------------- /Dockerfile.parsoid: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:jessie 2 | 3 | RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - 4 | RUN apt-get update 5 | RUN apt-get install apt-transport-https 6 | RUN apt-get install -y nodejs 7 | 8 | RUN apt-key advanced --keyserver keys.gnupg.net --recv-keys 90E9F83F22250DD7 9 | 10 | RUN echo "deb https://releases.wikimedia.org/debian jessie-mediawiki main" | tee /etc/apt/sources.list.d/parsoid.list 11 | 12 | RUN apt-get update 13 | RUN apt-get install -y parsoid 14 | 15 | WORKDIR /etc/mediawiki/parsoid 16 | RUN sed -i 's/localhost\/w/gcpedia/' config.yaml 17 | 18 | EXPOSE 8000 19 | 20 | ENTRYPOINT ["/usr/bin/nodejs", "/usr/lib/parsoid/src/bin/server.js", "> /dev/stdout"] 21 | -------------------------------------------------------------------------------- /haibun/staging/features/files/upload-file.feature: -------------------------------------------------------------------------------- 1 | Feature: upload small file 2 | 3 | Backgrounds: site, form-login, admin-credentials, login-successful 4 | 5 | When I have a valid random username 6 | When I have a valid random username 7 | Concat and ".txt" as Random file 8 | Create file at /tmp/foo.txt with 9 | Concat "File:" and Random file as Wiki file 10 | 11 | Go to the File upload webpage 12 | Upload file /tmp/foo.txt using Choose file 13 | Input Random file for Destination filename 14 | Click on Upload file button 15 | 16 | # In Download link, see Random file 17 | Click on Download link 18 | See 19 | 20 | -------------------------------------------------------------------------------- /azure-pipelines-sync.yaml: -------------------------------------------------------------------------------- 1 | trigger: 2 | - main 3 | 4 | resources: 5 | repositories: 6 | - repository: gcpedia 7 | type: git 8 | name: GCTools/gcpedia 9 | 10 | pool: 11 | vmImage: ubuntu-latest 12 | jobs: 13 | - job: sync 14 | uses: 15 | repositories: 16 | - gcpedia 17 | steps: 18 | - script: | 19 | echo Sync azure repo 20 | git clone --mirror https://github.com/gctools-outilsgc/$REPO_NAME Sync_directory 21 | cd Sync_directory 22 | git fetch --tags 23 | git push --all --prune --force https://GCTools:$(System.AccessToken)@dev.azure.com/tbs-sct/GCTools/_git/$REPO_NAME 24 | env: 25 | REPO_NAME: "gcpedia" 26 | displayName: 'Sync repo' 27 | -------------------------------------------------------------------------------- /haibun/e2e/backgrounds/site.feature: -------------------------------------------------------------------------------- 1 | 2 | Set Language toggle to //*[@id="header-lang-toggle"] 3 | 4 | Set Site address to "http://wiki.local/" 5 | 6 | Concat Site address and "Special:UserLogin" as Log in 7 | Concat Site address and "Main_Page" as Main 8 | Concat Site address and Special:Upload as File upload 9 | 10 | Set Login input to //*[@id="wpName1"] 11 | Set Password input to //*[@id="wpPassword1"] 12 | Set Log in button to //*[@id="wpLoginAttempt"] 13 | 14 | Set Wiki editor to //*[@id="wpTextbox1"] 15 | 16 | Set Destination filename to //*[@id="wpDestFile"] 17 | Set Choose file to //*[@id="wpUploadFile"] 18 | Set Upload file button to //*[@id="mw-upload-form"]/span/input 19 | Set Download link to ".dangerousLink > a" 20 | -------------------------------------------------------------------------------- /haibun/e2e/features/extensions/multilang.feature: -------------------------------------------------------------------------------- 1 | 2 | Feature: Multilang 3 | 4 | Backgrounds: site, form-login, admin-credentials, login-successful 5 | 6 | When I have a valid random username 7 | Concat "http://wiki.local/" and as Random mulitlang 8 | Go to the Random mulitlang webpage 9 | 10 | Click "Create" 11 | Click on Wiki editor 12 | type "" 13 | Press Enter 14 | type "@en|English text" 15 | Press Enter 16 | type "@fr|Texte français" 17 | Press Enter 18 | type "" 19 | pause for 1s 20 | Press Escape 21 | Click "Save Page" 22 | see "English text" 23 | Click on Language toggle 24 | pause for 1s 25 | See "Texte français" 26 | Click on Language toggle 27 | pause for 1s 28 | See "English text" 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/lb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robby" 5 | ] 6 | }, 7 | "sudo": "Mat engem anere Benotzerkont aloggen", 8 | "unsudo": "Zréck op Äre Benotzerkont", 9 | "sudo-personal-unsudo": "Zréck op Äre Benotzerkont", 10 | "sudo-form": "Aloggen als:", 11 | "sudo-user": "Benotzernumm:", 12 | "sudo-reason": "Grond:", 13 | "sudo-submit": "Aloggen", 14 | "sudo-unsudo-submit": "Zréck", 15 | "sudo-error": "Sudo-Feeler: $1", 16 | "sudo-error-sudo-invaliduser": "Ongëltege Benotzernumm", 17 | "sudo-error-sudo-ip": "Däerf sech nat mat enger IP-Adress umellen", 18 | "sudo-error-sudo-nonexistent": "Dee Benotzer gëtt et net.", 19 | "sudo-logpagename": "Sudo-Logbuch", 20 | "right-sudo": "Alogge mat engem anere sengem Benotzerkont" 21 | } 22 | -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/src/domains/readme.txt: -------------------------------------------------------------------------------- 1 | MasterDomainList.php 2 | --------------------- 3 | source file used to generate the domain list, this list needs to be manually kept up to date. 4 | 5 | 6 | DomainList.php 7 | --------------------- 8 | automatically generated output list based on MasterdomainList.php, this is the list of domains users will see. 9 | 10 | 11 | /maintenance/updateEmailDomains.php 12 | ------------------------------------- 13 | maintenance script which should be run on a regular basis. It automatically 14 | updates the DomainList.php array based on the number of emails currently in 15 | use in GCPEDIA. To change the threshold modify the following line: 16 | 17 | define("MIN_COUNT", 40); 18 | 19 | 20 | old-lists/ 21 | ------------- 22 | folder where old lists are archived incase an update fails and the previous list needs to be restored. 23 | -------------------------------------------------------------------------------- /haibun/staging/features/files/upload-large-file.feature: -------------------------------------------------------------------------------- 1 | Feature: upload 10M file 2 | 3 | Backgrounds: site, form-login, admin-credentials, login-successful 4 | 5 | When I have a valid random username 6 | When I have a valid random username 7 | Concat and ".txt" as Random large file 8 | Create 10M file at /tmp/foo.txt with 9 | Concat "File:" and Random large file as Wiki file 10 | 11 | Go to the File upload webpage 12 | Upload file /tmp/foo.txt using Choose file 13 | Input Random large file for Destination filename 14 | Click on Upload file button 15 | 16 | # In Download link, see Random large file 17 | Change links matching Download link to download 18 | Register download to /tmp/verify-foo.txt 19 | Click on Download link 20 | /tmp/foo.txt is the same as /tmp/verify-foo.txt 21 | 22 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jopparn", 5 | "Liftarn", 6 | "WikiPhoenix" 7 | ] 8 | }, 9 | "sudo": "Logga in på en annan användares konto", 10 | "unsudo": "Gå tillbaka till ditt konto", 11 | "sudo-personal-unsudo": "Gå tillbaka till ditt konto", 12 | "sudo-form": "Logga in:", 13 | "sudo-user": "Användarnamn:", 14 | "sudo-reason": "Anledning:", 15 | "sudo-submit": "Logga in", 16 | "sudo-unsudo-submit": "Gå tillbaka", 17 | "sudo-error": "Sudo-fel: $1", 18 | "sudo-error-sudo-invaliduser": "Ogiltigt användarnamn", 19 | "sudo-error-sudo-ip": "Kan inte logga in som en IP-adress", 20 | "sudo-error-sudo-nonexistent": "Denna användare finns inte", 21 | "sudo-error-sudo-self": "Kan inte bli dig själv med sudo", 22 | "sudo-logentry": "loggade in på $2s konto", 23 | "right-sudo": "Logga in på en annan användares konto" 24 | } 25 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "wet:lang3Code": "eng", 3 | "skintweaksgcpedia-desc": "Some UI changes for gcpedia", 4 | "gctools": "GCtools", 5 | "pedia": "pedia", 6 | "sidebar-actions": "Actions / Tools", 7 | "wet:gcintranetLink": "http://intranet.canada.ca/index-eng.asp?utm_source=gcpedia&utm_medium=gctools-banner&utm_campaign=generic", 8 | "wet:gcconnexLink": "http://gcconnex.gc.ca/", 9 | "wet:gccollabLink": "https://gccollab.ca/", 10 | "wet:barDirectory": "directory", 11 | "wet:gcdirectoryLink": "http://gcdirectory-gcannuaire.gc.ca/en/GCD/?pgid=002", 12 | "topbar:langlink": "Français", 13 | "searchsuggest-search-tools": "Search GCTools", 14 | "newuserpage-notification-title": "User page Created", 15 | "newuserpage-notification": "Your new user page has been created successfully. Edit it here" 16 | } -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Minisarm", 5 | "Stelistcristi" 6 | ] 7 | }, 8 | "sudo": "Autentificați-vă în contul de utilizator al altcuiva", 9 | "unsudo": "Reveniți la contul dumneavoastră", 10 | "sudo-personal-unsudo": "Reveniți la contul dumneavoastră", 11 | "sudo-form": "Autentificare la:", 12 | "sudo-user": "Nume de utilizator:", 13 | "sudo-reason": "Motiv:", 14 | "sudo-submit": "Autentificare", 15 | "sudo-unsudo": "Bine ați venit $1, sunteți în prezent autentificat pe wiki ca $2. Clic pe „{{int:sudo-unsudo-submit}}” pentru a vă întoarce la propriul dumneavoastră cont.", 16 | "sudo-unsudo-submit": "Înapoi", 17 | "sudo-success": "Bine ați venit $1, sunteți autentificat în wiki sub numele $2.", 18 | "sudo-error": "Eroare sudo: $1", 19 | "sudo-error-sudo-invaliduser": "Nume de utilizator incorect", 20 | "sudo-error-sudo-nonexistent": "Acel utilizator nu există" 21 | } 22 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "wet:lang3Code": "fra", 3 | "skintweaksgcpedia-desc": "Quelques changements de l'IU pour gcpedia", 4 | "gctools": "outilsGC", 5 | "pedia": "pédia", 6 | "sidebar-actions": "Actions / Outils", 7 | "wet:gcintranetLink": "http://intranet.canada.ca/index-fra.asp?utm_source=gcpedia&utm_medium=gctools-banner&utm_campaign=generic", 8 | "wet:gcconnexLink": "http://gcconnex.gc.ca/", 9 | "wet:gccollabLink": "https://gccollab.ca/", 10 | "wet:barDirectory": "annuaire", 11 | "wet:gcdirectoryLink": "http://gcannuaire-gcdirectory.gc.ca/fr/GCA/?pgid=002", 12 | "topbar:langlink": "English", 13 | "searchsuggest-search-tools": "Recherche sur les OutilsGC", 14 | "newuserpage-notification-title": "Page utilisateur créée", 15 | "newuserpage-notification": "Votre nouvelle page utilisateur a été créée avec succès. Modifiez-la ici" 16 | } -------------------------------------------------------------------------------- /.bicep/PR/modules/acr_pull_role.bicep: -------------------------------------------------------------------------------- 1 | targetScope = 'resourceGroup' 2 | 3 | param acrName string 4 | param appPrincipalId string 5 | 6 | resource acr 'Microsoft.ContainerRegistry/registries@2021-09-01' existing = { 7 | name: acrName 8 | } 9 | 10 | /* 11 | * acr app role for container pull 12 | */ 13 | @description('This is the built-in ACR pull User role. See https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#acrpull') 14 | resource useRoleDefinition 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' existing = { 15 | scope: acr 16 | name: '7f951dda-4ed3-4680-a7ca-43fe172d538d' 17 | } 18 | 19 | resource useRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { 20 | name: guid(resourceGroup().id, appPrincipalId, useRoleDefinition.id) 21 | scope: acr 22 | properties: { 23 | roleDefinitionId: useRoleDefinition.id 24 | principalId: appPrincipalId 25 | principalType: 'ServicePrincipal' 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SkinTweaksGCwiki", 3 | "version": "1.0", 4 | "author": "GCtools", 5 | "url": "https://github.com/gctools-outilsgc/gcpedia", 6 | "descriptionmsg": "skintweaksgcwiki-desc", 7 | "type": "other", 8 | "requires": { 9 | "MediaWiki": ">= 1.40.0" 10 | }, 11 | "MessagesDirs": { 12 | "SkinTweaksGCwiki": [ 13 | "i18n" 14 | ] 15 | }, 16 | "ResourceModules": { 17 | "ext.skintweaksgcwiki": { 18 | "styles": "css/skintweaksgcwiki.css", 19 | "scripts": "js/skintweaksgcwiki.js" 20 | } 21 | }, 22 | "ResourceFileModulePaths": { 23 | "localBasePath": "resources", 24 | "remoteExtPath": "SkinTweaksGCwiki/resources" 25 | }, 26 | "AutoloadClasses": { 27 | "SkinTweaksGCwikiHooks": "SkinTweaksGCwikiHooks.php" 28 | }, 29 | "Hooks": { 30 | "SkinBuildSidebar": "SkinTweaksGCwikiHooks::onSkinBuildSidebar", 31 | "BeforePageDisplay": "SkinTweaksGCwikiHooks::onBeforePageDisplay" 32 | }, 33 | "manifest_version": 2 34 | } 35 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/zh-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Hydra", 5 | "Liangent", 6 | "Liuxinyu970226", 7 | "Xiaomingyan", 8 | "Mywood", 9 | "Impersonator 1" 10 | ] 11 | }, 12 | "sudo": "登录其他用户的账户", 13 | "unsudo": "返回你的帐户", 14 | "sudo-desc": "允许sudo者以其他用户身份登录", 15 | "sudo-personal-unsudo": "返回你的账户", 16 | "sudo-form": "登录到:", 17 | "sudo-user": "用户名:", 18 | "sudo-reason": "原因:", 19 | "sudo-submit": "登录", 20 | "sudo-unsudo": "欢迎$1,您当前以$2的身份登录到wiki。单击“{{int:sudo-unsudo-submit}}”以返回到您自己的登录。", 21 | "sudo-unsudo-submit": "返回", 22 | "sudo-success": "欢迎$1,您当前已经以$2的身份登录到wiki。", 23 | "sudo-error": "Sudo错误:$1", 24 | "sudo-error-sudo-invaliduser": "无效用户名", 25 | "sudo-error-sudo-ip": "不能登录到IP地址", 26 | "sudo-error-sudo-nonexistent": "该用户不存在", 27 | "sudo-error-sudo-self": "无法sudo到您自己", 28 | "sudo-error-nosudo": "你似乎不在sudo登录中", 29 | "sudo-logpagename": "Sudo日志", 30 | "sudo-logpagetext": "这是所有使用sudo的日志。", 31 | "sudo-logentry": "登录$2的账户", 32 | "right-sudo": "登录到另一个用户的帐户" 33 | } 34 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/zh-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mark85296341", 5 | "Simon Shek", 6 | "LNDDYL", 7 | "Liuxinyu970226", 8 | "Cwlin0416" 9 | ] 10 | }, 11 | "sudo": "登入至另一個使用者的帳號", 12 | "unsudo": "返回到您的帳號", 13 | "sudo-desc": "允許sudo者以其他使用者身份登入", 14 | "sudo-personal-unsudo": "返回到您的帳號", 15 | "sudo-form": "登入至:", 16 | "sudo-user": "使用者名稱:", 17 | "sudo-reason": "原因:", 18 | "sudo-submit": "登入", 19 | "sudo-unsudo": "歡迎 $1 ,您當前以$2的身份登入到wiki。單擊“{{int:sudo-unsudo-submit}}”以返回到您自己的登入。", 20 | "sudo-unsudo-submit": "返回", 21 | "sudo-success": "歡迎$1,您當前已經以$2的身份登錄到wiki。", 22 | "sudo-error": "Sudo錯誤:$1", 23 | "sudo-error-sudo-invaliduser": "無效的使用者名稱", 24 | "sudo-error-sudo-ip": "不能登錄到IP地址", 25 | "sudo-error-sudo-nonexistent": "該使用者不存在", 26 | "sudo-error-sudo-self": "無法sudo到您自己", 27 | "sudo-error-nosudo": "你似乎不在sudo登錄中", 28 | "sudo-logpagename": "Sudo日誌", 29 | "sudo-logpagetext": "這是所有使用sudo的日誌。", 30 | "sudo-logentry": "登入到 $2 的帳號", 31 | "right-sudo": "登入到另一個使用者的帳戶" 32 | } 33 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/si.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "පසිඳු කාවින්ද" 5 | ] 6 | }, 7 | "sudo": "වෙනත් පරිශීලකයෙකුගේ ගිණුමකට ප්‍රවිෂ්ට වන්න", 8 | "unsudo": "ඔබේ ගිණුම වෙත ප්‍රත්‍යාගමනය කරන්න", 9 | "sudo-desc": "sudoers හට වෙනත් පරිශීලකයන් ලෙස ප්‍රවිෂ්ට වීමට ඉඩ දෙන්න", 10 | "sudo-personal-unsudo": "ඔබේ ගිණුම වෙත ප්‍රත්‍යාගමනය කරන්න", 11 | "sudo-form": "වෙත ප්‍රවිෂ්ට වන්න:", 12 | "sudo-user": "පරිශීලක නාමය:", 13 | "sudo-reason": "හේතුව:", 14 | "sudo-submit": "පිවිසෙන්න", 15 | "sudo-unsudo-submit": "ප්‍රත්‍යාගමනය", 16 | "sudo-error": "සුදෝ දෝෂය: $1", 17 | "sudo-error-sudo-invaliduser": "වලංගු නොවන පරිශීලක නාමය", 18 | "sudo-error-sudo-ip": "IP ලිපිනයක් ලෙස පිවිසිය නොහැක", 19 | "sudo-error-sudo-nonexistent": "එම පරිශිලකයා නොපවතියි", 20 | "sudo-error-sudo-self": "ඔබට sudo විය නොහැක", 21 | "sudo-logpagename": "සුදෝ ලොගය", 22 | "sudo-logpagetext": "මෙය සියලුම පරිශීලකයන්ගේ sudo හී ලොගයකි.", 23 | "sudo-logentry": "$2 ගේ ගිණුමට ප්‍රවිෂ්ට වන්න", 24 | "right-sudo": "වෙනත් පරිශීලකයෙකුගේ ගිණුමකට ප්‍රවිෂ්ට වන්න" 25 | } 26 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "아라" 5 | ] 6 | }, 7 | "sudo": "다른 사용자의 계정에 로그인", 8 | "unsudo": "자신의 계정으로 돌아가기", 9 | "sudo-desc": "다른 사용자로 로그인하기 위해 sudo를 사용할 수 있습니다", 10 | "sudo-personal-unsudo": "자신의 계정으로 돌아가기", 11 | "sudo-form": "로그인:", 12 | "sudo-user": "사용자 이름:", 13 | "sudo-reason": "이유:", 14 | "sudo-submit": "로그인", 15 | "sudo-unsudo": "$1님 환영합니다, 현재 $2로 위키에 로그인하고 있습니다. 자신의 계정으로 돌아가려면 \"{{int:sudo-unsudo-submit}}\"를 클릭하세요.", 16 | "sudo-unsudo-submit": "돌아가기", 17 | "sudo-success": "$1님 환영합니다, 지금 $2로 위키에 로그인하고 있습니다.", 18 | "sudo-error": "Sudo 오류: $1", 19 | "sudo-error-sudo-invaliduser": "잘못된 사용자 이름", 20 | "sudo-error-sudo-ip": "IP 주소로 로그인할 수 없습니다", 21 | "sudo-error-sudo-nonexistent": "해당 사용자는 존재하지 않습니다", 22 | "sudo-error-sudo-self": "자기 자신이 sudo할 수 없습니다", 23 | "sudo-error-nosudo": "sudo로 다른 사용자로 로그인하지 않는 것 같습니다.", 24 | "sudo-logpagename": "Sudo 기록", 25 | "sudo-logpagetext": "sudo의 모든 사용 기록입니다.", 26 | "sudo-logentry": "사용자가 $2의 계정으로 로그인했습니다", 27 | "right-sudo": "다른 사용자의 계정에 로그인" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ohgi", 5 | "Schu", 6 | "Shirayuki" 7 | ] 8 | }, 9 | "sudo": "他の利用者のアカウントにログイン", 10 | "unsudo": "自分のアカウントに戻る", 11 | "sudo-desc": "sudo使用者が他の利用者としてログインできるようにする", 12 | "sudo-personal-unsudo": "自分のアカウントに戻る", 13 | "sudo-form": "ログイン先:", 14 | "sudo-user": "利用者名:", 15 | "sudo-reason": "理由:", 16 | "sudo-submit": "ログイン", 17 | "sudo-unsudo": "ようこそ $1 、あなたは現在 $2 としてウィキにログインしています。自分のアカウントに戻るには「{{int:sudo-unsudo-submit}}」をクリックしてください。", 18 | "sudo-unsudo-submit": "戻る", 19 | "sudo-success": "ようこそ $1 、あなたは現在 $2 としてウィキにログインしています。", 20 | "sudo-error": "Sudo エラー: $1", 21 | "sudo-error-sudo-invaliduser": "無効な利用者名", 22 | "sudo-error-sudo-ip": "IP 利用者ではログインできません", 23 | "sudo-error-sudo-nonexistent": "その利用者は存在しません", 24 | "sudo-error-sudo-self": "自分自身には sudo できません", 25 | "sudo-error-nosudo": "sudo で他の利用者としてログインしていないようです。", 26 | "sudo-logpagename": "sudo記録", 27 | "sudo-logpagetext": "これは sudo 使用のすべての記録です。", 28 | "sudo-logentry": "$2 のアカウントにログインしました", 29 | "right-sudo": "他の利用者のアカウントにログイン" 30 | } 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/gctools-outilsgc/gcpedia.svg?branch=master)](https://travis-ci.org/gctools-outilsgc/gcpedia) 2 | 3 | # GCpedia 4 | 5 | Master branch: Dockerfile and customizations off mediawiki 1.30 for GCwiki. 6 | 7 | GCpedia branch: current GCpedia production 8 | 9 | Both branches include Dockerfiles to build docker images as well as docker compose files for both docker-compose and docker stack/swarm 10 | 11 | The main Dockerfile is alpine linux-based, an ubuntu-based one is also available. 12 | 13 | ## Dev install 14 | Easy way: 15 | clone the repo, 16 | run 17 | ``` 18 | docker-compose up 19 | ``` 20 | add an entry into your hosts file for 21 | ``` 22 | wiki.local 23 | ``` 24 | 25 | and you now have a fully installed instance of the wiki (visual editor service extra, needs at bit more work) that you can reach at wiki.local! 26 | 27 | This setup will also reflect any changes that you make to the code you just pulled without needing to do anything extra. 28 | 29 | ## e2e reviews 30 | 31 | Available [here](https://gctools-outilsgc.github.io/gcpedia/haibun/reviews/dashboard.html). 32 | 33 | 34 | -------------------------------------------------------------------------------- /extensions/README: -------------------------------------------------------------------------------- 1 | == User Information == 2 | 3 | Extensions are distributed separately. Drop them into this directory and enable 4 | as per the extension's installation instructions. 5 | 6 | You can find a list of extensions and documentation at 7 | . 8 | 9 | == Development Information == 10 | 11 | If you are a developer, you might want to fetch the extension tree in another 12 | directory and make a symbolic link: 13 | 14 | mediawiki/extensions$ ln -s ../../extensions-trunk/FooBar 15 | 16 | Most extensions are available through Git: 17 | https://phabricator.wikimedia.org/diffusion/MEXT/ 18 | 19 | 20 | Please note that under POSIX systems (Linux...), parent of a symbolic path 21 | refers to the link source, NOT to the target! You should check the env 22 | variable MW_INSTALL_PATH in case the extension is not in the default location. 23 | 24 | The following code snippet lets you override the default path: 25 | 26 | $IP = getenv( 'MW_INSTALL_PATH' ); 27 | if( $IP === false ) { 28 | $IP = __DIR__ . '/../..'; 29 | } 30 | require_once "$IP/maintenance/Maintenance.php"; // a MediaWiki core file 31 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/he.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amire80" 5 | ] 6 | }, 7 | "sudo": "להיכנס לחשבון של משתמש אחר", 8 | "unsudo": "חזרה לחשבונכם", 9 | "sudo-desc": "מאפשר למשתמשים מורשים (sudoers) להיכנס בתור משתמשים אחרים", 10 | "sudo-personal-unsudo": "חזרה לחשבונכם", 11 | "sudo-form": "להיכנס אל:", 12 | "sudo-user": "שם המשתמש:", 13 | "sudo-reason": "סיבה:", 14 | "sudo-submit": "להיכנס", 15 | "sudo-unsudo": "ברוך בואכם, $1, עכשיו אתם בחשבון בתור $2. לחצו על \"{{int:sudo-unsudo-submit}}\" כדי לחזור לחשבונכם.", 16 | "sudo-unsudo-submit": "חזרה", 17 | "sudo-success": "ברוכים הבאים, $1, עכשיו נכנסתם לוויקי בתור $2.", 18 | "sudo-error": "שגיאת מעבר חשבון: $1", 19 | "sudo-error-sudo-invaliduser": "שם משתמש בלתי־תקין", 20 | "sudo-error-sudo-ip": "לא ניתן להיכנס לכתובת IP", 21 | "sudo-error-sudo-nonexistent": "המשתמש אינו קיים", 22 | "sudo-error-sudo-self": "לא ניתן לעבור לאותו החשבון", 23 | "sudo-error-nosudo": "לא נראה שאתם במצב מעבר חשבון", 24 | "sudo-logpagename": "יומן מעבר חשבון", 25 | "sudo-logpagetext": "זהו יומן של כל השימושים במעבר חשבון", 26 | "sudo-logentry": "נכנס לחשבון $2", 27 | "right-sudo": "כניסה לחשבון של משתמש אחר" 28 | } 29 | -------------------------------------------------------------------------------- /pipelines/azp-db-import.yaml: -------------------------------------------------------------------------------- 1 | trigger: # triggered manually when needed 2 | - none 3 | 4 | 5 | jobs: 6 | - job: import 7 | displayName: import sql dump 8 | pool: $(deployPool) 9 | steps: 10 | - task: AzureKeyVault@1 11 | inputs: 12 | azureSubscription: $(azSubServiceConnection) 13 | KeyVaultName: $(KV_NAME) 14 | SecretsFilter: $(KV_SECRETS_LIST) 15 | RunAsPreJob: false 16 | 17 | - task: AzureCLI@2 18 | displayName: download and import 19 | inputs: 20 | azureSubscription: $(serviceConnectionName) 21 | scriptType: bash 22 | scriptLocation: 'inlineScript' 23 | inlineScript: | 24 | az storage blob download --account-name $(STORAGE_ACCOUNT) --container-name $(STORAGE_CONTAINER) --file "db_backup.sql.gz" --name "$(DUMP_BLOB_NAME)" 25 | gunzip -c db_backup.sql.gz | mysql -h$(DB_HOST) -u$(DB_USER) -p$(DB_PASS) $(DB_NAME) 26 | env: 27 | DB_HOST: $(database_host) 28 | DB_USER: $(gcpediaDBUsername) 29 | DB_Pass: $(gcpediaDBPass) 30 | DB_NAME: $(DB_NAME) 31 | DUMP_BLOB_NAME: $(DUMP_BLOB_NAME) 32 | STORAGE_ACCOUNT: $(STORAGE_ACCOUNT) 33 | STORAGE_CONTAINER: $(STORAGE_CONTAINER) 34 | -------------------------------------------------------------------------------- /extensions/SidebarTitleText/SidebarTitleTextHooks.php: -------------------------------------------------------------------------------- 1 | $menu) { 14 | foreach ($menu as $ikey => $menuItem) { 15 | if ( strpos($menuItem["text"], "|") ){ 16 | $parts = explode("|", $menuItem["text"], 2); 17 | $bar[$mkey][$ikey]["text"] = SidebarTitleTextHooks::menuItemText($skin, $parts[0]); 18 | $bar[$mkey][$ikey]["title"] = SidebarTitleTextHooks::menuItemText($skin, $parts[1]); 19 | } 20 | } 21 | } 22 | return; 23 | } 24 | 25 | private static function menuItemText( Skin $skin, string $text ){ 26 | $message = $skin->msg( $text ); 27 | // parse as an i18n message if it's registered as such 28 | if ( $message->exists() ) { 29 | return $message->text(); 30 | } 31 | 32 | return $text; 33 | } 34 | } 35 | 36 | 37 | -------------------------------------------------------------------------------- /extensions/EmailUpdate/EmailUpdate.php: -------------------------------------------------------------------------------- 1 | 'EmailUpdate', 17 | 'author' =>'[http://www.gcpedia.gc.ca/wiki/User:Matthew.april Matthew April]', 18 | 'description' => 'Allows admins to [[Special:EmailUpdate|change a users email]] and send out a confirmation email', 19 | 'version' => '1.1' 20 | ); 21 | 22 | # setup 23 | $dir = dirname(__FILE__) . '/'; 24 | $wgAutoloadClasses['EmailUpdate'] = $dir . 'EmailUpdate.body.php'; 25 | $wgExtensionMessagesFiles['EmailUpdate'] = $dir . 'EmailUpdate.i18n.php'; 26 | 27 | # toolbox hook 28 | #$emailUpdate = new EmailUpdate; 29 | #$wgHooks['SkinTemplateToolboxEnd'][] = array( $emailUpdate, 'emailUpdateToolbox' ); 30 | 31 | # special page 32 | $wgSpecialPages['EmailUpdate'] = 'EmailUpdate'; 33 | $wgSpecialPageGroups['EmailUpdate'] = 'users'; -------------------------------------------------------------------------------- /extensions/Sudo/i18n/frp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ChrisPtDe" 5 | ] 6 | }, 7 | "sudo": "Branchiéd-vos u compto a un ôtro usanciér", 8 | "unsudo": "Retôrn a voutron compto", 9 | "sudo-desc": "Pèrmèt ux usanciérs sudô de sè branchiér coment un ôtro usanciér.", 10 | "sudo-personal-unsudo": "Retôrn a voutron compto", 11 | "sudo-form": "Branchement a :", 12 | "sudo-user": "Nom d’utilisator :", 13 | "sudo-reason": "Rêson :", 14 | "sudo-submit": "Branchement", 15 | "sudo-unsudo-submit": "Retôrn", 16 | "sudo-success": "Benvegnua $1, vos éte ora branchiê u vouiqui coment $2.", 17 | "sudo-error": "Èrror sudô : $1", 18 | "sudo-error-sudo-invaliduser": "Nom d’usanciér envalido", 19 | "sudo-error-sudo-ip": "Sè pôt pas branchiér a una adrèce IP", 20 | "sudo-error-sudo-nonexistent": "Cél usanciér ègziste pas", 21 | "sudo-error-sudo-self": "Empossiblo de sè branchiér ''per sudô'' sur son prôpro compto", 22 | "sudo-error-nosudo": "Vos semblâd pas étre dens un branchement sudô", 23 | "sudo-logpagename": "Historico sudô", 24 | "sudo-logpagetext": "O est un historico de tôs los usâjos de ''sudô''.", 25 | "sudo-logentry": "branchiê u compto $2", 26 | "right-sudo": "Branchement u compto a un ôtro usanciér" 27 | } 28 | -------------------------------------------------------------------------------- /haibun/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gcwikis-e2e-tests", 3 | "version": "1.36.0", 4 | "description": "e2e tests for gc wikis", 5 | "engines": { 6 | "node": ">=18" 7 | }, 8 | "scripts": { 9 | "test": "HAIBUN_LOG_LEVEL=log HAIBUN_O_A11YSTEPPER_STORAGE=StorageFS HAIBUN_O_OUTREVIEWS_STORAGE=StorageFS HAIBUN_KEY=test HAIBUN_TRACE=true HAIBUN_O_WEBPLAYWRIGHT_STORAGE=StorageFS HAIBUN_O_WEBPLAYWRIGHT_CAPTURE_VIDEO=true haibun-cli e2e --config e2e/local", 10 | "publish": "HAIBUN_O_OUTREVIEWS_PUBLISH_ROOT=./reviews HAIBUN_O_OUTREVIEWS_STORAGE=StorageFS HAIBUN_O_OUTREVIEWS_PUBLISH_STORAGE=StorageFS haibun-cli --config publish/local publish", 11 | "docker-test": "HAIBUN_O_WEBPLAYWRIGHT_ARGS=\"--host-resolver-rules=MAP wiki.local `./gcpedia-docker-address.sh`:80\" HAIBUN_O_WEBPLAYWRIGHT_CAPTURE_PLAYWRIGHT_TRACE=true npm run test" 12 | }, 13 | "license": "ISC", 14 | "dependencies": { 15 | "@haibun/cli": "^1.38.2", 16 | "@haibun/core": "^1.38.2", 17 | "@haibun/domain-storage": "^1.38.2", 18 | "@haibun/domain-webpage": "^1.38.2", 19 | "@haibun/out-review": "^1.38.2", 20 | "@haibun/out-xunit": "^1.38.2", 21 | "@haibun/storage-fs": "^1.38.2", 22 | "@haibun/web-playwright": "^1.38.2", 23 | "@haibun/web-accessibility-axe": "^1.38.2" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/nb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nghtwlkr" 5 | ] 6 | }, 7 | "sudo": "Logg inn på en annen brukers konto", 8 | "unsudo": "Gå tilbake til din konto", 9 | "sudo-desc": "Tillat sudoere å logge inn som andre brukere", 10 | "sudo-personal-unsudo": "Gå tilbake til din konto", 11 | "sudo-form": "Logg inn på:", 12 | "sudo-user": "Brukernavn:", 13 | "sudo-reason": "Årsak:", 14 | "sudo-submit": "Logg inn", 15 | "sudo-unsudo": "Velkommen $1, du er nå logget inn på wikien som $2. Klikk på «{{int:sudo-unsudo-submit}}» for å gå tilbake til din egen pålogging.", 16 | "sudo-unsudo-submit": "Tilbake", 17 | "sudo-success": "Velkommen $1, du er nå logget inn på wikien som $2.", 18 | "sudo-error": "Sudo-feil: $1", 19 | "sudo-error-sudo-invaliduser": "Ugyldig brukernavn", 20 | "sudo-error-sudo-ip": "Kan ikke logge inn på en IP-adresse", 21 | "sudo-error-sudo-nonexistent": "Den brukeren finnes ikke", 22 | "sudo-error-sudo-self": "Kan ikke sudoe inn i deg selv", 23 | "sudo-error-nosudo": "Du ser ikke ut til å være inne i en sudo-pålogging", 24 | "sudo-logpagename": "Sudo-logg", 25 | "sudo-logpagetext": "Dette er en logg over all bruk av sudo.", 26 | "sudo-logentry": "logget på $2 sin konto", 27 | "right-sudo": "Logget inn på en annen brukers konto" 28 | } 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Repository management 2 | .svn 3 | 4 | # git-deploy status file: 5 | /.deploy 6 | 7 | # Editors 8 | *.kate-swp 9 | *~ 10 | \#*# 11 | .#* 12 | .*.swp 13 | .project 14 | cscope.files 15 | cscope.out 16 | *.orig 17 | .vscode 18 | ## NetBeans 19 | nbproject* 20 | project.index 21 | ## Sublime 22 | sublime-* 23 | sftp-config.json 24 | 25 | # MediaWiki install & usage 26 | /cache 27 | /docs/js 28 | /images/[0-9a-f] 29 | /images/archive 30 | /images/cache 31 | /images/deleted 32 | /images/lockdir 33 | /images/temp 34 | /images/thumb 35 | ## Extension:EasyTimeline 36 | /images/timeline 37 | /images/tmp 38 | /maintenance/.mweval_history 39 | /maintenance/.mwsql_history 40 | /maintenance/dev/data 41 | /AdminSettings.php 42 | /LocalSettings.php 43 | /StartProfiler.php 44 | 45 | # Building & testing 46 | npm-debug.log 47 | node_modules/ 48 | /tests/phpunit/phpunit.phar 49 | 50 | # Composer 51 | /composer.lock 52 | #/composer.local.json 53 | /composer.phar 54 | 55 | # MediaWiki UI documentation 56 | /docs/kss/static 57 | 58 | # Operating systems 59 | ## Mac OS X 60 | .DS_Store 61 | ## Windows 62 | Thumbs.db 63 | 64 | # Misc 65 | .buildpath 66 | .classpath 67 | .idea 68 | .metadata* 69 | .settings 70 | /favicon.ico 71 | /static* 72 | /tags 73 | /.htpasswd 74 | /data 75 | /tests/phan/issues 76 | *.rej 77 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "DCamer", 5 | "Okras" 6 | ] 7 | }, 8 | "sudo": "Войти в учетную запись другого пользователя", 9 | "unsudo": "Вернуться к вашей учётной записи", 10 | "sudo-desc": "Позволяет судоерам войти в качестве другого пользователей", 11 | "sudo-personal-unsudo": "Вернуться к вашей учетной записи", 12 | "sudo-form": "Войти:", 13 | "sudo-user": "Имя участника:", 14 | "sudo-reason": "Причина:", 15 | "sudo-submit": "Представиться", 16 | "sudo-unsudo": "Приветствуем $1, вы вошли как $2. Нажмите \"{{int:sudo-unsudo-submit}}\" чтобы вернуться в свою учётную запись.", 17 | "sudo-unsudo-submit": "Вернуться", 18 | "sudo-success": "Приветствуем $1, вы вошли как $2.", 19 | "sudo-error": "Судо-ошибка: $1", 20 | "sudo-error-sudo-invaliduser": "Неправильное имя участника", 21 | "sudo-error-sudo-ip": "Не удалось войти в IP-адрес", 22 | "sudo-error-sudo-nonexistent": "Целевой участник не существует.", 23 | "sudo-error-sudo-self": "Нельзя войти в себя", 24 | "sudo-error-nosudo": "Вы не представились в Sudo", 25 | "sudo-logpagename": "Журнал Sudo", 26 | "sudo-logpagetext": "Это журнал всех использований Sudo.", 27 | "sudo-logentry": "вошел в учетную запись $2", 28 | "right-sudo": "Войти в учетную запись другого пользователя" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/bs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "CERminator" 5 | ] 6 | }, 7 | "sudo": "Prijava na račun drugog korisnika", 8 | "unsudo": "Nazad na svoj račun", 9 | "sudo-desc": "Omogućuje sudo korisnicima da se prijave kao neki drugi korisnik", 10 | "sudo-personal-unsudo": "Nazad na svoj račun", 11 | "sudo-form": "Prijava na:", 12 | "sudo-user": "Korisničko ime:", 13 | "sudo-reason": "Razlog:", 14 | "sudo-submit": "Prijava", 15 | "sudo-unsudo": "Dobrodošli $1, trenutno ste prijavljeni na wiki kao $2. Kliknite na \"{{int:sudo-unsudo-submit}}\" da se vratite na vaš vlastiti račun.", 16 | "sudo-unsudo-submit": "Nazad", 17 | "sudo-success": "Dobrodošli $1, sada ste prijavljeni na wiki kao $2.", 18 | "sudo-error": "Sudo greška: $1", 19 | "sudo-error-sudo-invaliduser": "Nevaljano korisničko ime", 20 | "sudo-error-sudo-ip": "Ne mogu se prijaviti na IP adresu", 21 | "sudo-error-sudo-nonexistent": "Ovaj korisnik ne postoji.", 22 | "sudo-error-sudo-self": "Ne možete prijaviti samog sebe", 23 | "sudo-error-nosudo": "Izgleda da se ne nalazite unutar sudo prijave", 24 | "sudo-logpagename": "Sudo zapisnik", 25 | "sudo-logpagetext": "Ovo je zapisnik svih sudo korištenja.", 26 | "sudo-logentry": "prijavljen na račun od $2", 27 | "right-sudo": "Prijavljivanje na račun drugog korisnika" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/SkinTweaksGCwikiHooks.php: -------------------------------------------------------------------------------- 1 | $skin->msg( 'wet:baraccount' ), 16 | 'href' => 'https://account-compte.gccollab.ca', 17 | 'id' => 'gt-acc', 18 | 'active' => '' 19 | ]; 20 | $gccLink = [ 21 | 'text' => "GCcollab", 22 | 'href' => 'https://gccollab.ca/', 23 | 'id' => 'gt-gcc', 24 | 'active' => '' 25 | ]; 26 | $messLink = [ 27 | 'text' => "GCmessage", 28 | 'href' => 'https://message.gccollab.ca/', 29 | 'id' => 'gt-mess', 30 | 'active' => '' 31 | ]; 32 | $bar['gctools'] = [$accLink, $gccLink, $messLink]; 33 | return; 34 | } 35 | 36 | 37 | public static function onBeforePageDisplay( OutputPage $out, Skin $skin ) { 38 | $out->addModules( [ 'ext.skintweaksgcwiki' ] ); 39 | return; 40 | } 41 | 42 | } 43 | 44 | 45 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "IvanLanin" 5 | ] 6 | }, 7 | "sudo": "Masuk ke akun pengguna lain", 8 | "unsudo": "Kembali ke akun Anda", 9 | "sudo-desc": "Mengizinkan seorang pengguna untuk masuk sebagai pengguna lain (sudo)", 10 | "sudo-personal-unsudo": "Kembali ke akun Anda", 11 | "sudo-form": "Masuk ke:", 12 | "sudo-user": "Nama pengguna:", 13 | "sudo-reason": "Alasan:", 14 | "sudo-submit": "Masuk", 15 | "sudo-unsudo": "Selamat datang $1, Anda saat ini masuk ke wiki sebagai $2. Klik \"{{int:sudo-unsudo-submit}}\" untuk kembali masuk dengan akun Anda sendiri.", 16 | "sudo-unsudo-submit": "Kembali", 17 | "sudo-success": "Selamat datang $1, sekarang Anda masuk ke wiki sebagai $2.", 18 | "sudo-error": "Galat sudo: $1", 19 | "sudo-error-sudo-invaliduser": "Nama pengguna tidak sah", 20 | "sudo-error-sudo-ip": "Tidak dapat masuk dengan menggunakan alamat IP", 21 | "sudo-error-sudo-nonexistent": "Pengguna tidak ada", 22 | "sudo-error-sudo-self": "Tidak dapat sudo ke akun Anda sendiri", 23 | "sudo-error-nosudo": "Anda tampaknya tidak sedang menggunakan sudo", 24 | "sudo-logpagename": "Log sudo", 25 | "sudo-logpagetext": "Berikut adalah log semua penggunaan sudo.", 26 | "sudo-logentry": "masuk ke dalam akun $2", 27 | "right-sudo": "Masuk ke akun pengguna lain" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/fa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Armin1392", 5 | "Ebraminio", 6 | "Mjbmr" 7 | ] 8 | }, 9 | "sudo": "ورود به حساب کاربری دیگری", 10 | "unsudo": "بازگشت به حساب شما", 11 | "sudo-desc": "اجازه به سودوئرها برای ورود به عنوان کاربران دیگر", 12 | "sudo-personal-unsudo": "بازگشت به حساب شما", 13 | "sudo-form": "ورود به:", 14 | "sudo-user": "نام کاربری:", 15 | "sudo-reason": "دلیل:", 16 | "sudo-submit": "ورود به سامانه", 17 | "sudo-unsudo": "خوش‌ آمدید $1، شما در حال حاضر به عنوان $2 وارد ویکی شده‌اید. بر روی \"{{int:sudo-unsudo-submit}}\" برای بازگشت به حساب کاربری خود، کلیک کنید.", 18 | "sudo-unsudo-submit": "بازگشت", 19 | "sudo-success": "خوش‌آمدید $1 ، شما در حال ورود به ویکی به عنوان $2 هستید.", 20 | "sudo-error": "خطای سودو: $1", 21 | "sudo-error-sudo-invaliduser": "نام کاربری نامعتبر", 22 | "sudo-error-sudo-ip": "نمی‌توان به عنوان یک آدرس آی‌پی وارد شد", 23 | "sudo-error-sudo-nonexistent": "آن کاربر وجود ندارد", 24 | "sudo-error-sudo-self": "نتوانست سودو به خودتان", 25 | "sudo-error-nosudo": "شما برای ورود به عنوان کاربر دیگری با استفاده از سودو، ظاهر نمی‌شوید.", 26 | "sudo-logpagename": "سیاهه سودو", 27 | "sudo-logpagetext": "این یک سیاهه همه استفاده‌ها از سودو است.", 28 | "sudo-logentry": "ورود به حساب $2", 29 | "right-sudo": "ورود به حساب کاربری دیگری" 30 | } 31 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nike", 5 | "Veikk0.ma" 6 | ] 7 | }, 8 | "sudo": "Kirjaudu toisena käyttäjänä", 9 | "unsudo": "Palaa omalle tunnuksellesi", 10 | "sudo-desc": "Mahdollistaa sudo-käyttäjien kirjautua toisena käyttäjänä", 11 | "sudo-personal-unsudo": "Palaa omalle tunnuksellesi", 12 | "sudo-form": "Kirjaudu:", 13 | "sudo-user": "Käyttäjätunnus", 14 | "sudo-reason": "Syy", 15 | "sudo-submit": "Kirjaudu", 16 | "sudo-unsudo": "Tervetuloa $1. Olet tällä hetkellä kirjautuneena käyttäjänä $2. Palaa omalle tunnuksellesi napsauttamalla {{int:sudo-unsudo-submit}}.", 17 | "sudo-unsudo-submit": "Palaa", 18 | "sudo-success": "Tervetuloa $1. Olet nyt kirjautuneena käyttäjänä $2.", 19 | "sudo-error": "Sudo-virhe: $1", 20 | "sudo-error-sudo-invaliduser": "Virheellinen käyttäjätunnus", 21 | "sudo-error-sudo-ip": "Ei voida kirjautua IP-osoitteeseen", 22 | "sudo-error-sudo-nonexistent": "Käyttäjää ei ole olemassa", 23 | "sudo-error-sudo-self": "Et voi käyttää sudoa omalle tunnuksellesi", 24 | "sudo-error-nosudo": "Et näytä olevan kirjautuneena sudo-tilillä", 25 | "sudo-logpagename": "Sudoloki", 26 | "sudo-logpagetext": "Tämä on loki kaikista sudon käytöistä.", 27 | "sudo-logentry": "kirjautui käyttäjänä $2", 28 | "right-sudo": "Kirjautua toisen käyttäjän tunnuksella" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/gl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Toliño" 5 | ] 6 | }, 7 | "sudo": "Acceder ao sistema coa conta doutro usuario", 8 | "unsudo": "Volver á súa conta", 9 | "sudo-desc": "Permite acceder ao sistema como outro usuario", 10 | "sudo-personal-unsudo": "Volver á súa conta", 11 | "sudo-form": "Rexistro en:", 12 | "sudo-user": "Nome de usuario:", 13 | "sudo-reason": "Motivo:", 14 | "sudo-submit": "Rexistro", 15 | "sudo-unsudo": "Benvido $1, está conectado no wiki como $2. Prema en \"{{int:sudo-unsudo-submit}}\" para regresar á súa conexión anterior.", 16 | "sudo-unsudo-submit": "Volver", 17 | "sudo-success": "Benvido $1, está conectado no wiki como $2.", 18 | "sudo-error": "Erro do sudo: $1", 19 | "sudo-error-sudo-invaliduser": "Nome de usuario non válido", 20 | "sudo-error-sudo-ip": "Non pode acceder ao sistema como un enderezo IP", 21 | "sudo-error-sudo-nonexistent": "Ese usuario non existe", 22 | "sudo-error-sudo-self": "Non se pode identificar como sudo na súa conta", 23 | "sudo-error-nosudo": "Semella non estar nunha conexión sudo", 24 | "sudo-logpagename": "Rexistro de sudo", 25 | "sudo-logpagetext": "Este é un rexistro de todos os usos do sudo.", 26 | "sudo-logentry": "accedeu ao sistema coa conta de $2", 27 | "right-sudo": "Acceder ao sistema coa conta doutro usuario" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Fulup", 5 | "Y-M D" 6 | ] 7 | }, 8 | "sudo": "Kevreañ dre gont un implijer all", 9 | "unsudo": "Distreiñ d'ho kont", 10 | "sudo-desc": "Talvezout a ra d'ar sudoerien da gevreañ evel implijerien all", 11 | "sudo-personal-unsudo": "Distreiñ d'ho kont", 12 | "sudo-form": "Kevreañ da :", 13 | "sudo-user": "Anv implijer :", 14 | "sudo-reason": "Abeg :", 15 | "sudo-submit": "Kevreañ", 16 | "sudo-unsudo": "DEgemer mat $1, evit ar poent emaoc'h kevreet er wiki evel $2. Klikañ war \"{{int:sudo-unsudo-submit}}\" evit distreiñ d'ho kevreadenn deoc'h-c'hwi.", 17 | "sudo-unsudo-submit": "Distreiñ", 18 | "sudo-success": "Demeger mat $1, kevreet oc'h bremañ er wiki evel $2.", 19 | "sudo-error": "Fazi Sudo : $1", 20 | "sudo-error-sudo-invaliduser": "Anv implijer direizh", 21 | "sudo-error-sudo-ip": "N'hall ket kevreañ ouzh ur chomlec'h IP", 22 | "sudo-error-sudo-nonexistent": "N'eus ket eus an implijer-mañ", 23 | "sudo-error-sudo-self": "Dibosupl eo sudoañ ennoc'h hoc'h-unan", 24 | "sudo-error-nosudo": "Evit doare n'emaoc'h ket en ur gevreadenn sudo", 25 | "sudo-logpagename": "Marilh sudo", 26 | "sudo-logpagetext": "Hemañ zo ur marilh eus holl implijoù sudo.", 27 | "sudo-logentry": "keveet e kont $2", 28 | "right-sudo": "Kevreañ dre gont un implijer all." 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/mk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bjankuloski06" 5 | ] 6 | }, 7 | "sudo": "Најава со туѓа сметка", 8 | "unsudo": "Назад на својата сметка", 9 | "sudo-desc": "Им овозможува на корисниците на Sudo да се најавуваат со туѓи сметки", 10 | "sudo-personal-unsudo": "Назад на својата сметка", 11 | "sudo-form": "Најава на:", 12 | "sudo-user": "Корисничко име:", 13 | "sudo-reason": "Причина:", 14 | "sudo-submit": "Најава", 15 | "sudo-unsudo": "Добре дојдовте, $1. Моментално сте најавени на викито како $2. За да се вратите на вашата сопствена сметка, стиснете на „{{int:sudo-unsudo-submit}}“.", 16 | "sudo-unsudo-submit": "Назад", 17 | "sudo-success": "Добре дојдовте, $1. Сега сте најавени на викито како $2.", 18 | "sudo-error": "Грешка во Sudo: $1", 19 | "sudo-error-sudo-invaliduser": "Неважечко корисничко име", 20 | "sudo-error-sudo-ip": "Не можете да се најавите на IP-адреса", 21 | "sudo-error-sudo-nonexistent": "Нема таков корисник.", 22 | "sudo-error-sudo-self": "Не можете да се најавите на својата сметка како на туѓа", 23 | "sudo-error-nosudo": "Се чини дека не сте во Sudo-сметка", 24 | "sudo-logpagename": "Дневник на Sudo", 25 | "sudo-logpagetext": "Ова е дневник на сите употреби на Sudo", 26 | "sudo-logentry": "најава на сметката на $2", 27 | "right-sudo": "Најавување на туѓа сметка" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Daniel Friesen" 5 | ] 6 | }, 7 | "sudo": "Log into another user's account", 8 | "unsudo": "Return to your account", 9 | "sudo-desc": "Allows sudoers to login as other users", 10 | "sudo-personal-unsudo": "Return to your account", 11 | "sudo-form": "Login to:", 12 | "sudo-user": "Username:", 13 | "sudo-reason": "Reason:", 14 | "sudo-submit": "Login", 15 | "sudo-unsudo": "Welcome $1, you are currently logged into the wiki as $2. Click on \"{{int:sudo-unsudo-submit}}\" to return to your own account.", 16 | "sudo-unsudo-submit": "Return", 17 | "sudo-success": "Welcome $1, you are now logged into the wiki as $2.", 18 | "sudo-error": "Sudo error: $1", 19 | "sudo-error-sudo-invaliduser": "Invalid username", 20 | "sudo-error-sudo-ip": "Cannot login as an IP address", 21 | "sudo-error-sudo-nonexistent": "That user does not exist", 22 | "sudo-error-sudo-self": "Cannot sudo into yourself", 23 | "sudo-error-nosudo": "You do not appear to be logged on as another user using sudo.", 24 | "sudo-logpagename": "Sudo log", 25 | "sudo-logpagetext": "This is a log of all uses of sudo.", 26 | "sudo-logentry": "logged into $2's account", 27 | "right-sudo": "Login to another user's account" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ms.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Anakmalaysia" 5 | ] 6 | }, 7 | "sudo": "Log masuk ke dalam akaun pengguna lain", 8 | "unsudo": "Kembali ke akaun anda", 9 | "sudo-desc": "Membolehkan ahli sudo untuk log masuk sebagai pengguna lain", 10 | "sudo-personal-unsudo": "Kembali ke akaun anda", 11 | "sudo-form": "Log masuk ke dalam:", 12 | "sudo-user": "Nama pengguna:", 13 | "sudo-reason": "Sebab:", 14 | "sudo-submit": "Log masuk", 15 | "sudo-unsudo": "Selama datang $1, anda sedang log masuk ke dalam wiki sebagai $2. Klik \"{{int:sudo-unsudo-submit}}\" untuk kembali ke log masuk anda sendiri.", 16 | "sudo-unsudo-submit": "Kembali", 17 | "sudo-success": "Selamat datang $1; kini, anda log masuk ke dalam wiki sebagai $2.", 18 | "sudo-error": "Ralat sudo: $1", 19 | "sudo-error-sudo-invaliduser": "Nama pengguna tidak sah", 20 | "sudo-error-sudo-ip": "Tidak dapat log masuk ke dalam alamat IP", 21 | "sudo-error-sudo-nonexistent": "Pengguna itu tidak wujud", 22 | "sudo-error-sudo-self": "Tidak boleh bersudo ke dalam diri sendiri", 23 | "sudo-error-nosudo": "Nampaknya anda tidak log masuk secara sudo", 24 | "sudo-logpagename": "Log sudo", 25 | "sudo-logpagetext": "Ini ialah log semua pengguna sudo.", 26 | "sudo-logentry": "log masuk ke dalam akaun $2", 27 | "right-sudo": "Log masuk ke dalam akaun pengguna lain" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/pt-br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Luckas", 5 | "Luckas Blade", 6 | "555" 7 | ] 8 | }, 9 | "sudo": "Autenticar-se na conta de outro usuário", 10 | "unsudo": "Voltar à sua conta", 11 | "sudo-desc": "Permite iniciar sessão como outro usuário", 12 | "sudo-personal-unsudo": "Voltar à sua conta", 13 | "sudo-form": "Entrar como:", 14 | "sudo-user": "Nome de usuário:", 15 | "sudo-reason": "Motivo:", 16 | "sudo-submit": "Entrar", 17 | "sudo-unsudo": "Bem-vindo(a) $1, você se autenticou no wiki como $2.\nClique em \"{{int:sudo-unsudo-submit}}\" para voltar à sua conta original.", 18 | "sudo-unsudo-submit": "Voltar", 19 | "sudo-success": "Bem-vindo(a) $1, você se autenticou no wiki como $2.", 20 | "sudo-error": "Erro: $1", 21 | "sudo-error-sudo-invaliduser": "Nome de usuário inválido", 22 | "sudo-error-sudo-ip": "Não é possível se autenticar como um IP", 23 | "sudo-error-sudo-nonexistent": "Usuário inexistente", 24 | "sudo-error-sudo-self": "Não é possível entrar na própria conta", 25 | "sudo-error-nosudo": "Você não parece estar autenticado como outro usuário via sudo.", 26 | "sudo-logpagename": "Registros de sudo", 27 | "sudo-logpagetext": "Segue-se registro de todos os usos de sudo.", 28 | "sudo-logentry": "autenticou-se na conta $2", 29 | "right-sudo": "Se autenticar em contas de outros usuários" 30 | } 31 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/hsb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Michawiki" 5 | ] 6 | }, 7 | "sudo": "Ke kontu druheho wužiwarja so přizjewić", 8 | "unsudo": "Wróćo k twojemu kontu", 9 | "sudo-desc": "Zmóžnja přizjewjenje wužiwarjow jako druzy wužiwarjo z pomuc přikaza \"sudo\"", 10 | "sudo-personal-unsudo": "Wróćo k twojemu kontu", 11 | "sudo-form": "Přizjewić so jako:", 12 | "sudo-user": "Wužiwarske mjeno:", 13 | "sudo-reason": "Přičina:", 14 | "sudo-submit": "Přizjewjenje", 15 | "sudo-unsudo": "Witaj $1, sy tuchwilu we wikiju jako $2 přizjewjeny. Klikń na \"{{int:sudo-unsudo-submit}}\", zo by so k swójskemu přizjewjenju wróćił.", 16 | "sudo-unsudo-submit": "Wróćić so", 17 | "sudo-success": "Witaj $1, sy nětko pola wikija $2 přizjewjeny.", 18 | "sudo-error": "Sudo-zmylk: $1", 19 | "sudo-error-sudo-invaliduser": "Njepłaćiwe wužiwarske mjeno", 20 | "sudo-error-sudo-ip": "Přizjewjenje z IP-adresu njeje móžno", 21 | "sudo-error-sudo-nonexistent": "Tón wužiwar njeeksistuje", 22 | "sudo-error-sudo-self": "Njemóžeš so samoho přez \"sudo\" přizjewić", 23 | "sudo-error-nosudo": "Zda so, zo njesy přez \"sudo\" přizjewjeny", 24 | "sudo-logpagename": "Sudo-protokol", 25 | "sudo-logpagetext": "To je protokol wšěch wužićow sudo.", 26 | "sudo-logentry": "je so pola konta $2 přizjewił", 27 | "right-sudo": "Pola konta druheho wužiwarja so přizjewić" 28 | } 29 | -------------------------------------------------------------------------------- /kubernetes/persist.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | kind: PersistentVolume 3 | apiVersion: v1 4 | metadata: 5 | name: gcpedia-db-volume 6 | spec: 7 | capacity: 8 | storage: 200Gi 9 | persistentVolumeReclaimPolicy: "Retain" 10 | storageClassName: gctools-test-gcpedia-db 11 | accessModes: 12 | - ReadWriteOnce 13 | nfs: 14 | server: 167.37.33.21 15 | path: "/home/nfs/gcpedia-db" 16 | --- 17 | kind: PersistentVolumeClaim 18 | apiVersion: v1 19 | metadata: 20 | name: gcpedia-db-volume-claim 21 | namespace: gctools-test 22 | spec: 23 | accessModes: 24 | - ReadWriteOnce 25 | storageClassName: gctools-test-gcpedia-db 26 | resources: 27 | requests: 28 | storage: 200Gi 29 | --- 30 | kind: PersistentVolume 31 | apiVersion: v1 32 | metadata: 33 | name: gcpedia-data-volume 34 | spec: 35 | capacity: 36 | storage: 2Gi 37 | persistentVolumeReclaimPolicy: "Retain" 38 | storageClassName: gctools-test-gcpedia-data 39 | accessModes: 40 | - ReadWriteOnce 41 | nfs: 42 | server: 167.37.33.21 43 | path: "/home/nfs/gcpedia-data" 44 | --- 45 | kind: PersistentVolumeClaim 46 | apiVersion: v1 47 | metadata: 48 | name: gcpedia-data-volume-claim 49 | namespace: gctools-test 50 | spec: 51 | accessModes: 52 | - ReadWriteOnce 53 | storageClassName: gctools-test-gcpedia-data 54 | resources: 55 | requests: 56 | storage: 2Gi 57 | --- 58 | -------------------------------------------------------------------------------- /extensions/Sudo/Sudo.alias.php: -------------------------------------------------------------------------------- 1 | array( 'Sudo' ), 15 | ); 16 | 17 | /** Arabic (العربية) */ 18 | $specialPageAliases['ar'] = array( 19 | 'Sudo' => array( 'سودو' ), 20 | ); 21 | 22 | /** Egyptian Arabic (مصرى) */ 23 | $specialPageAliases['arz'] = array( 24 | 'Sudo' => array( 'سودو' ), 25 | ); 26 | 27 | /** Western Balochi (بلوچی رخشانی) */ 28 | $specialPageAliases['bgn'] = array( 29 | 'Sudo' => array( 'سودو' ), 30 | ); 31 | 32 | /** Persian (فارسی) */ 33 | $specialPageAliases['fa'] = array( 34 | 'Sudo' => array( 'سودو' ), 35 | ); 36 | 37 | /** Interlingua (interlingua) */ 38 | $specialPageAliases['ia'] = array( 39 | 'Sudo' => array( 'Transidentification' ), 40 | ); 41 | 42 | /** Cornish (kernowek) */ 43 | $specialPageAliases['kw'] = array( 44 | 'Sudo' => array( 'Sudo' ), 45 | ); 46 | 47 | /** Macedonian (македонски) */ 48 | $specialPageAliases['mk'] = array( 49 | 'Sudo' => array( 'Судо' ), 50 | ); 51 | 52 | /** Malayalam (മലയാളം) */ 53 | $specialPageAliases['ml'] = array( 54 | 'Sudo' => array( 'സുഡോ' ), 55 | ); 56 | 57 | /** Punjabi (ਪੰਜਾਬੀ) */ 58 | $specialPageAliases['pa'] = array( 59 | 'Sudo' => array( 'ਸੁਡੋ' ), 60 | ); -------------------------------------------------------------------------------- /extensions/Sudo/i18n/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Armando-Martin", 5 | "Fitoschido" 6 | ] 7 | }, 8 | "sudo": "Iniciar sesión en la cuenta de otro usuario", 9 | "unsudo": "Volver a tu cuenta", 10 | "sudo-desc": "Permite iniciar sesión como otro usuario", 11 | "sudo-personal-unsudo": "Volver a tu cuenta", 12 | "sudo-form": "Iniciar sesión a:", 13 | "sudo-user": "Nombre de usuario:", 14 | "sudo-reason": "Motivo:", 15 | "sudo-submit": "Acceder", 16 | "sudo-unsudo": "Bienvenido $1, has iniciado sesión en el wiki como $2. Pulsa en «{{int:sudo-unsudo-submit}}» para volver a tu cuenta.", 17 | "sudo-unsudo-submit": "Volver", 18 | "sudo-success": "Bienvenido $1, ahora has iniciado sesión en el wiki como $2.", 19 | "sudo-error": "Error de sudo: $1", 20 | "sudo-error-sudo-invaliduser": "Nombre de usuario no válido", 21 | "sudo-error-sudo-ip": "No se puede iniciar sesión como una dirección IP", 22 | "sudo-error-sudo-nonexistent": "Ese usuario no existe", 23 | "sudo-error-sudo-self": "No se puede usar sudo en la cuenta propia", 24 | "sudo-error-nosudo": "No parece que esté conectado a Sudo como otro usuario.", 25 | "sudo-logpagename": "Registro de sudo", 26 | "sudo-logpagetext": "Este es un registro de todos los usos de sudo.", 27 | "sudo-logentry": "sesión iniciada con la cuenta de $2", 28 | "right-sudo": "Iniciar sesión en la cuenta de otro usuario" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Beta16", 5 | "Darth Kule" 6 | ] 7 | }, 8 | "sudo": "Entrare con un altro account utente", 9 | "unsudo": "Ritorna al tuo account", 10 | "sudo-desc": "Permette agli utenti autorizzati a farlo di effettuare l'accesso come altri utenti", 11 | "sudo-personal-unsudo": "Ritorna al tuo account", 12 | "sudo-form": "Accedi a:", 13 | "sudo-user": "Nome utente:", 14 | "sudo-reason": "Motivo:", 15 | "sudo-submit": "Entra", 16 | "sudo-unsudo": "Benvenuto $1, ora sei entrato in questo wiki come $2. Fai clic su \"{{int:sudo-unsudo-submit}}\" per tornare al tuo account.", 17 | "sudo-unsudo-submit": "Ritorna", 18 | "sudo-success": "Benvenuto $1, ora sei entrato in questo wiki come $2.", 19 | "sudo-error": "Errore sudo: $1", 20 | "sudo-error-sudo-invaliduser": "Nome utente non valido", 21 | "sudo-error-sudo-ip": "Non è possibile effettuare l'accesso come indirizzo IP", 22 | "sudo-error-sudo-nonexistent": "Questo utente non esiste", 23 | "sudo-error-sudo-self": "Impossibile cambiare utente nel proprio", 24 | "sudo-error-nosudo": "Non risulta che sei entrato come un altro utente usando sudo.", 25 | "sudo-logpagename": "Registro sudo", 26 | "sudo-logpagetext": "Questo è un registro di tutti gli usi di sudo.", 27 | "sudo-logentry": "è entrato nell'account di $2", 28 | "right-sudo": "Accede con un altro account utente" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sp5uhe", 5 | "Pio387" 6 | ] 7 | }, 8 | "sudo": "Zaloguj się jako inny użytkownik", 9 | "unsudo": "Powróć do własnego konta", 10 | "sudo-desc": "Pozwala wybranym użytkownikom logować się na konta innych", 11 | "sudo-personal-unsudo": "Powrócić do własnego konta", 12 | "sudo-form": "Zaloguj się jako", 13 | "sudo-user": "Nazwa użytkownika", 14 | "sudo-reason": "Powód", 15 | "sudo-submit": "Zaloguj", 16 | "sudo-unsudo": "Witaj $1. Jesteś obecnie zalogowany do wiki jako $2. Kliknij „{{int:sudo-unsudo-submit}}”, a wrócisz do swojego własnego konta.", 17 | "sudo-unsudo-submit": "Wróć", 18 | "sudo-success": "Witaj $1. Jesteś teraz zalogowany do wiki jako $2.", 19 | "sudo-error": "Błąd zmiany zalogowania $1", 20 | "sudo-error-sudo-invaliduser": "Nieprawidłowa nazwa użytkownika", 21 | "sudo-error-sudo-ip": "Nie można zalogować się jako adres IP", 22 | "sudo-error-sudo-nonexistent": "Taki użytkownik nie istnieje", 23 | "sudo-error-sudo-self": "Nie można przelogować się na własne konto", 24 | "sudo-error-nosudo": "Nie wygląda na to abyś był zalogowany na inne konto", 25 | "sudo-logpagename": "Rejestr zmian zalogowania się", 26 | "sudo-logpagetext": "Jest to rejestr wszystkich zdarzeń zmian zalogowania się.", 27 | "sudo-logentry": "zalogowany jako $2", 28 | "right-sudo": "Zaloguj się jako inny użytkownik" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Waldir" 5 | ] 6 | }, 7 | "sudo": "Iniciar sessão na conta de outro utilizador", 8 | "unsudo": "Retornar para a sua conta", 9 | "sudo-desc": "Permite iniciar sessão como outros utilizadores", 10 | "sudo-personal-unsudo": "Retornar para a sua conta", 11 | "sudo-form": "Iniciar sessão em:", 12 | "sudo-user": "Nome de utilizador:", 13 | "sudo-reason": "Motivo:", 14 | "sudo-submit": "Iniciar sessão", 15 | "sudo-unsudo": "Bem-vindo, $1, você atualmete tem sessão iniciada na wiki como $2. Clique em \"{{int:sudo-unsudo-submit}}\" para retornar à sua própria conta.", 16 | "sudo-unsudo-submit": "Voltar", 17 | "sudo-success": "Bem-vindo, $1, você está agora autenticado na wiki como $2.", 18 | "sudo-error": "Erro do Sudo: $1", 19 | "sudo-error-sudo-invaliduser": "Nome de utilizador inválido", 20 | "sudo-error-sudo-ip": "Não é possível iniciar sessão como um endereço IP", 21 | "sudo-error-sudo-nonexistent": "Esse utilizador não existe", 22 | "sudo-error-sudo-self": "Não é possível fazer sudo em si mesmo", 23 | "sudo-error-nosudo": "Você não parece estar dentro de uma conta sudo", 24 | "sudo-logpagename": "Registo do Sudo", 25 | "sudo-logpagetext": "Este é um registo de todas as utilizações do sudo.", 26 | "sudo-logentry": "Autenticado na conta de $2", 27 | "right-sudo": "Iniciar sessão na conta de outro utilizador" 28 | } 29 | -------------------------------------------------------------------------------- /.bicep/PR/test-instance-setup.bicep: -------------------------------------------------------------------------------- 1 | targetScope = 'subscription' 2 | 3 | param prNumber string = 'latest' 4 | param containerTag string = 'latest' 5 | param dbServerRG string 6 | param dbServerName string 7 | param dbServerPass string 8 | param subnetID string 9 | param planID string 10 | param acrName string = 'wikitestacr' 11 | 12 | @allowed([ 13 | '', 'php|8.2' 14 | ]) 15 | param phpEnv string = '' 16 | param appCommandLine string = '' 17 | param scriptPath string = '' 18 | param articlePath string = '' 19 | 20 | param cacheType string = '' 21 | 22 | @allowed(['gcpedia', 'gcwiki']) 23 | param siteType string = 'gcwiki' 24 | 25 | param location string = 'Canada Central' 26 | 27 | resource testRG 'Microsoft.Resources/resourceGroups@2021-01-01' = { 28 | name: 'wiki_review_${prNumber}' 29 | location: location 30 | } 31 | 32 | module wiki './wiki-test-instance.bicep' = { 33 | name: 'wiki-test-infra' 34 | scope: resourceGroup(testRG.name) 35 | params: { 36 | containerTag: containerTag 37 | prName: 'PR-${prNumber}' 38 | subnetID: subnetID 39 | planID: planID 40 | dbServerRG: dbServerRG 41 | dbServerName: dbServerName 42 | dbServerPass: dbServerPass 43 | acrName: acrName 44 | siteType: siteType 45 | phpEnv: phpEnv 46 | appCommandLine: appCommandLine 47 | scriptPath: scriptPath 48 | articlePath: articlePath 49 | cacheType: cacheType 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SkinTweaksGCpedia", 3 | "version": "1.0", 4 | "author": "GCtools", 5 | "url": "https://github.com/gctools-outilsgc/gcpedia", 6 | "descriptionmsg": "skintweaksgcpedia-desc", 7 | "type": "other", 8 | "requires": { 9 | "MediaWiki": ">= 1.40.0" 10 | }, 11 | "MessagesDirs": { 12 | "SkinTweaksGCpedia": [ 13 | "i18n" 14 | ] 15 | }, 16 | "ResourceModules": { 17 | "ext.skintweaksgcpedia": { 18 | "styles": ["css/skintweaksgcpedia.css", "css/wet4.css"], 19 | "scripts": ["js/skintweaksgcpedia.js", "js/newUserPage.js"], 20 | "messages": [ 21 | "wet:lang3Code", 22 | "searchsuggest-search-tools", 23 | "pedia", 24 | "wet:gcdirectoryLink", 25 | "wet:barDirectory", 26 | "wet:gcintranetLink", 27 | "wet:gcconnexLink", 28 | "wet:gccollabLink", 29 | "topbar:langlink", 30 | "newuserpage-notification-title", 31 | "newuserpage-notification" 32 | ] 33 | } 34 | }, 35 | "ResourceFileModulePaths": { 36 | "localBasePath": "resources", 37 | "remoteExtPath": "SkinTweaksGCpedia/resources" 38 | }, 39 | "AutoloadClasses": { 40 | "SkinTweaksGCpediaHooks": "SkinTweaksGCpediaHooks.php" 41 | }, 42 | "Hooks": { 43 | "SidebarBeforeOutput": "SkinTweaksGCpediaHooks::onSidebarBeforeOutput", 44 | "BeforePageDisplay": "SkinTweaksGCpediaHooks::onBeforePageDisplay" 45 | }, 46 | "manifest_version": 2 47 | } 48 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Siebrand" 5 | ] 6 | }, 7 | "sudo": "Aanmelden als een andere gebruiker", 8 | "unsudo": "Terugkeren naar uw eigen gebruiker", 9 | "sudo-desc": "Staat gebruikers met het recht \"sudo\" toe als andere gebruikers aan te melden", 10 | "sudo-personal-unsudo": "Terugkeren naar uw eigen gebruiker", 11 | "sudo-form": "Aanmelden als:", 12 | "sudo-user": "Gebruikersnaam:", 13 | "sudo-reason": "Reden:", 14 | "sudo-submit": "Aanmelden", 15 | "sudo-unsudo": "Welkom, $1. U bent nu aangemeld bij de wiki als $2. Klik op \"{{int:sudo-unsudo-submit}}\" om terug te keren naar uw eigen gebruiker.", 16 | "sudo-unsudo-submit": "Terug", 17 | "sudo-success": "Welkom $1. U bent u bij de wiki aangemeld als $2.", 18 | "sudo-error": "Sudo-fout: $1", 19 | "sudo-error-sudo-invaliduser": "Ongeldige gebruikersnaam", 20 | "sudo-error-sudo-ip": "Het is niet mogelijk aan te melden als een anonieme gebruiker", 21 | "sudo-error-sudo-nonexistent": "Die gebruiker bestaat niet", 22 | "sudo-error-sudo-self": "Het is niet mogelijk een sudo naar uzelf uit te voeren", 23 | "sudo-error-nosudo": "U bevindt zich niet in een sudosessie", 24 | "sudo-logpagename": "Sudologboek", 25 | "sudo-logpagetext": "Dit logboek bevat alle keren dat sudo gebruikt is.", 26 | "sudo-logentry": "heeft aangemeld als $2", 27 | "right-sudo": "Aanmelden als een andere gebruiker" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Base", 5 | "Тест" 6 | ] 7 | }, 8 | "sudo": "Увійти до облікового запису іншого користувача", 9 | "unsudo": "Повернутися до Вашого облікового запису", 10 | "sudo-desc": "Дозволяє судоерам входити як інші користувачі", 11 | "sudo-personal-unsudo": "Повернутися до Вашого облікового запису", 12 | "sudo-form": "Увійти до:", 13 | "sudo-user": "Ім'я користувача:", 14 | "sudo-reason": "Причина:", 15 | "sudo-submit": "Увійти", 16 | "sudo-unsudo": "Вітаємо $1, наразі Ви увійшли до вікі як $2. Натисніть на «{{int:sudo-unsudo-submit}}» для повернення до Вашого власного облікового запису.", 17 | "sudo-unsudo-submit": "Повернутися", 18 | "sudo-success": "Вітаємо $1, наразі Ви увійшли до вікі як $2.", 19 | "sudo-error": "Помилка судо: $1", 20 | "sudo-error-sudo-invaliduser": "Неправильне ім'я користувача", 21 | "sudo-error-sudo-ip": "Неможливо увійти як IP-адреса", 22 | "sudo-error-sudo-nonexistent": "Цей користувач не існує", 23 | "sudo-error-sudo-self": "Неможливо увійти у власний обліковий запис", 24 | "sudo-error-nosudo": "Ви не виглядаєте ніби увійшли як інший користувач використовуючи судо.", 25 | "sudo-logpagename": "Журнал судо", 26 | "sudo-logpagetext": "Це журнал усіх користувачів судо.", 27 | "sudo-logentry": "увійшов до облікового запису $2", 28 | "right-sudo": "Увійти до облікового запису іншого користувача" 29 | } 30 | -------------------------------------------------------------------------------- /haibun/e2e/features/account/create-account.feature: -------------------------------------------------------------------------------- 1 | Feature: Account Creation Workflow on Wiki 2 | 3 | Backgrounds: site, form-create-account 4 | 5 | Scenario: Navigating and creating an account on a local Wiki page 6 | 7 | We start by creating a random username and password, and what will become the user page. 8 | 9 | When I have a valid random username 10 | When I have a valid random password 11 | 12 | Go to the create account page, and fill it in, starting with the gc institution. 13 | 14 | go to the Main webpage 15 | resize window to 1400x1100 16 | then click by text "Create account" 17 | input for Institution email 18 | 19 | We have to pause a bit to get the form to recognize the name and institution have been entered, so it will populate the username field. 20 | 21 | pause for 1s 22 | Press "Tab" 23 | Type "c" 24 | input for Create password input 25 | input for Confirm password input 26 | input "test account" for Real name 27 | Click the checkbox Accept terms 28 | Click on Create account 29 | 30 | Now the new user has been created, there should be an announcement popup with this information. 31 | Follow the link. 32 | 33 | In Notification title, see "User page Created" 34 | Click "here" 35 | 36 | Confirm we're on the new user page. 37 | 38 | URI starts with User page 39 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/pms.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Borichèt", 5 | "Dragonòt" 6 | ] 7 | }, 8 | "sudo": "Ch'a intra ant ël sistema ant ël cont ëd n'àutr utent", 9 | "unsudo": "Artorna a tò cont", 10 | "sudo-desc": "A përmët a j'utent \"sudo\" d'intré ant ël sistema coma a fusso d'àutri utent", 11 | "sudo-personal-unsudo": "Artorna a tò cont", 12 | "sudo-form": "Intré ant ël sistema ansima a:", 13 | "sudo-user": "Stranòm:", 14 | "sudo-reason": "Rason:", 15 | "sudo-submit": "Intré ant ël sistema", 16 | "sudo-unsudo": "Bin ëvnù $1, al moment a l'é intrà ant la wiki com $2. Ch'a sgnaca su \"{{int:sudo-unsudo-submit}}\" për artorné a soa conession.", 17 | "sudo-unsudo-submit": "Artorna", 18 | "sudo-success": "Bin ëvnù $1, adess it ses intrà ant la wiki com $2.", 19 | "sudo-error": "Eror sudo: $1", 20 | "sudo-error-sudo-invaliduser": "Stranòm pa bon", 21 | "sudo-error-sudo-ip": "As peul pa intresse an n'adrëssa IP", 22 | "sudo-error-sudo-nonexistent": "Col utent a esist pa", 23 | "sudo-error-sudo-self": "As peul pa intré con sudo ansima a sò cont", 24 | "sudo-error-nosudo": "Chiel a smija pa esse andrinta a na conession sudo", 25 | "sudo-logpagename": "Registr ëd sudo", 26 | "sudo-logpagetext": "Cost-sì a l'é un registr ëd tùit j'utent ëd sudo.", 27 | "sudo-logentry": "intrà ant el sistema ant ël cont ëd $2", 28 | "right-sudo": "Intré ant ël sistema con ël cont ëd n'àutr utent" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/oc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Cedric31" 5 | ] 6 | }, 7 | "sudo": "Connectatz-vos al compte d'un autre utilizaire", 8 | "unsudo": "Retorn a vòstre compte", 9 | "sudo-desc": "Permet al ''sudoers'' de se connectar en tant qu'un autre utilizaire", 10 | "sudo-personal-unsudo": "Retorn a vòstre compte", 11 | "sudo-form": "Connexion a :", 12 | "sudo-user": "Nom d'utilizaire :", 13 | "sudo-reason": "Rason :", 14 | "sudo-submit": "Connexion", 15 | "sudo-unsudo": "Benvenguda $1, sètz actualament connectat al wiki en tant que $2. Clicatz sus {{int:sudo-unsudo-submit}} per tornar a vòstra connexion precedenta.", 16 | "sudo-unsudo-submit": "Retorn", 17 | "sudo-success": "Benvenguda $1, ara sètz connectat al wiki en tant que $2.", 18 | "sudo-error": "Error de ''sudo'': $1", 19 | "sudo-error-sudo-invaliduser": "Nom d'utilizaire invalid", 20 | "sudo-error-sudo-ip": "Se pòt pas connectar a una adreça IP", 21 | "sudo-error-sudo-nonexistent": "Aqueste utilizaire existís pas", 22 | "sudo-error-sudo-self": "Impossible de s'identificar ''via sudo'' sus son pròpri compte", 23 | "sudo-error-nosudo": "Sembla que sètz pas dins una connexion sudo", 24 | "sudo-logpagename": "Istoric de ''sudo''", 25 | "sudo-logpagetext": "Aquò's un istoric de totas las utilizacions de ''sudo''.", 26 | "sudo-logentry": "connectat al compte $2", 27 | "right-sudo": "Connexion al compte d'un autre utilizaire" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/gsw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Als-Holder" 5 | ] 6 | }, 7 | "sudo": "Mit eme andere Benutzerkonto aamälde", 8 | "unsudo": "Zum eigene Benutzerkonto zruckchehre", 9 | "sudo-desc": "Macht d Aamäldig megli mit eme anderen Benutzerkonto („sudo“)", 10 | "sudo-personal-unsudo": "Zum eigene Benutzerkonto zruckchehre", 11 | "sudo-form": "Aamälden as:", 12 | "sudo-user": "Benutzername:", 13 | "sudo-reason": "Grund:", 14 | "sudo-submit": "Aamälde", 15 | "sudo-unsudo": "Willchuu $1, Du bisch zurzyt as Benutzer „$2“ im Wiki aagmäldet. Klick uf „{{int:sudo-unsudo-submit}}“ go zue Dyym eigen Benutzerkonto zruckchehre.", 16 | "sudo-unsudo-submit": "Zruckchehre", 17 | "sudo-success": "Willchuu $1, Du bisch jetz im Wiki as Benutzer „$2“ aagmäldet.", 18 | "sudo-error": "Sudo-Fäler: $1", 19 | "sudo-error-sudo-invaliduser": "Nit giltige Benutzername", 20 | "sudo-error-sudo-ip": "Mer cha sich nit mit ere IP-Adräss aamälde", 21 | "sudo-error-sudo-nonexistent": "Dää Benutzer git s nit.", 22 | "sudo-error-sudo-self": "Mer cha sich nit nomol sälber aamälde", 23 | "sudo-error-nosudo": "Du bisch schyns nit mit eme andere Benutzerkonto aagmäldet", 24 | "sudo-logpagename": "Sudo-Logbuech", 25 | "sudo-logpagetext": "Des isch s Logbuech vu allne Verwändige vu „sudo“.", 26 | "sudo-logentry": "het sich mit em Benutzerkonto vu $2 aagmäldet", 27 | "right-sudo": "Mit eme andere Benutzerkonto aamälde" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Otourly", 5 | "Sherbrooke" 6 | ] 7 | }, 8 | "sudo": "Connectez-vous au compte d'un autre utilisateur", 9 | "unsudo": "Retour à votre compte", 10 | "sudo-desc": "Permet au ''sudoers'' de se connecter en tant qu'un autre utilisateur", 11 | "sudo-personal-unsudo": "Retour à votre compte", 12 | "sudo-form": "Connexion à:", 13 | "sudo-user": "Nom d’utilisateur :", 14 | "sudo-reason": "Raison :", 15 | "sudo-submit": "Connexion", 16 | "sudo-unsudo": "Bienvenue $1, vous êtes actuellement connecté au wiki en tant que $2. Cliquez sur {{int:sudo-unsudo-submit}} pour revenir à votre connexion précédente.", 17 | "sudo-unsudo-submit": "Retour", 18 | "sudo-success": "Bienvenue $1, vous êtes maintenant connecté au wiki en tant que $2.", 19 | "sudo-error": "Erreur de ''sudo'': $1", 20 | "sudo-error-sudo-invaliduser": "Nom d’utilisateur invalide", 21 | "sudo-error-sudo-ip": "Ne peut se connecter à une adresse IP", 22 | "sudo-error-sudo-nonexistent": "Cet utilisateur n'existe pas", 23 | "sudo-error-sudo-self": "Impossible de s'identifier ''via sudo'' sur son propre compte", 24 | "sudo-error-nosudo": "Vous ne semblez pas être dans une connexion sudo", 25 | "sudo-logpagename": "Historique de ''sudo''", 26 | "sudo-logpagetext": "Ceci est un historique de toutes les utilisations de ''sudo''.", 27 | "sudo-logentry": "connecté au compte $2", 28 | "right-sudo": "Connexion au compte d'un autre utilisateur" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/be-tarask.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "EugeneZelenko", 5 | "Jim-by" 6 | ] 7 | }, 8 | "sudo": "Увайсьці ў рахунак іншага удзельніка", 9 | "unsudo": "Вярнуцца ў Ваш рахунак", 10 | "sudo-desc": "Дазваляе выбраным удзельнікам уваходзіць ў сыстэму як іншыя ўдзельнікі", 11 | "sudo-personal-unsudo": "Вярнуцца ў Ваш рахунак", 12 | "sudo-form": "Увайсьці ў:", 13 | "sudo-user": "Імя ўдзельніка:", 14 | "sudo-reason": "Прычына:", 15 | "sudo-submit": "Увайсьці", 16 | "sudo-unsudo": "Вітаем, $1! Цяпер Вы ўвайшлі ў {{GRAMMAR:вінавальны|{{SITENAME}}}} як $2. Націсьніце «{{int:sudo-unsudo-submit}}» каб вярнуцца ў свой рахунак.", 17 | "sudo-unsudo-submit": "Вярнуцца", 18 | "sudo-success": "Вітаем, $1! Цяпер Вы ўвайшлі ў {{GRAMMAR:вінавальны|{{SITENAME}}}} як $2.", 19 | "sudo-error": "Памылка уваходу ў сыстэму як іншага ўдзельніка: $1", 20 | "sudo-error-sudo-invaliduser": "Няслушнае імя ўдзельніка", 21 | "sudo-error-sudo-ip": "Немагчыма ўвайсьці ў IP-адрас", 22 | "sudo-error-sudo-nonexistent": "Гэты рахунак не існуе", 23 | "sudo-error-sudo-self": "Немагчыма пераўвайсьці ва ўласны рахунак", 24 | "sudo-error-nosudo": "Выглядае, што Вы не ўвайшлі ў рахунак, які дазваляе уваход ў сыстэму як іншага ўдзельніка", 25 | "sudo-logpagename": "Журнал уваходаў у рахункі іншых удзельнікаў", 26 | "sudo-logpagetext": "Гэта журнал усіх уваходаў у рахункі іншых удзельнікаў.", 27 | "sudo-logentry": "увайшоў у рахунак $2", 28 | "right-sudo": "уваход ў рахункі іншых удзельнікаў" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/tl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "AnakngAraw", 5 | "Jojit fb" 6 | ] 7 | }, 8 | "sudo": "Maglogin papasok sa iba pang account ng tagagamit", 9 | "unsudo": "Bumalik sa account mo", 10 | "sudo-desc": "Nagpapahintulot sa mga nagsu-sudo na lumagda bilang ibang mga tagagamit", 11 | "sudo-personal-unsudo": "Bumalik sa account mo", 12 | "sudo-form": "Lumagda sa:", 13 | "sudo-user": "Pangalan ng tagagamit:", 14 | "sudo-reason": "Dahilan:", 15 | "sudo-submit": "Mag-login", 16 | "sudo-unsudo": "Maligayang pagdating $1, pangkasalukuyang nakalagda ka sa wiki bilang si $2. Pindutin ang \"{{int:sudo-unsudo-submit}}\" bumalik sa pansarili mong paglagda.", 17 | "sudo-unsudo-submit": "Bumalik", 18 | "sudo-success": "Maligayang pagdating $1, nakalagda ka na ngayon sa wiki bilang si $2.", 19 | "sudo-error": "Kamalian ng sudo: $1", 20 | "sudo-error-sudo-invaliduser": "Hindi katanggap-tanggap na pangalan ng tagagamit", 21 | "sudo-error-sudo-ip": "Hindi makalagda papunta sa isang tirahan ng IP", 22 | "sudo-error-sudo-nonexistent": "Hindi umiiral ang tagagamit na iyan", 23 | "sudo-error-sudo-self": "Hindi maaaring magsudo na papasok sa sarili mo", 24 | "sudo-error-nosudo": "Tila wala ka sa loob ng isang paglagda ng sudo", 25 | "sudo-logpagename": "Talaan ng sudo", 26 | "sudo-logpagetext": "Isa itong talaan ng lahat ng mga pinaggagamitan ng sudo.", 27 | "sudo-logentry": "nakalagda sa account ni $2", 28 | "right-sudo": "Mag-login papasok sa iba pang account ng tagagamit" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ia.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "McDutchie" 5 | ] 6 | }, 7 | "sudo": "Aperir session in le conto de un altere usator", 8 | "unsudo": "Retornar al proprie conto", 9 | "sudo-desc": "Permitte a \"transidentificatores\" de aperir session in le conto de altere usatores", 10 | "sudo-personal-unsudo": "Retornar al proprie conto", 11 | "sudo-form": "Aperir session como:", 12 | "sudo-user": "Nomine de usator:", 13 | "sudo-reason": "Motivo:", 14 | "sudo-submit": "Aperir session", 15 | "sudo-unsudo": "Benvenite $1, tu es ora identificate in le wiki como $2. Clicca super \"{{int:sudo-unsudo-submit}}\" pro retornar a tu proprie conto de usator.", 16 | "sudo-unsudo-submit": "Retornar", 17 | "sudo-success": "Benvenite $1, tu es ora identificate in le wiki como $2.", 18 | "sudo-error": "Error de transidentification: $1", 19 | "sudo-error-sudo-invaliduser": "Nomine de usator invalide", 20 | "sudo-error-sudo-ip": "Non es possibile aperir session como un adresse IP", 21 | "sudo-error-sudo-nonexistent": "Iste usator non existe", 22 | "sudo-error-sudo-self": "Non es possibile transidentificar se con le proprie conto", 23 | "sudo-error-nosudo": "Tu non pare esser in un session transidentificate", 24 | "sudo-logpagename": "Registro de transidentification", 25 | "sudo-logpagetext": "Isto es un registro de tote le usos del facilitate de transidentification.", 26 | "sudo-logentry": "aperiva session in le conto de $2", 27 | "right-sudo": "Aperir session in le conto de un altere usator" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kghbln", 5 | "The Evil IP address" 6 | ] 7 | }, 8 | "sudo": "Mit anderem Benutzerkonto anmelden", 9 | "unsudo": "Zum eigenen Benutzerkonto zurückkehren", 10 | "sudo-desc": "Ermöglicht die Anmeldung mit einem anderen Benutzerkonto als dem Eigenen", 11 | "sudo-personal-unsudo": "Zum eigenen Benutzerkonto zurückkehren", 12 | "sudo-form": "Anmelden als:", 13 | "sudo-user": "Benutzername:", 14 | "sudo-reason": "Grund:", 15 | "sudo-submit": "Anmelden", 16 | "sudo-unsudo": "Willkommen $1, du bist momentan als Benutzer „$2“ im Wiki angemeldet. Klicke auf „{{int:sudo-unsudo-submit}}“, um zu deinem eigenen Benutzerkonto zurückzukehren.", 17 | "sudo-unsudo-submit": "Zurückkehren", 18 | "sudo-success": "Willkommen $1, du bist jetzt im Wiki als Benutzer „$2“ angemeldet.", 19 | "sudo-error": "Sudo-Fehler: $1", 20 | "sudo-error-sudo-invaliduser": "Ungültiger Benutzername", 21 | "sudo-error-sudo-ip": "Man kann sich nicht mit einer IP-Adresse anmelden", 22 | "sudo-error-sudo-nonexistent": "Dieser Benutzer ist nicht vorhanden", 23 | "sudo-error-sudo-self": "Man kann sich nicht noch einmal selbst anmelden", 24 | "sudo-error-nosudo": "Du scheinst nicht mit einem anderen Benutzerkonto angemeldet zu sein", 25 | "sudo-logpagename": "Sudo-Logbuch", 26 | "sudo-logpagetext": "Dies ist das Logbuch aller Verwendungen von „sudo“.", 27 | "sudo-logentry": "hat sich mit dem Benutzerkonto von $2 angemeldet", 28 | "right-sudo": "Mit anderem Benutzerkonto anmelden" 29 | } 30 | -------------------------------------------------------------------------------- /extensions/Sudo/Sudo.i18n.php: -------------------------------------------------------------------------------- 1 | query($query); 27 | 28 | if ($result->num_rows < 1) { 29 | throw new Exception("Table $tableToCheck does not exist."); 30 | } else { 31 | echo "Table $tableToCheck exists.\n"; 32 | } 33 | } else { 34 | echo "Connected to MySQL server successfully.\n"; 35 | } 36 | 37 | // Close the connection 38 | mysqli_close($connection); 39 | exit(0); 40 | } catch (Exception $e) { 41 | echo "Error: " . $e->getMessage() . "\n"; 42 | exit(1); 43 | } 44 | ?> -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GCUserCreateForm", 3 | "version": "1.0", 4 | "author": "GCtools", 5 | "url": "https://github.com/gctools-outilsgc/gcpedia", 6 | "descriptionmsg": "gcusercreateform-desc", 7 | "type": "other", 8 | "requires": { 9 | "MediaWiki": ">= 1.40.0" 10 | }, 11 | "MessagesDirs": { 12 | "GCUserCreateForm": [ 13 | "i18n" 14 | ] 15 | }, 16 | "ResourceModules": { 17 | "ext.gcusercreateform.create.styles": { 18 | "styles": "css/gcusercreateform.css" 19 | }, 20 | "ext.gcusercreateform.create.scripts": { 21 | "scripts": "js/gcusercreateform.js" 22 | }, 23 | "ext.gcusercreateform.login.scripts": { 24 | "scripts": "js/gcuserloginform.js" 25 | } 26 | }, 27 | "ResourceFileModulePaths": { 28 | "localBasePath": "resources", 29 | "remoteExtPath": "GCUserCreateForm/resources" 30 | }, 31 | "APIModules": { 32 | "characterfilterajax": "characterFilterAJAX", 33 | "findusernameajax": "findUsernameAJAX", 34 | "generateusernameajax": "generateUsernameAJAX" 35 | }, 36 | "AutoloadClasses": { 37 | "GCUserCreateForm": "GCUserCreateFormHooks.php", 38 | "characterFilterAJAX": "src/api/charFilterAJAX.php", 39 | "domainSelector": "src/api/DomainSelector.php", 40 | "findUsernameAJAX": "src/api/findUsernameAJAX.php", 41 | "generateUsernameAJAX": "src/api/generateUsernameAJAX.php" 42 | }, 43 | "Hooks": { 44 | "AuthChangeFormFields": "GCUserCreateForm::onAuthChangeFormFields", 45 | "BeforePageDisplay": "GCUserCreateForm::onBeforePageDisplay" 46 | }, 47 | "manifest_version": 2 48 | } 49 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | # ########################################################################### 4 | # The GCpedia container. Will be accessible at http://wiki.local 5 | # ########################################################################### 6 | gcpedia: 7 | container_name: gcpedia 8 | build: . 9 | ports: 10 | - 80:80 11 | volumes: 12 | - ./images:/var/www/html/images 13 | - ./compiled_templates:/var/www/html/extensions/Widgets/compiled_templates/ 14 | links: 15 | - gcpedia-db 16 | depends_on: 17 | - gcpedia-db 18 | environment: 19 | - DOCKER=1 20 | - DBTYPE=mysql 21 | - DBHOST=gcpedia-db 22 | - DBNAME=wiki 23 | - DBUSER=wiki 24 | - DBPASS=gcpedia 25 | - WIKI_HOST=wiki.local 26 | - WIKI_PROTOCOL=http 27 | - WIKI_PORT= 28 | - INIT=wiki 29 | - DBSSL=0 30 | - OPENID= 31 | - SITE=gcpedia 32 | - WIKI_DEBUG=true 33 | # - OAUTH=true 34 | # - USESAML=false 35 | 36 | # ########################################################################### 37 | # Database container for gcpedia, accessible from by the gcpedia container 38 | # using the network host "gcpedia-db". 39 | # ########################################################################### 40 | gcpedia-db: 41 | container_name: gcpedia-db 42 | image: mariadb:10.3 43 | volumes: 44 | - ./data/db:/var/lib/mysql 45 | environment: 46 | - MYSQL_ROOT_PASSWORD=gcpedia 47 | - MYSQL_DATABASE=wiki 48 | - MYSQL_USER=wiki 49 | - MYSQL_PASSWORD=gcpedia 50 | -------------------------------------------------------------------------------- /azure-pipelines-PR-cleanup.yaml: -------------------------------------------------------------------------------- 1 | 2 | trigger: # Trigger the pipeline only when a PR is merged into master branch 3 | - main 4 | 5 | pr: 6 | - none 7 | 8 | 9 | variables: 10 | imageRepository: 'wiki' 11 | 12 | pool: 13 | vmImage: 'ubuntu-latest' 14 | 15 | 16 | steps: 17 | - task: AzureCLI@2 18 | displayName: PR environment cleanup 19 | inputs: 20 | azureSubscription: $(azSubServiceConnection) 21 | scriptType: bash 22 | scriptLocation: inlineScript 23 | inlineScript: | 24 | ACR_IMAGES=$(az acr repository list -n $ACR_NAME | grep wiki) 25 | OPEN_PRS=$(curl -L -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/gctools-outilsgc/gcpedia/pulls | grep \"number\") 26 | echo $ACR_IMAGES 27 | echo $OPEN_PRS 28 | 29 | for image in $ACR_IMAGES; do 30 | pr_number=$(echo $image | grep -o "[0-9]\+") 31 | echo $pr_number 32 | is_open=$(echo $OPEN_PRS | grep -c ": $pr_number,") 33 | echo $is_open 34 | 35 | if [ $is_open = 0 ]; then 36 | echo "$pr_number cleanup" 37 | az group delete --name wiki_review_$pr_number --yes 38 | az mysql flexible-server db delete -g $DBRG -s $DBSERVERNAME --database-name gcwiki-pr-$pr_number --yes 39 | az mysql flexible-server db delete -g $DBRG -s $DBSERVERNAME --database-name gcpedia-pr-$pr_number --yes 40 | az acr repository delete --name $ACR_NAME --repository wiki_pr-$pr_number --yes 41 | fi 42 | done 43 | env: 44 | DBRG: $(db_resource_group) 45 | DBSERVERNAME: $(review_db_server_name) 46 | ACR_NAME: $(acrName) 47 | LOCATION: $(location) 48 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/ksh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Purodha" 5 | ] 6 | }, 7 | "sudo": "Onger enem fremde Name enlogge (Sudo)", 8 | "unsudo": "Jangk retuur op Dinge eije Name als Metmaacher", 9 | "sudo-desc": "Määt et för berääschteschte Metmaacher müjjelesch, sesch onger främde Name enzelogge.", 10 | "sudo-personal-unsudo": "Jangk retuur op Dinge eije Name als Metmaacher", 11 | "sudo-form": "Enlogge als:", 12 | "sudo-user": "Metmaacher_Naame:", 13 | "sudo-reason": "Aanlaß:", 14 | "sudo-submit": "Lohß jonn!", 15 | "sudo-unsudo": "Welkumme $1, \nDe bes heh em Wiki em Momang als {{GENDER:$2|dä|dat|Metmaacher|de|et}} $2 enjelogg.\nDonn op „{{int:sudo-unsudo-submit}}“ klecke, öm op Dinge eije Name als Metmaacher retuur ze jonn.", 16 | "sudo-unsudo-submit": "Retuhr", 17 | "sudo-success": "Welkumme $1,\njäz bes De heh em Wiki als {{GENDER:$2|dä|dat|Metmaacher|de|et}} $2 enjelogg.", 18 | "sudo-error": "Fähler: Dat Enlogge met enem fremde Name hät nit jeflupp.\n$1", 19 | "sudo-error-sudo-invaliduser": "Dat es ene onjöltije Metmaachername", 20 | "sudo-error-sudo-ip": "Mer kann nit als Namelose met ene IP-Adräß enlogge", 21 | "sudo-error-sudo-nonexistent": "Esu ene Metmaacher ham_mer nit.", 22 | "sudo-error-sudo-self": "Do kanns Desch nit mim eije Name enlogge wi wann et ene främde Name wöhr.", 23 | "sudo-error-nosudo": "Do schingks jaa nit met enem fremde Name enjelogg ze sin.", 24 | "sudo-logpagename": "Logbooch vum Enlogge onger fremde Name (Sudo)", 25 | "sudo-logpagetext": "En heh däm Logbooch fengk mer jeedes Enlogge onger enem fremde Name (Sudo)", 26 | "sudo-logentry": "hät sesch als {{GENDER:$2|dä|dat|Metmaacher|de|et}} $2 enjelogg.", 27 | "right-sudo": "Onger enem fremde Name enlogge (Sudo)" 28 | } 29 | -------------------------------------------------------------------------------- /extensions/Sudo/i18n/qqq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "EugeneZelenko", 5 | "Shirayuki", 6 | "The Evil IP address", 7 | "Umherirrender" 8 | ] 9 | }, 10 | "sudo": "{{doc-special|Sudo}}", 11 | "sudo-desc": "{{desc|name=Sudo|url=https://www.mediawiki.org/wiki/Extension:Sudo}}", 12 | "sudo-user": "{{Identical|Username}}", 13 | "sudo-reason": "{{Identical|Reason}}", 14 | "sudo-submit": "{{Identical|Login}}", 15 | "sudo-unsudo": "{{doc-important|Do not translate {{int:sudo-unsudo-submit}}.}}\nRefers to {{msg-mw|Sudo-unsudo-submit}}.\n\nUsed as welcome message. Parameters:\n* $1 - username of super user (with link)\n* $2 - username (with link)\nSee also:\n* {{msg-mw|Sudo-success}}", 16 | "sudo-unsudo-submit": "Used as label for Submit button.\n\nUsed in {{msg-mw|Sudo-unsudo}}.\n{{Identical|Return}}", 17 | "sudo-success": "Used as welcome message. Parameters:\n* $1 - username of super user (with link)\n* $2 - username (with link)\nSee also:\n* {{msg-mw|Sudo-unsudo}}", 18 | "sudo-error": "Used as error message. Parameters:\n* $1 - error message. Any one of the following messages:\n** {{msg-mw|Sudo-error-sudo-invaliduser}}\n** {{msg-mw|Sudo-error-sudo-ip}}\n** {{msg-mw|Sudo-error-sudo-nonexistent}}\n** {{msg-mw|Sudo-error-sudo-self}}\n** {{msg-mw|Sudo-error-nosudo}}", 19 | "sudo-error-sudo-invaliduser": "Used as $1 in {{msg-mw|Sudo-error}}.\n{{Identical|Invalid username}}", 20 | "sudo-error-sudo-ip": "Used as $1 in {{msg-mw|Sudo-error}}.", 21 | "sudo-error-sudo-nonexistent": "Used as $1 in {{msg-mw|Sudo-error}}.", 22 | "sudo-error-sudo-self": "Used as $1 in {{msg-mw|Sudo-error}}.", 23 | "sudo-error-nosudo": "Used as $1 in {{msg-mw|Sudo-error}}.", 24 | "sudo-logentry": "Parameters\n* $2 - username", 25 | "right-sudo": "{{doc-right|sudo}}" 26 | } 27 | -------------------------------------------------------------------------------- /brigade.js: -------------------------------------------------------------------------------- 1 | const { events, Job } = require("brigadier"); 2 | 3 | events.on("push", function(e, project) { 4 | console.log("received push for commit " + e.revision.commit) 5 | 6 | // build the new container and tag with git commit hash 7 | var build = new Job("build", "docker:dind") 8 | build.privileged = true; 9 | build.env.COMMIT = e.revision.commit 10 | build.env.DOCKER_USER = project.secrets.dockerUsr 11 | build.env.DOCKER_PASS = project.secrets.dockerPass 12 | build.tasks = [ 13 | "dockerd-entrypoint.sh &", // Start the docker daemon 14 | "sleep 20", // Grant it enough time to be up and running 15 | "cd /src/", 16 | "docker build -t phanoix/gcpedia:$COMMIT .", 17 | "docker login -u $DOCKER_USER -p $DOCKER_PASS", 18 | "docker push phanoix/gcpedia:$COMMIT" 19 | ] 20 | 21 | // update deployment with new tag 22 | var update = new Job("update", "lachlanevenson/k8s-kubectl:v1.10.5") 23 | update.env.TAG = e.revision.commit 24 | update.tasks = [ 25 | "kubectl patch -n dev deploy wiki-deployment -p '{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"wiki\",\"image\":\"phanoix/gcpedia:'$TAG'\"}]}}}}'" 26 | ] 27 | 28 | // notify via Rocket.Chat webhook 29 | var notify = new Job("notify", "alpine:3.4") 30 | notify.env.CHATKEY = project.secrets.chatKey 31 | notify.tasks = [ 32 | "apk update", 33 | "apk add curl", 34 | "curl -X POST -H 'Content-Type: application/json' --data '{\"username\":\"Brigade\",\"icon_emoji\":\":k8s:\",\"text\":\"Wiki image built, dev updating.\",\"attachments\":[{\"title\":\"Brigade script finished!\",\"title_link\": \"https://hub.docker.com/r/phanoix/gcpedia/tags/\",\"text\": \"The new wiki image is available at Docker hub.\",\"color\":\"#764FA5\"}]}' https://message.gccollab.ca/hooks/$CHATKEY" //test rocket chat notification 35 | ] 36 | 37 | build.run().then(() => { update.run().then(() => { notify.run() }) }) 38 | }) 39 | -------------------------------------------------------------------------------- /extensions/MagicNoNumberedHeadings/README: -------------------------------------------------------------------------------- 1 | MagicNoNumberedHeadings extension was created so as to resolve 2 | http://bugzilla.wikimedia.org/7832 3 | 4 | What does this extension do? 5 | 6 | This extension adds a Magic Word __NONUMBEREDHEADINGS__ to the parser. 7 | If an article contains this MagicWord, automatic numbering of the 8 | headings in this page is disabled, regardless of the user preference 9 | setting. 10 | 11 | Usage 12 | 13 | Add "__NONUMBEREDHEADINGS__" to any article. 14 | 15 | Installation 16 | 17 | Add this line towards the end of your $IP/LocalSettings.php 18 | 19 | require_once($IP.'/extensions/MagicNoNumberedHeadings/MagicNoNumberedHeadings.php'); 20 | 21 | Note, $IP is the MediaWiki installation directory. 22 | 23 | ********************************************************************** 24 | * @copyright Copyright 2007, Purodha Blissenabch. 25 | * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later 26 | * 27 | * This program is free software; you can redistribute it and/or 28 | * modify it under the terms of the GNU General Public License 29 | * as published by the Free Software Foundation, version 2 30 | * of the License. 31 | * 32 | * The above copyright notice and this permission notice shall be included in 33 | * all copies or substantial portions of the Software. 34 | * 35 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 36 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 37 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 38 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 39 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 40 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 41 | * SOFTWARE. 42 | * See the GNU General Public License for more details. 43 | ********************************************************************** 44 | -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/src/domains/DomainList.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # This dockerfile creates a base image, which it uses for setup of gc mediawiki packages and extensions. 2 | # Finally, it copies files required for mediawiki's runtime from teh setup container to the bsae container for runtime. 3 | # Stage 1: Base Image with Dependencies 4 | FROM mediawiki:1.40.4 as base 5 | 6 | ENV MEDIAWIKI_EXT_BRANCH REL1_40 7 | 8 | LABEL maintainer="GC Tools team" 9 | 10 | WORKDIR /var/www/html/ 11 | 12 | # Install required packages 13 | RUN apt-get update 14 | RUN apt-get upgrade -y 15 | RUN apt-get install -y --no-install-recommends \ 16 | git \ 17 | libzip-dev \ 18 | ffmpeg \ 19 | htmldoc \ 20 | unzip \ 21 | zlib1g-dev \ 22 | zip \ 23 | curl 24 | 25 | # Copy local extensions here, in case there are dependencies solved in setup 26 | COPY extensions /var/www/html/extensions 27 | RUN ls -lat /var/www/html/extensions 28 | 29 | FROM base as setup 30 | # Stage 2: Site specific mediawiki setup 31 | COPY . /setup 32 | 33 | # Make the setup script executable 34 | RUN chmod +x /setup/setup_mediawiki.sh 35 | 36 | # Install Composer 37 | RUN apt-get update && apt-get install -y \ 38 | && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ 39 | && apt-get clean && rm -rf /var/lib/apt/lists/* 40 | 41 | # Run the setup_mediawiki script 42 | RUN /setup/setup_mediawiki.sh 43 | 44 | # Stage 2: Final Image 45 | FROM base 46 | 47 | RUN rm -rf /var/lib/apt/lists/* 48 | 49 | COPY --from=setup /var/www/html /var/www/html 50 | 51 | # Copy init scripts 52 | COPY init/* /init/ 53 | COPY site/mediawiki.ini /usr/local/etc/php/conf.d/mediawiki.ini 54 | COPY site/LocalSettings.php /site/ 55 | COPY site/config-gcpedia.php /site/ 56 | COPY site/config-gcwiki.php /site/ 57 | RUN chmod +x /init/init.sh 58 | 59 | # this is needed to use InnoDB instead of MyISAM 60 | COPY maintenance/tables-generated.sql maintenance/ 61 | 62 | USER www-data 63 | 64 | ENTRYPOINT [ "bash", "/init/init.sh" ] 65 | CMD [ "apache2-foreground" ] 66 | -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/src/api/charFilterAJAX.php: -------------------------------------------------------------------------------- 1 | users email address 9 | * 10 | * @return always returns "" because we use the response text directly 11 | * 12 | * @author Matthew April 13 | */ 14 | 15 | class characterFilterAJAX extends ApiBase 16 | { 17 | /** 18 | * Returns an array of allowed parameters (parameter name) => (default 19 | * value) or (parameter name) => (array with PARAM_* constants as keys) 20 | * Don't call this function directly: use getFinalParams() to allow 21 | * hooks to modify parameters as needed. 22 | * 23 | * Some derived classes may choose to handle an integer $flags parameter 24 | * in the overriding methods. Callers of this method can pass zero or 25 | * more OR-ed flags like GET_VALUES_FOR_HELP. 26 | * 27 | * @return array 28 | */ 29 | protected function getAllowedParams( /* $flags = 0 */ ) { 30 | // int $flags is not declared because it causes "Strict standards" 31 | // warning. Most derived classes do not implement it. 32 | return array( 33 | 'emailinput' => ''); 34 | } 35 | 36 | function execute() { 37 | // extract request parameters 38 | $params = $this->extractRequestParams(); 39 | $email = $params['emailinput']; 40 | 41 | $filter = array( 42 | 43 | 'â' => 'a', 44 | 'à' => 'a', 45 | 'á' => 'a', 46 | 'ç' => 'c', 47 | 'ê' => 'e', 48 | 'é' => 'e', 49 | 'è' => 'e', 50 | 'ô' => 'o', 51 | 'Â' => 'A', 52 | 'À' => 'A', 53 | 'Á' => 'A', 54 | 'Ç' => 'C', 55 | 'Ê' => 'E', 56 | 'É' => 'E', 57 | 'È' => 'E', 58 | 'Ô' => 'O', 59 | ); 60 | 61 | foreach( $filter as $remove => $replace ) { 62 | if( strpos( $email, $remove) ) { 63 | $email = str_replace($remove, $replace, $email); 64 | } 65 | } 66 | $this->getResult()->addValue( null, $this->getModuleName(), $email ); 67 | return ""; 68 | } 69 | } 70 | 71 | ?> -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/SkinTweaksGCpediaHooks.php: -------------------------------------------------------------------------------- 1 | addModules( [ 'ext.skintweaksgcpedia' ] ); 29 | SkinTweaksGCpediaHooks::addMetaTags( $out, $skin ); 30 | 31 | return; 32 | } 33 | 34 | 35 | public static function addMetaTags( OutputPage $out, Skin $skin ) { 36 | $title = $skin->getTitle(); 37 | 38 | $category_array = $out->getCategories(); 39 | $category_string = (is_array($category_array)) ? implode(",", $category_array) : ''; 40 | $timestamp = $out->getRevisionTimestamp(); 41 | $timestamp = isset($timestamp) ? preg_replace( '/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', "$1-$2-$3 $4:$5:$6", $timestamp) : ''; 42 | $language = $_GET['uselang'] ?? $_GET['setlang'] ?? 'en'; 43 | $namespace = $title->getNsText(); 44 | 45 | $out->addMeta( 'platform', 'gcpedia' ); 46 | $out->addMeta( 'dcterms.language', $language ); 47 | $out->addMeta( 'dcterms.title', $title->getFullText() ); 48 | $out->addMeta( 'dcterms.type', $namespace ); 49 | $out->addMeta( 'dcterms.modified', $timestamp ); 50 | $out->addMeta( 'dcterms.description', strip_tags($out->mBodytext) ); 51 | 52 | if ( $title->inNamespace(NS_USER) ) 53 | $out->addMeta( 'dcterms.keywords', str_replace( '.', ' ', $title->getRootText() ) ); 54 | 55 | if ( $out->getPageTitle() == $skin->msg("listusers") ) 56 | $out->setRobotPolicy( 'noindex,follow' ); 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /extensions/GC_tcDisclaimer/Addaccepted.php: -------------------------------------------------------------------------------- 1 | getId()}, \"" . str_ireplace( "'", "-*-", $user->getName() ) . "\", '".date("d.m.y")."')"; 16 | 17 | $result = $dbr->query($queryString); 18 | 19 | 20 | return true; 21 | 22 | } 23 | 24 | class AddAccepted extends ApiBase { 25 | /** 26 | * Returns an array of allowed parameters (parameter name) => (default 27 | * value) or (parameter name) => (array with PARAM_* constants as keys) 28 | * Don't call this function directly: use getFinalParams() to allow 29 | * hooks to modify parameters as needed. 30 | * 31 | * Some derived classes may choose to handle an integer $flags parameter 32 | * in the overriding methods. Callers of this method can pass zero or 33 | * more OR-ed flags like GET_VALUES_FOR_HELP. 34 | * 35 | * @return array 36 | */ 37 | protected function getAllowedParams( /* $flags = 0 */ ) { 38 | // int $flags is not declared because it causes "Strict standards" 39 | // warning. Most derived classes do not implement it. 40 | return array( 41 | 'username' => '', 42 | 'userid' => -1); 43 | } 44 | function execute() 45 | { 46 | $dbw = wfGetDB( DB_MASTER ); 47 | 48 | // extract request parameters 49 | $params = $this->extractRequestParams(); 50 | $q = $params['userid']; 51 | 52 | $queryString = "SELECT 1 FROM `tc_accepted` WHERE user_id = {$q}"; 53 | $result = $dbw->query($queryString); 54 | $row = $dbw->fetchRow( $result ); 55 | 56 | if($row[0]!='') 57 | { 58 | $queryString = "UPDATE IGNORE `tc_accepted` SET date = '".date("d.m.y")."' WHERE user_id = {$q}"; 59 | $dbw->query($queryString); 60 | } 61 | else 62 | { 63 | $queryString = "INSERT INTO `tc_accepted` (user_id, username, date) VALUES ($q, \"{$params['username']}\", '".date("d.m.y")."')"; 64 | $dbw->query($queryString); 65 | } 66 | 67 | return true; 68 | 69 | } 70 | } 71 | 72 | ?> -------------------------------------------------------------------------------- /.azure/nginx.config: -------------------------------------------------------------------------------- 1 | server { 2 | listen 8080; 3 | listen [::]:8080; 4 | root /home/site/wwwroot; 5 | index index.php 6 | server_name example.com www.example.com; 7 | port_in_redirect off; 8 | 9 | 10 | client_max_body_size 32m; 11 | client_body_timeout 60; 12 | 13 | location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 14 | try_files $uri /gcwiki/index.php; 15 | expires max; 16 | log_not_found off; 17 | } 18 | 19 | location /wiki/ { 20 | rewrite ^/wiki/(.*)$ /gcwiki/index.php?title=$1&$args; 21 | } 22 | 23 | location = / { 24 | return 301 /wiki/Main_Page; 25 | } 26 | location = /gcwiki { 27 | return 301 /wiki/Main_Page; 28 | } 29 | 30 | location ~ ^/gcwiki/(index|load|api|thumb|opensearch_desc|rest|img_auth)\.php$ { 31 | include /etc/nginx/fastcgi_params; 32 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 33 | fastcgi_pass 127.0.0.1:9000; # or whatever port your PHP-FPM listens on 34 | } 35 | 36 | # Images 37 | location /gcwiki/images { 38 | # Separate location for images/ so .php execution won't apply 39 | } 40 | location /gcwiki/images/deleted { 41 | # Deny access to deleted images folder 42 | deny all; 43 | } 44 | # MediaWiki assets (usually images) 45 | location ~ ^/gcwiki/resources/(assets|lib|src) { 46 | try_files $uri =404; 47 | add_header Cache-Control "public"; 48 | expires 7d; 49 | } 50 | # Assets, scripts and styles from skins and extensions 51 | location ~ ^/gcwiki/(skins|extensions)/.+\.(css|js|gif|jpg|jpeg|png|svg|wasm|ttf|woff|woff2)$ { 52 | try_files $uri =404; 53 | add_header Cache-Control "public"; 54 | expires 7d; 55 | } 56 | 57 | # Favicon 58 | location = /favicon.ico { 59 | alias /home/site/wwwroot/gcwiki/extensions/SkinTweaksGCpedia/resources/images/favicon.ico; 60 | add_header Cache-Control "public"; 61 | expires 7d; 62 | } 63 | 64 | # Every other entry point will be disallowed. 65 | location /gcwiki/ { 66 | return 404; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /extensions/GCRandomImage/GCRandomImage.php: -------------------------------------------------------------------------------- 1 | tag 5 | * 6 | * @addtogroup Extensions 7 | * @author Rob Church 8 | * @copyright © 2006 Rob Church 9 | * @licence GNU General Public Licence 2.0 10 | */ 11 | 12 | if( defined( 'MEDIAWIKI' ) ) { 13 | 14 | $wgAutoloadClasses['RandomImage'] = dirname( __FILE__ ) . '/GCRandomImage.class.php'; 15 | $wgExtensionCredits['parserhook'][] = array( 16 | 'name' => 'RandomImage', 17 | 'author' => 'Rob Church', 18 | 'url' => 'http://www.mediawiki.org/wiki/Extension:RandomImage', 19 | 'svn-date' => '$LastChangedDate: 2008-11-30 03:15:22 +0000 (Sun, 30 Nov 2008) $', 20 | 'svn-revision' => '$LastChangedRevision: 44056 $', 21 | 'description' => 'Provides a random media picker using <randomimage />', 22 | 'descriptionmsg' => 'randomimage-desc', 23 | ); 24 | $wgExtensionMessagesFiles['RandomImage'] = dirname(__FILE__) . '/GCRandomImage.i18n.php'; 25 | $wgHooks['ParserAfterStrip'][] = 'RandomImage::stripHook'; 26 | $wgExtensionFunctions[] = 'efRandomImageSetup'; 27 | 28 | /** 29 | * Set this to true to disable the parser cache for pages which 30 | * contain a tag; this keeps the galleries up to date 31 | * at the cost of a performance overhead on page views 32 | */ 33 | $wgRandomImageNoCache = false; 34 | 35 | /** 36 | * Set this to true to ensure that images selected from the database 37 | * have an "IMAGE" MIME type 38 | */ 39 | $wgRandomImageStrict = !$wgMiserMode; 40 | 41 | /** 42 | * Extension initialisation function 43 | */ 44 | function efRandomImageSetup() { 45 | if(defined('MW_SUPPORTS_PARSERFIRSTCALLINIT')) { 46 | global $wgHooks; 47 | $wgHooks['ParserFirstCallInit'][] = 'efRandomImage'; 48 | } else { 49 | global $wgParser; 50 | efRandomImage($wgParser); 51 | } 52 | } 53 | function efRandomImage($parser) { 54 | $parser->setHook( 'randomimage', 'RandomImage::renderHook' ); 55 | return true; 56 | } 57 | 58 | } else { 59 | echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" ); 60 | exit( 1 ); 61 | } -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/src/api/findUsernameAJAX.php: -------------------------------------------------------------------------------- 1 | (default 16 | * value) or (parameter name) => (array with PARAM_* constants as keys) 17 | * Don't call this function directly: use getFinalParams() to allow 18 | * hooks to modify parameters as needed. 19 | * 20 | * Some derived classes may choose to handle an integer $flags parameter 21 | * in the overriding methods. Callers of this method can pass zero or 22 | * more OR-ed flags like GET_VALUES_FOR_HELP. 23 | * 24 | * @return array 25 | */ 26 | protected function getAllowedParams( /* $flags = 0 */ ) { 27 | // int $flags is not declared because it causes "Strict standards" 28 | // warning. Most derived classes do not implement it. 29 | return array( 30 | 'emailinput' => ''); 31 | } 32 | 33 | 34 | public function execute() { 35 | // extract request parameters 36 | $params = $this->extractRequestParams(); 37 | $emailInput = $params['emailinput']; 38 | 39 | global $wgLang; 40 | $output = ""; 41 | 42 | if ( !Sanitizer::validateEmail( $emailInput ) ){ 43 | $this->getResult()->addValue( null, $this->getModuleName(), "418" ); 44 | return 1; 45 | } 46 | 47 | $dbProvider = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); 48 | $dbr = $dbProvider->getReplicaDatabase(); 49 | 50 | // find and return the FIRST username associated with the email 51 | $row = $dbr->newSelectQueryBuilder() 52 | ->select( ['user_name'] ) 53 | ->from( 'user' ) 54 | ->where( [ 'user_email' => $emailInput ] ) 55 | ->caller( __METHOD__ )->fetchRow(); 56 | 57 | if($row){ 58 | $output = $row->user_name; 59 | }else{ 60 | if($wgLang->getCode() == 'fr') { 61 | $output = "Nom d'utilisateur n'existe pas"; // Translated; verify 62 | }else{ 63 | $output = "Username not found"; 64 | } 65 | } 66 | 67 | $this->getResult()->addValue( null, $this->getModuleName(), $output ); 68 | 69 | return ""; 70 | } 71 | 72 | } 73 | 74 | ?> -------------------------------------------------------------------------------- /extensions/Sudo/Sudo.php: -------------------------------------------------------------------------------- 1 | __FILE__, 19 | 'name' => 'Sudo', 20 | 'version' => '0.3.0', 21 | 'author' => '[http://danf.ca/mw/ Daniel Friesen]', 22 | 'descriptionmsg' => 'sudo-desc', 23 | 'url' => 'https://www.mediawiki.org/wiki/Extension:Sudo', 24 | 'license-name' => 'GPL-2.0+', 25 | ); 26 | 27 | // Set up i18n and the new special page 28 | $dir = dirname( __FILE__ ) . '/'; 29 | $wgMessagesDirs['Sudo'] = __DIR__ . '/i18n'; 30 | $wgExtensionMessagesFiles['Sudo'] = $dir . 'Sudo.i18n.php'; 31 | $wgExtensionMessagesFiles['SudoAlias'] = $dir . 'Sudo.alias.php'; 32 | $wgAutoloadClasses['SpecialSudo'] = $dir . 'SpecialSudo.php'; 33 | $wgSpecialPages['Sudo'] = 'SpecialSudo'; 34 | 35 | // New user right, required to use Special:Sudo 36 | $wgAvailableRights[] = 'sudo'; 37 | 38 | // New log type, all sudo actions are logged to this log (Special:Log/sudo) 39 | $wgLogTypes[] = 'sudo'; 40 | $wgLogNames['sudo'] = 'sudo-logpagename'; 41 | $wgLogHeaders['sudo'] = 'sudo-logpagetext'; 42 | $wgLogActions['sudo/sudo'] = 'sudo-logentry'; 43 | 44 | // Hooked functions 45 | $wgHooks['UserLogoutComplete'][] = 'wfSudoLogout'; 46 | $wgHooks['PersonalUrls'][] = 'wfSudoPersonalUrls'; 47 | 48 | function wfSudoLogout( &$user, &$inject_html ) { 49 | // Unset wsSudoId when we logout. 50 | // We don't want to be in a sudo login while logged out. 51 | unset( $_SESSION['wsSudoId'] ); 52 | return true; 53 | } 54 | 55 | function wfSudoPersonalUrls( &$personal_urls, &$title ) { 56 | // Replace logout link with a unsudo link while in a sudo login. 57 | if( isset( $_SESSION['wsSudoId'] ) && $_SESSION['wsSudoId'] > 0 ) { 58 | $personal_urls['logout'] = array( 59 | 'text' => wfMsg( 'sudo-personal-unsudo' ), 60 | 'href' => Skin::makeSpecialUrl( 'Sudo', 'mode=unsudo' ), 61 | 'active' => false 62 | ); 63 | } 64 | return true; 65 | } 66 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCwiki/resources/css/skintweaksgcwiki.css: -------------------------------------------------------------------------------- 1 | 2 | div#mw-head { 3 | top: 35px; 4 | } 5 | 6 | #ca-favorite a:focus, 7 | #ca-unfavorite a:focus, 8 | #searchInput:focus { 9 | outline: -webkit-focus-ring-color auto 1px !important; 10 | } 11 | 12 | .vector-legacy-sidebar#mw-panel{ 13 | top:90px; 14 | } 15 | 16 | #collab-fip-header{ 17 | height:35px; 18 | clear:both; 19 | background-color:white; 20 | } 21 | #app-brand-name{ 22 | background:#6D4E86; 23 | position:absolute; 24 | top:37px; 25 | z-index:1; 26 | clear:both; 27 | float:left; 28 | font-size:24px; 29 | color:white; 30 | padding:8px 59px 6px 62px; 31 | } 32 | #app-brand-name:before{ 33 | content: ''; display: block; position: absolute; left: 197px; top: 0; width: 0; height: 0; border-top: 20px solid transparent; border-bottom: 22px solid transparent; border-left: 20px solid #6D4E86; clear: both; 34 | } 35 | #app-brand-name-mobile:before{ 36 | content: ''; display: block; position: absolute; left: 197px; top: 0; width: 0; height: 0; border-top: 20px solid transparent; border-bottom: 22px solid transparent; border-left: 20px solid #6D4E86; clear: both; 37 | } 38 | #app-brand-name-mobile { 39 | display:none; 40 | } 41 | #app-brand-name-mobile a { 42 | text-decoration: none; 43 | color:white; 44 | } 45 | 46 | 47 | 48 | #p-zz-gctools{ 49 | list-style:none; 50 | padding:5px; 51 | margin: 0 auto; 52 | font-weight:bold; 53 | font-size: 13px; 54 | } 55 | #gt-acc::before{ 56 | content: ''; 57 | margin-right: 3px; 58 | display: inline-block; 59 | width: 25px; 60 | height: 25px; 61 | background-image: url( ../images/mini_wiki_icon.png ); 62 | background-size: 25px; 63 | position: relative; 64 | top: 7px; 65 | } 66 | #gt-gcc::before{ 67 | content: ''; 68 | margin-right: 3px; 69 | display: inline-block; 70 | width: 25px; 71 | height: 25px; 72 | background-image: url( ../images/mini_collab_icon.png ); 73 | background-size: 25px; 74 | position: relative; 75 | top: 7px; 76 | } 77 | #gt-mess::before{ 78 | content: ''; 79 | margin-right: 3px; 80 | display: inline-block; 81 | width: 25px; 82 | height: 25px; 83 | background-image: url( ../images/message_icon.png ); 84 | background-size: 25px; 85 | position: relative; 86 | top: 7px; 87 | } 88 | -------------------------------------------------------------------------------- /pipelines/deploy_mediawiki_version.yaml: -------------------------------------------------------------------------------- 1 | trigger: # don't trigger automatically 2 | - none 3 | 4 | 5 | 6 | jobs: 7 | - job: build 8 | displayName: build specific MW version code 9 | pool: 10 | vmImage: ubuntu-latest 11 | steps: 12 | - bash: | 13 | php --version 14 | composer --version 15 | git --version 16 | curl --version 17 | mkdir -p /tmp/gcpedia_build/MW_$MEDIAWIKI_VERSION && cd /tmp/gcpedia_build/MW_$MEDIAWIKI_VERSION 18 | curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz" -o mediawiki.tar.gz 19 | curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz.sig" -o mediawiki.tar.gz.sig 20 | export GNUPGHOME="$(mktemp -d)" 21 | gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \ 22 | D7D6767D135A514BEB86E9BA75682B08E8A3FEC4 \ 23 | 441276E9CCD15F44F6D97D18C119E1A64D70938E \ 24 | F7F780D82EBFB8A56556E7EE82403E59F9F8CD79 \ 25 | 1D98867E82982C8FE0ABC25F9B69B3109D3BB7B0 26 | gpg --batch --verify mediawiki.tar.gz.sig mediawiki.tar.gz 27 | tar -x --strip-components=1 -f mediawiki.tar.gz 28 | gpgconf --kill all 29 | rm -r "$GNUPGHOME" mediawiki.tar.gz.sig mediawiki.tar.gz 30 | ls -la 31 | displayName: prepare gcpedia code build environment 32 | env: 33 | MEDIAWIKI_MAJOR_VERSION: $(MEDIAWIKI_MAJOR_VERSION) 34 | MEDIAWIKI_VERSION: $(MEDIAWIKI_VERSION) 35 | 36 | - task: ArchiveFiles@2 37 | displayName: 'Archive files' 38 | inputs: 39 | rootFolderOrFile: '/tmp/gcpedia_build' 40 | includeRootFolder: true 41 | archiveType: zip 42 | archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip 43 | replaceExistingArchive: true 44 | 45 | - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip 46 | displayName: 'Upload package' 47 | artifact: drop 48 | 49 | - job: deploy 50 | displayName: deploy gcpedia site code 51 | pool: $(deployPool) 52 | dependsOn: build 53 | condition: succeeded() 54 | steps: 55 | - download: current 56 | artifact: drop 57 | - task: AzureWebApp@1 58 | displayName: 'Deploy Azure Web App gcpedia code' 59 | inputs: 60 | azureSubscription: $(azSubServiceConnection) 61 | appName: $(appName) 62 | package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip 63 | -------------------------------------------------------------------------------- /init/init.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | check_database() { 5 | retries=5 6 | for ((i=1; i<=$retries; i++)); do 7 | echo "Checking MySQL server connection , ($i/$retries)" 8 | if php /init/checkDB.php; then 9 | echo "MySQL server is up and running!" 10 | return 0 11 | fi 12 | sleep 5 13 | done 14 | 15 | echo "Error: Could not connect to MySQL server after $retries attempts." 16 | exit 1 17 | } 18 | 19 | check_setup() { 20 | # Install logic 21 | # Check if the database is available. 22 | # If it's not, remove any exising LocalSettings.php link if present, then do an install, link the LocalSettings.php, and run the update script. 23 | # If it is, if LocalSettings.php isn't linked, link it and run update 24 | local RUN_UPDATE="false" 25 | if ! php /init/checkDB.php ${DBNAME} categorylinks; then 26 | if [ -e /var/www/html/LocalSettings.php ]; then 27 | echo "Dangling LocalSettings.php found, unlinking" 28 | rm LocalSettings.php 29 | fi 30 | 31 | echo "Database ${DBNAME} not found, running install" 32 | php maintenance/run.php install.php \ 33 | --dbserver=${DBHOST} --dbtype=${DBTYPE} --dbuser=${DBUSER} --dbpass=${DBPASS} --dbname=${DBNAME} \ 34 | --scriptpath='' --server="${WIKI_PROTOCOL}://${WIKI_HOST}${WIKI_PORT}" --lang=en \ 35 | --pass=adminpassword 'GCpedia' 'admin' 36 | local status=$? 37 | if [ $status -ne 0 ]; then 38 | echo "Error: MediaWiki installation failed with status $status" 39 | sleep 1000 40 | exit $status 41 | fi 42 | # overwrite installation LocalSettings with site specific 43 | cp /site/LocalSettings.php /var/www/html/LocalSettings.php 44 | # make sure an update is run for the sake of extensions 45 | RUN_UPDATE="true" 46 | else 47 | echo "Database ${DBNAME} already exists" 48 | fi 49 | if [ ! -f /var/www/html/LocalSettings.php ]; then 50 | echo "LocalSettings.php not found, linking" 51 | cp /site/LocalSettings.php /var/www/html/LocalSettings.php 52 | RUN_UPDATE="true" 53 | fi 54 | if [ "$RUN_UPDATE" = "true" ]; then 55 | echo "running update maintenance script" 56 | php /var/www/html/maintenance/run.php update.php -q 57 | fi 58 | } 59 | 60 | check_database 61 | 62 | # automated install 63 | echo "INIT ${INIT}" 64 | 65 | if [ $INIT ]; then 66 | check_setup 67 | else 68 | echo "skipping initialization check" 69 | fi 70 | 71 | echo "Continuing with '$@'" 72 | $@ 73 | -------------------------------------------------------------------------------- /extensions/GC_tcDisclaimer/updateEmailApi.php: -------------------------------------------------------------------------------- 1 | (default 8 | * value) or (parameter name) => (array with PARAM_* constants as keys) 9 | * Don't call this function directly: use getFinalParams() to allow 10 | * hooks to modify parameters as needed. 11 | * 12 | * Some derived classes may choose to handle an integer $flags parameter 13 | * in the overriding methods. Callers of this method can pass zero or 14 | * more OR-ed flags like GET_VALUES_FOR_HELP. 15 | * 16 | * @return array 17 | */ 18 | protected function getAllowedParams( /* $flags = 0 */ ) { 19 | // int $flags is not declared because it causes "Strict standards" 20 | // warning. Most derived classes do not implement it. 21 | return array( 22 | 'newEmail' => '', 23 | 'userId' => -1, 24 | 'language' => ''); 25 | } 26 | function execute() 27 | { 28 | global $wgEnableEmail, $wgEmailAuthentication, $wgLang; 29 | 30 | $params = $this->extractRequestParams(); 31 | 32 | $user = User::newFromId($params['userId']); 33 | $newEmail = $params['newEmail']; 34 | $newEmail = trim($newEmail); 35 | $oldEmail = $user->getEmail(); 36 | $oldEmail = trim($oldEmail); 37 | 38 | $wgLang = Language::factory($params['language']); 39 | 40 | # returns true on success 41 | $validEmail = Sanitizer::validateEmail( $newEmail ); 42 | 43 | if( $validEmail === true && $newEmail != $oldEmail ) { 44 | 45 | # set new email + invalidate it 46 | $user->setEmail( $newEmail ); 47 | 48 | # update var for form output 49 | $currentEmail = $user->getEmail(); // $newEmail; 50 | 51 | if( $wgEmailAuthentication ) { 52 | # send confirmation email 53 | $result = $user->sendConfirmationMail(); 54 | 55 | if( !$result->isOK() ) { //test me 56 | $err = wfMsg( 'mailerror', htmlspecialchars( $result->getMessage() ) ); 57 | } else { 58 | $confmessage = wfMsg( 'emailupdate-confirm' ); 59 | } 60 | } 61 | $user->saveSettings(); 62 | 63 | } else { 64 | # get error 65 | if( $newEmail == $oldEmail ) { 66 | $err = wfMsg('emailupdate-duplicate-error'); 67 | } else { 68 | $err = wfMsg('invalidemailaddress'); 69 | } 70 | } 71 | 72 | if( $oldEmail != $newEmail ) { 73 | wfRunHooks( 'PrefsEmailAudit', array( $user, $oldEmail, $newEmail ) ); 74 | } 75 | 76 | if ( $confmessage ) 77 | $this->getResult()->addValue( null, $this->getModuleName(), $confmessage ); 78 | else 79 | $this->getResult()->addValue( null, $this->getModuleName(), $err ); 80 | 81 | return true; 82 | } 83 | } 84 | 85 | ?> -------------------------------------------------------------------------------- /setup_mediawiki.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -x 4 | 5 | # Environment variables 6 | MEDIAWIKI_EXT_BRANCH=${MEDIAWIKI_EXT_BRANCH:-REL1_40} 7 | 8 | # Install required packages 9 | apt-get update 10 | apt-get upgrade -y 11 | apt-get install -y --no-install-recommends \ 12 | git \ 13 | libzip-dev \ 14 | ffmpeg \ 15 | htmldoc \ 16 | unzip \ 17 | zlib1g-dev \ 18 | zip 19 | 20 | # Check if docker-php-ext-install exists and use a fallback if it doesn't 21 | if command -v docker-php-ext-install &> /dev/null; then 22 | docker-php-ext-install zip 23 | else 24 | apt-get install -y php-zip 25 | fi 26 | 27 | rm -rf /var/lib/apt/lists/* 28 | 29 | # Set working directory 30 | WORKDIR=${WORKDIR:-/var/www/html} 31 | 32 | # Copy local files 33 | if [ -d "/setup/site" ]; then 34 | cp /setup/site/mediawiki.ini /usr/local/etc/php/conf.d/mediawiki.ini 35 | cp /setup/site/*php $WORKDIR 36 | cp /setup/site/LocalSettings.php $WORKDIR 37 | elif [ -d "./site" ]; then 38 | cp ./site/mediawiki.ini /usr/local/etc/php/conf.d/mediawiki.ini 39 | cp ./site/*php $WORKDIR 40 | cp ./site/LocalSettings.php $WORKDIR 41 | fi 42 | 43 | # Clone MediaWiki extensions 44 | EXTENSIONS=( 45 | "AJAXPoll" 46 | "AjaxShowEditors" 47 | "CategoryWatch" 48 | "CharInsert" 49 | "TimedMediaHandler" 50 | "CSS" 51 | "EditUser" 52 | "LookupUser" 53 | "UserMerge" 54 | "intersection" 55 | "RSS" 56 | "UniversalLanguageSelector" 57 | "MobileFrontend" 58 | "IframePage" 59 | "googleAnalytics" 60 | "Lingo" 61 | "DeletePagesForGood" 62 | "MsCalendar" 63 | "RandomImage" 64 | "Widgets" 65 | "PluggableAuth" 66 | "OpenIDConnect" 67 | "DismissableSiteNotice" 68 | ) 69 | 70 | for EXT in "${EXTENSIONS[@]}"; do 71 | git clone --depth=1 -b $MEDIAWIKI_EXT_BRANCH "https://gerrit.wikimedia.org/r/mediawiki/extensions/$EXT" "$WORKDIR/extensions/$EXT" 72 | done 73 | 74 | # Additional extensions 75 | git clone --depth=1 https://github.com/debtcompliance/PdfBook "$WORKDIR/extensions/PdfBook" 76 | git clone --depth=1 https://gitlab.com/organicdesign/TreeAndMenu "$WORKDIR/extensions/TreeAndMenu" 77 | 78 | # FIXME issues with github action 79 | git config --global --add safe.directory '*' 80 | 81 | # Change ownership 82 | chown -R www-data:www-data $WORKDIR 83 | 84 | # Install Composer dependencies for specific extensions 85 | COMPOSER_EXTENSIONS=( 86 | "OpenIDConnect" 87 | "PluggableAuth" 88 | "TimedMediaHandler" 89 | "Widgets" 90 | ) 91 | 92 | for EXT in "${COMPOSER_EXTENSIONS[@]}"; do 93 | cd "$WORKDIR/extensions/$EXT" && composer install --no-dev --no-interaction && cd ../.. 94 | done 95 | -------------------------------------------------------------------------------- /extensions/EmailUpdate/EmailUpdate.i18n.php: -------------------------------------------------------------------------------- 1 | 'Change user\'s email', 8 | 'emailupdate-username' => 'Username:', 9 | 'emailupdate-notfound' => 'User not found', 10 | 'emailupdate-success' => 'E-mail successfully updated', 11 | 'emailupdate-autoconfirm' => 'Automatically confirm email address', 12 | 13 | # GCDisclaimer 14 | 'emailupdate-confirm-address' => 'I confirm this is my current Government of Canada email address', 15 | 'emailupdate-update' => 'If this is not your current Government of Canada email address, please provide the correct one: ', 16 | 'emailupdate-current' => 'Your email address is currently on record as', 17 | 'emailupdate-duplicate-error' => 'Your new email can not be the same as your old one', 18 | 'emailupdate-nongc-error' => 'You must use a valid Government of Canada email address', 19 | 'emailupdate-confirm' => '
A validation email has been sent to the new address.
To complete the validation process you must navigate to the link provided in the email.', 20 | 'emailupdate-help' => 'If you require help, email us', 21 | 'emailupdate-submit' => 'Update Email', 22 | 'emailupdate-language' => 'En français', 23 | 24 | ); 25 | 26 | 27 | $messages['fr'] = array( 28 | 'emailupdate' => 'Changer Courriel de l’utilisateur', 29 | 'emailupdate-username' => 'Nom de l’utilisateur :', 30 | 'emailupdate-notfound' => 'Utilisateur introuvable', 31 | 'emailupdate-success' => 'Mise à jour réussie de l’adresse de courriel', 32 | 'emailupdate-autoconfirm' => 'Confirmation automatique de l’adresse de courriel', 33 | 34 | 'emailupdate-confirm-address' => 'Je confirme qu\'il s\'agit de mon courriel actuel du gouvernement du Canada', 35 | 'emailupdate-update' => 'S\'il ne s\'agit pas de votre courriel actuel du gouvernement du Canada, veuillez le mettre à jour : ', 36 | 'emailupdate-current' => 'Les dossiers indiquent que votre adresse courriel actuelle est la suivante', 37 | 'emailupdate-duplicate-error' => 'Votre nouvelle adresse courriel ne peut être la même que l\'ancien.', 38 | 'emailupdate-nongc-error' => 'Vous devez utiliser une adresse courriel du gouvernement du Canada qui est valide.', 39 | 'emailupdate-confirm' => '
Un message de validation a été envoyé à votre nouvelle adresse courriel.
Pour compléter le processus de validation, vous devez accéder au lien qui figure dans ce courriel.', 40 | 'emailupdate-help' => 'Si vous avez besoin d\'aide, écrivez-nous', 41 | 'emailupdate-submit' => 'Mettre à jour votre adresse courriel', 42 | 'emailupdate-language' => 'In English', 43 | 44 | ); -------------------------------------------------------------------------------- /azure-pipelines-deploy.yaml: -------------------------------------------------------------------------------- 1 | trigger: # don't trigger automatically for now 2 | - none 3 | 4 | 5 | 6 | jobs: 7 | - job: build 8 | displayName: build gcpedia site code 9 | pool: 10 | vmImage: ubuntu-latest 11 | steps: 12 | - bash: | 13 | php --version 14 | composer --version 15 | git --version 16 | curl --version 17 | git submodule init && git submodule update --recursive --init 18 | cd extensions/OpenIDConnect && composer install --no-dev --no-interaction 19 | cd ../PluggableAuth && composer install --no-dev --no-interaction 20 | cd ../TimedMediaHandler && composer install --no-dev --no-interaction 21 | cd ../Widgets && composer install --no-dev --no-interaction 22 | mkdir -p /tmp/gcpedia_build/gcwiki && cd /tmp/gcpedia_build/gcwiki 23 | MEDIAWIKI_MAJOR_VERSION=1.40 && MEDIAWIKI_VERSION=1.40.2 24 | curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz" -o mediawiki.tar.gz 25 | curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz.sig" -o mediawiki.tar.gz.sig 26 | export GNUPGHOME="$(mktemp -d)" 27 | gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \ 28 | D7D6767D135A514BEB86E9BA75682B08E8A3FEC4 \ 29 | 441276E9CCD15F44F6D97D18C119E1A64D70938E \ 30 | F7F780D82EBFB8A56556E7EE82403E59F9F8CD79 \ 31 | 1D98867E82982C8FE0ABC25F9B69B3109D3BB7B0 32 | gpg --batch --verify mediawiki.tar.gz.sig mediawiki.tar.gz 33 | tar -x --strip-components=1 -f mediawiki.tar.gz 34 | gpgconf --kill all 35 | rm -r "$GNUPGHOME" mediawiki.tar.gz.sig mediawiki.tar.gz 36 | cp -r $(Pipeline.Workspace)/s/* ./ 37 | cp -r $(Pipeline.Workspace)/s/.azure ./ 38 | ls -la 39 | displayName: prepare gcpedia code build environment 40 | 41 | - task: ArchiveFiles@2 42 | displayName: 'Archive files' 43 | inputs: 44 | rootFolderOrFile: '/tmp/gcpedia_build/gcwiki' 45 | includeRootFolder: true 46 | archiveType: zip 47 | archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip 48 | replaceExistingArchive: true 49 | 50 | - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip 51 | displayName: 'Upload package' 52 | artifact: drop 53 | 54 | - job: deploy 55 | displayName: deploy gcpedia site code 56 | pool: $(deployPool) 57 | dependsOn: build 58 | condition: succeeded() 59 | steps: 60 | - download: current 61 | artifact: drop 62 | - task: AzureWebApp@1 63 | displayName: 'Deploy Azure Web App gcpedia code' 64 | inputs: 65 | azureSubscription: $(azSubServiceConnection) 66 | appName: $(appName) 67 | package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip 68 | -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "mandatory": "All fields are mandatory", 3 | "validgcemail": "Valid Government of Canada email account", 4 | "validgcemailnote": "Note: If your government domain is not listed, choose \"Other...\" and input it manually", 5 | "email-example": "", 6 | "accountname": "Your GCPEDIA user name (system-generated, based on your Government of Canada email account)", 7 | "password-text": "Ensure the two passwords match", 8 | "terms-conditions-message": "Please review the [[GCPEDIA:Terms_and_conditions_of_use | Terms and conditions of use]]", 9 | "terms-conditions-check": "I acknowledge and accept the terms and conditions of use.", 10 | "completeallfields": "All fields must be properly completed before an account can be created.", 11 | "forgotusername": "Forgot your GCpedia login details?", 12 | "forgotusername-text1": "Forgot your GCpedia username? ", 13 | "forgotusername-text1-2": "Type in your GCpedia-associated email address below.", 14 | "forgotusername-text2": "If found, your Username will be displayed in the Username field above.", 15 | "enteremail": "Enter your email :", 16 | "findusername": "Find username", 17 | "categorywatch-emailprefs": "E-mail me when a category on my watchlist is changed", 18 | "email-in-use": "E-mail already in use", 19 | "ssotitle": "GC2.0 Tools Simplified Sign-on", 20 | "ssobody": "Use the GC2.0 Tools Simplified Sign-on to log in to GCpedia and GCconnex simultaneously.", 21 | "custom-create-email-input": "Email", 22 | "registration-help-section-head": "Frequently asked questions about creating an account", 23 | "registration-help-section-link1": "[http://www.gcpedia.gc.ca/wiki/Help:Frequently_asked_questions_about_creating_an_account#I.E2.80.99ve_created_my_account._What_happens_next.3F I've created my account. What happens next?]", 24 | "registration-help-section-link2": "[http://www.gcpedia.gc.ca/wiki/Help:Frequently_asked_questions_about_creating_an_account#I_did_not_receive_the_email_confirming_that_my_account_has_been_created._What_should_I_do.3F I did not receive the email confirming that my account has been created. What should I do?]", 25 | "registration-help-section-link3": "[http://www.gcpedia.gc.ca/wiki/Help:Frequently_asked_questions_about_creating_an_account#_Why_do_I_have_to_provide_my_Government_of_Canada_email_account_information.3F Why do I have to provide my Government of Canada email account information?]", 26 | "registration-help-section-link4": "[http://www.gcpedia.gc.ca/wiki/Help:Frequently_asked_questions_about_creating_an_account#_Why_does_GCPEDIA_create_my_user_name_for_me.3F Why does GCPEDIA create my user name for me?]", 27 | "registration-help-section-contactus": "For more information or assistance, please [[Help | contact us]]", 28 | "gcusercreate-loggedin": "You are already logged in." 29 | } -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/resources/css/skintweaksgcpedia.css: -------------------------------------------------------------------------------- 1 | div#mw-head { 2 | top: 45px; 3 | } 4 | 5 | .vector-legacy-sidebar#mw-panel{ 6 | top:60px; 7 | } 8 | 9 | #p-logo a{ 10 | height: 190px !important; 11 | } 12 | #p-navigation{ 13 | margin-top: 30px; 14 | } 15 | 16 | 17 | .btn-primary{ 18 | color:#fff; 19 | background-color:#1F1F72 !important; 20 | } 21 | #wb-info .brand { 22 | border-top: 4px solid #46055C ; 23 | } 24 | #app-brand { 25 | background-color: #1C507F; 26 | color: #fff; 27 | min-height: 45px; 28 | } 29 | .app-name { 30 | font-size: 1.6em; 31 | padding-top: 5px; 32 | padding-left: 20px; 33 | background-color: #1F1F72; 34 | min-height: 45px; 35 | max-width: 165px; 36 | margin-left: -15px; 37 | } 38 | .app-name:before { 39 | content: ''; 40 | display: block; 41 | position: absolute; 42 | left: 165px; 43 | top: 0; 44 | width: 0; 45 | height: 0; 46 | border-top: 22.5px solid transparent; 47 | border-bottom: 22.5px solid transparent; 48 | border-left: 20px solid #1F1F72; 49 | clear: both; 50 | } 51 | #app-brand a { 52 | text-decoration: none; 53 | color: #fff; 54 | } 55 | .bold-gc { 56 | font-weight: 800; 57 | } 58 | 59 | .tools-navigator{ 60 | font-size: 1.1em; 61 | margin-top:10px; 62 | 63 | } 64 | 65 | .tools-navigator-menu{ 66 | top:35px; 67 | } 68 | 69 | .tools-navigator-menu:before{ 70 | content: ''; 71 | display: block; 72 | position: absolute; 73 | left: 80%; 74 | top: -10px; 75 | width: 0; 76 | height: 0; 77 | border-left: 12px solid transparent; 78 | border-right: 12px solid transparent; 79 | 80 | border-bottom: 12px solid #fff; 81 | clear: both; 82 | } 83 | .tools-navigator-menu:after{ 84 | content: ''; 85 | display: block; 86 | position: absolute; 87 | left: 80%; 88 | top: -12px; 89 | width: 0; 90 | height: 0; 91 | border-left: 12px solid transparent; 92 | border-right: 12px solid transparent; 93 | 94 | border-bottom: 12px solid rgba(0, 0, 0, 0.15) ; 95 | clear: both; 96 | } 97 | 98 | #tools-dropdown{ 99 | cursor: pointer; 100 | } 101 | 102 | .tools-dropdown-holder{ 103 | min-width: 300px; 104 | color: black; 105 | padding: 10px; 106 | } 107 | .tools-navigator-menu li a{ 108 | color:black; 109 | } 110 | .tool-link{ 111 | font-size:16px; 112 | padding:11px 0 0 20px; 113 | } 114 | 115 | .tool-link:hover{ 116 | text-decoration: underline; 117 | } 118 | 119 | .tool-link-icon{ 120 | width: 25px; 121 | margin:0 2px 3px 0; 122 | 123 | } 124 | 125 | /*Share to GCconnex action*/ 126 | 127 | .gccon-share{ 128 | font-size:0.85em; 129 | margin-right:8px; 130 | margin-top: 7px; 131 | display: inline-block; 132 | text-align: center; 133 | cursor: pointer; 134 | border: 1px solid #047177; 135 | padding:4px 7px; 136 | border-radius: 4px; 137 | 138 | } -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "mandatory": "Tous les champs sont obligatoires", 3 | "validgcemail": "Votre compte de courriel du gouvernement du Canada", 4 | "validgcemailnote": "NB: Si vous ne trouvez pas le domaine de votre ministère dans la liste, choisissez <> et entrer le manuellement", 5 | "email-example": "", 6 | "accountname": "Votre nom d'utilisateur GCPEDIA (opération automatisée, d'après votre compte de courriel du Gouvernement du Canada).", 7 | "terms-conditions-message": "Veuillez SVP examiner les [[GCPEDIA:Conditions_d'utilisation]]", 8 | "terms-conditions-check": "J'ai lu et je comprends les documents ci-dessous.", 9 | "completeallfields": "Tous les champs doivent être complétés comme il se droit.", 10 | "forgotusername": "Vous avez oublié vos détails de connexion pour GCpédia?", 11 | "forgotusername-text1": "Nom d'utilisateur de GCpédia oublié? ", 12 | "forgotusername-text1-2": "Entrez l'adresse courriel de votre compte GCPEDIA.", 13 | "forgotusername-text2": "Si trouvé, votre nom d'utilisateur sera affiché dans le champ Nom d'utilisateur ci-dessus.", 14 | "enteremail": "Entrez votre adresse courriel :", 15 | "findusername": "Chercher le nom d'utilisateur", 16 | "categorywatch-emailprefs": "Veuillez m’envoyer un courriel lorsqu’une catégorie de ma liste à surveiller est modifiée.", 17 | "email-in-use": "Courriel déjà utilise", 18 | "password-text": "Assurez-vous que les deux mots de passe sont identiques", 19 | "ssotitle": "Connexion simplifiée pour les Outils GC2.0", 20 | "ssobody": "Utilisez la Connexion simplifiée pour les Outils GC2.0 pour vous connecter à GCpédia et GCconnex simultanément.", 21 | "custom-create-email-input": "Courriel", 22 | "registration-help-section-head": "Foire aux questions sur la création d'un compte", 23 | "registration-help-section-link1": "[http://www.gcpedia.gc.ca/wiki/Aide:_Foire_aux_questions_sur_la_création_d’un_compte#J.E2.80.99ai_cr.C3.A9.C3.A9_mon_compte._Quelles_sont_les_.C3.A9tapes_suivantes.3F J'ai créé mon compte. Quelles sont les étapes suivantes?]", 24 | "registration-help-section-link2": "[http://www.gcpedia.gc.ca/wiki/Aide:_Foire_aux_questions_sur_la_création_d’un_compte#Je_n.E2.80.99ai_pas_re.C3.A7u_le_courriel_confirmant_la_cr.C3.A9ation_de_mon_compte._Que_dois-je_faire.3F Je n'ai pas reçu de confirmation par courrier électronique que mon compte fut créé. Que dois-je faire?]", 25 | "registration-help-section-link3": "[http://www.gcpedia.gc.ca/wiki/Aide:_Foire_aux_questions_sur_la_création_d’un_compte#Pourquoi_dois-je_fournir_des_renseignements_sur_mon_compte_courriel_du_gouvernement_du_Canada.3F Pourquoi dois-je fournir des renseignements sur mon compte courriel du gouvernement du Canada?]", 26 | "registration-help-section-link4": "[http://www.gcpedia.gc.ca/wiki/Aide:_Foire_aux_questions_sur_la_création_d’un_compte#Pourquoi_GCPEDIA_cr.C3.A9e-t-il_lui-m.C3.AAme_mon_nom_d.E2.80.99utilisateur.3F Pourquoi GCPEDIA crée-t-il lui-même mon nom d'utilisateur?]", 27 | "registration-help-section-contactus": "Si vous désirez des précisions ou de l'aide, veuillez[[Aide | communiquer avec nous]]", 28 | "gcusercreate-loggedin": "Vous êtes déjà connecté{{GENDER:$1||e|(e)}}." 29 | } -------------------------------------------------------------------------------- /azure-pipelines-PR.yaml: -------------------------------------------------------------------------------- 1 | trigger: # don't trigger outside PRs 2 | - none 3 | 4 | pr: # Trigger the pipeline only for PRs targeting master branch 5 | - main 6 | 7 | 8 | variables: 9 | imageRepository: 'wiki' 10 | location: 'canadacentral' 11 | RGtemplateFile: '.bicep/PR/test-instance-setup.bicep' 12 | commentStringGCWiki: 'GCWiki test instance up at:' # String used for PR comment to provide link to review site 13 | commentStringGCPedia: 'GCPedia test instance up at:' 14 | 15 | pool: 16 | vmImage: 'ubuntu-latest' 17 | 18 | 19 | jobs: 20 | - job: setup 21 | displayName: build and set up review site 22 | steps: 23 | - task: Docker@2 24 | displayName: Build and Push Container image to ACR 25 | inputs: 26 | command: 'buildAndPush' 27 | containerRegistry: $(acrServiceConnection) 28 | repository: '$(imageRepository)_pr-$(System.PullRequest.PullRequestNumber)' # per-PR repos for easier cleanup 29 | tags: '$(Build.SourceVersion)' 30 | 31 | - task: AzureCLI@2 32 | displayName: set up review / test instance using bicep 33 | condition: succeeded() 34 | inputs: 35 | azureSubscription: $(azSubServiceConnection) 36 | scriptType: bash 37 | scriptLocation: inlineScript 38 | inlineScript: | 39 | az deployment sub create --location $LOCATION --template-file $TEMPLATE_FILE \ 40 | --parameters prNumber=$PR dbServerName=$DBSERVERNAME dbServerRG=$DBRG containerTag=$TAG dbServerPass=$(REVIEW_DB_SERVER_PASS) \ 41 | subnetID=$SUBNET_ID planID=$PLAN_ID acrName=$ACR_NAME siteType=gcwiki 42 | az deployment sub create --location $LOCATION --template-file $TEMPLATE_FILE \ 43 | --parameters prNumber=$PR dbServerName=$DBSERVERNAME dbServerRG=$DBRG containerTag=$TAG dbServerPass=$(REVIEW_DB_SERVER_PASS) \ 44 | subnetID=$SUBNET_ID planID=$PLAN_ID acrName=$ACR_NAME siteType=gcpedia 45 | env: 46 | DBRG: $(db_resource_group) 47 | DBSERVERNAME: $(review_db_server_name) 48 | TAG: $(Build.SourceVersion) 49 | PR: $(System.PullRequest.PullRequestNumber) 50 | SUBNET_ID: $(review_subnet_ID) 51 | PLAN_ID: $(review_plan_ID) 52 | LOCATION: $(location) 53 | TEMPLATE_FILE: $(RGtemplateFile) 54 | ACR_NAME: $(acrName) 55 | 56 | - bash: | 57 | TEST=$(curl -L https://api.github.com/repos/gctools-outilsgc/gcpedia/issues/$PR/comments | grep -c "${{ variables.commentStringGCWiki }}") 58 | echo "##vso[task.setvariable variable=commentExists]$TEST" 59 | echo "Comments found about the test instance already in the PR: $TEST" 60 | displayName: Check for comment in PR 61 | env: 62 | PR: $(System.PullRequest.PullRequestNumber) 63 | 64 | - task: GitHubComment@0 65 | inputs: 66 | gitHubConnection: $(github_connection) 67 | repositoryName: $(Build.Repository.Name) 68 | id: $(System.PullRequest.PullRequestNumber) 69 | comment: '$(commentStringGCWiki) https://gcwiki-dev-pr-$(System.PullRequest.PullRequestNumber).azurewebsites.net/
70 | $(commentStringGCPedia) https://gcpedia-dev-pr-$(System.PullRequest.PullRequestNumber).azurewebsites.net/ ' 71 | condition: and(succeeded(), eq(variables['commentExists'], '0')) 72 | displayName: Post a comment to PR with link to review site 73 | -------------------------------------------------------------------------------- /extensions/MagicNumberedHeadings/MagicNumberedHeadings.php: -------------------------------------------------------------------------------- 1 | 'MagicNumberedHeadings', 46 | 'version' => '1.12', 47 | 'author' => 'Purodha Blissenbach', 48 | 'url' => 'https://www.mediawiki.org/wiki/Extension:MagicNumberedHeadings', 49 | 'description' => 'Adds MagicWord "__NUMBEREDHEADINGS__"', 50 | ); 51 | $dir = dirname(__FILE__) . '/'; 52 | 53 | $wgExtensionMessagesFiles['MagicNumberedHeadings'] = $dir . 'MagicNumberedHeadings.i18n.php'; 54 | 55 | $wgHooks['MagicWordMagicWords'][] = 'MagicNumberedHeadingsMagicWordMagicWords'; 56 | $wgHooks['MagicWordwgVariableIDs'][] = 'MagicNumberedHeadingsMagicWordwgVariableIDs'; 57 | $wgHooks['InternalParseBeforeLinks'][] = 'MagicNumberedHeadingsInternalParseBeforeLinks'; 58 | 59 | function MagicNumberedHeadingsMagicWordMagicWords(&$magicWords) 60 | { 61 | $magicWords[] = 'MAG_NUMBEREDHEADINGS'; 62 | return true; 63 | } 64 | 65 | function MagicNumberedHeadingsMagicWordwgVariableIDs(&$wgVariableIDs) 66 | { 67 | $wgVariableIDs[] = 'MAG_NUMBEREDHEADINGS'; 68 | return true; 69 | } 70 | 71 | function MagicNumberedHeadingsInternalParseBeforeLinks(&$parser, &$text, &$stripState) 72 | { 73 | if (MediaWikiServices::getInstance()->getMagicWordFactory()->get( 'MAG_NUMBEREDHEADINGS' )->matchAndRemove( $text ) ) 74 | { 75 | $parser->mOptions->setNumberHeadings(TRUE); 76 | } 77 | return true; 78 | } -------------------------------------------------------------------------------- /.github/workflows/e2e-tests-reviews.yml: -------------------------------------------------------------------------------- 1 | name: "Haibun e2e tests" 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - main 8 | pull_request: 9 | 10 | permissions: 11 | contents: write 12 | pull-requests: read 13 | 14 | concurrency: 15 | group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.head_ref }}" 16 | cancel-in-progress: true 17 | 18 | jobs: 19 | e2e_test_and_publish: 20 | runs-on: ubuntu-latest 21 | steps: 22 | # Checkout main branch 23 | - uses: actions/checkout@v4 24 | with: 25 | repository: gctools-outilsgc/gcpedia 26 | ref: main 27 | 28 | # Set up GitHub Actions bot identity 29 | - name: Set up GitHub Actions bot identity 30 | run: | 31 | git config user.name "github-actions[bot]" 32 | git config user.email "41898282+github-actions[bot]@users.noreply.github.com" 33 | 34 | # Build and run Docker container 35 | - name: Build gcpedia docker-compose 36 | run: docker compose build 37 | 38 | - name: Make images directory 39 | run: mkdir images 40 | 41 | - name: Set images permissions 42 | run: chmod 777 images/ 43 | 44 | - name: Start gcpedia docker-compose 45 | run: docker compose up -d 46 | 47 | - name: See the logs 48 | run: docker compose logs 49 | 50 | - name: Wait for it to start 51 | continue-on-error: true 52 | run: | 53 | npx -y wait-on -t 45s tcp:`./haibun/gcpedia-docker-address.sh`:80 54 | 55 | - name: See the logs if wait failed 56 | if: steps.wait-for-it.outputs.success == 'false' 57 | run: docker compose logs 58 | 59 | - name: Fail the job if wait failed 60 | if: steps.wait-for-it.outputs.success == 'false' 61 | run: exit 1 62 | 63 | # Fetch and switch to gh-pages branch 64 | - name: Fetch and switch to gh-pages branch 65 | run: | 66 | git fetch origin 67 | git checkout gh-pages 68 | git reset --hard origin/main 69 | git checkout origin/gh-pages -- haibun/reviews 70 | 71 | # Install haibun dependencies 72 | - name: Install haibun dependencies 73 | run: | 74 | cd haibun 75 | npm ci 76 | npx playwright install 77 | 78 | # Run e2e tests 79 | - name: Run e2e tests 80 | continue-on-error: true 81 | run: | 82 | cd haibun 83 | npm run docker-test 84 | 85 | # Remove haibun/failures.test.json to prevent conflicts 86 | - name: Remove failures.test.json 87 | run: | 88 | rm -f haibun/failures.test.json 89 | 90 | # Run publish 91 | - name: Run publish 92 | run: | 93 | cd haibun 94 | npm run publish 95 | 96 | # Add and commit changes 97 | - name: Add and commit changes 98 | run: | 99 | git add ./haibun/reviews 100 | git commit -m "update e2e test reviews" 101 | 102 | # Force push changes to gh-pages 103 | - name: Force push changes to gh-pages 104 | run: | 105 | git push --force origin gh-pages 106 | -------------------------------------------------------------------------------- /extensions/MagicNoNumberedHeadings/MagicNoNumberedHeadings.php: -------------------------------------------------------------------------------- 1 | __FILE__, 45 | 'name' => 'MagicNoNumberedHeadings', 46 | 'version' => '1.12', 47 | 'author' => 'Purodha Blissenbach', 48 | 'url' => 'https://www.mediawiki.org/wiki/Extension:MagicNoNumberedHeadings', 49 | 'descriptionmsg' => 'magicnonumberedheadings-desc', 50 | ); 51 | 52 | $dir = dirname(__FILE__) . '/'; 53 | $wgExtensionMessagesFiles['MagicNoNumberedHeadings'] = $dir . 'MagicNoNumberedHeadings.i18n.php'; 54 | $wgExtensionMessagesFiles['MagicNoNumberedHeadingsMagic'] = $dir . 'MagicNoNumberedHeadings.i18n.magic.php'; 55 | 56 | $wgHooks['MagicWordMagicWords'][] = 'MagicNoNumberedHeadingsMagicWordMagicWords'; 57 | $wgHooks['MagicWordwgVariableIDs'][] = 'MagicNoNumberedHeadingsMagicWordwgVariableIDs'; 58 | $wgHooks['InternalParseBeforeLinks'][] = 'MagicNoNumberedHeadingsInternalParseBeforeLinks'; 59 | 60 | function MagicNoNumberedHeadingsMagicWordMagicWords(&$magicWords) 61 | { 62 | $magicWords[] = 'MAG_NONUMBEREDHEADINGS'; 63 | return true; 64 | } 65 | 66 | function MagicNoNumberedHeadingsMagicWordwgVariableIDs(&$wgVariableIDs) 67 | { 68 | $wgVariableIDs[] = 'MAG_NONUMBEREDHEADINGS'; 69 | return true; 70 | } 71 | 72 | function MagicNoNumberedHeadingsInternalParseBeforeLinks(&$parser, &$text, &$stripState) 73 | { 74 | if (MediaWikiServices::getInstance()->getMagicWordFactory()->get( 'MAG_NONUMBEREDHEADINGS' )->matchAndRemove( $text ) ) 75 | { 76 | $parser->mOptions->setNumberHeadings(false); 77 | } 78 | return true; 79 | } 80 | -------------------------------------------------------------------------------- /extensions/MagicNoNumberedHeadings/MagicNoNumberedHeadings.i18n.magic.php: -------------------------------------------------------------------------------- 1 | array( 0, '__NONUMBEREDHEADINGS__' ), 14 | ); 15 | 16 | /** Arabic (العربية) */ 17 | $magicWords['ar'] = array( 18 | 'MAG_NONUMBEREDHEADINGS' => array( 0, 'لا_عناوين_مرقمة' ), 19 | ); 20 | 21 | /** Egyptian Spoken Arabic (مصرى) */ 22 | $magicWords['arz'] = array( 23 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__لا_عناوين_مرقمة__', 'لا_عناوين_مرقمة', '__NONUMBEREDHEADINGS__' ), 24 | ); 25 | 26 | /** Chechen (нохчийн) */ 27 | $magicWords['ce'] = array( 28 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__ТЕРАХЬДОЦУШКОРТА__', '__БЕЗНОМЕРОВЗАГОЛОВКОВ__', '__NONUMBEREDHEADINGS__' ), 29 | ); 30 | 31 | /** German (Deutsch) */ 32 | $magicWords['de'] = array( 33 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__KEINE_ÜBERSCHRIFTENNUMMERIERUNG__' ), 34 | ); 35 | 36 | /** Zazaki (Zazaki) */ 37 | $magicWords['diq'] = array( 38 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__SERNAMEYONIMREYINÇINO__' ), 39 | ); 40 | 41 | /** Spanish (español) */ 42 | $magicWords['es'] = array( 43 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__ENCABEZADOSNOENUMERADOS__', '__NONUMERARENCABEZADOS__' ), 44 | ); 45 | 46 | /** Korean (한국어) */ 47 | $magicWords['ko'] = array( 48 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__번호매긴제목숨김__', '__번호매긴표제숨김__' ), 49 | ); 50 | 51 | /** Colognian (Ripoarisch) */ 52 | $magicWords['ksh'] = array( 53 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__ÖVERSCHRIFTENITNUMMERIERE__', '__KEINEÜERSCHRIFTENNUMMERIERUNG__', '__NONUMBEREDHEADINGS__' ), 54 | ); 55 | 56 | /** Macedonian (македонски) */ 57 | $magicWords['mk'] = array( 58 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__БЕЗБРОЕВИВОЗАГЛАВИЈАТА__' ), 59 | ); 60 | 61 | /** Malayalam (മലയാളം) */ 62 | $magicWords['ml'] = array( 63 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__ക്രമസംഖ്യാരഹിതതലക്കെട്ടുകൾ__' ), 64 | ); 65 | 66 | /** Marathi (मराठी) */ 67 | $magicWords['mr'] = array( 68 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__विनाअंकमथळे__', '__NONUMBEREDHEADINGS__' ), 69 | ); 70 | 71 | /** Nedersaksisch (Nedersaksisch) */ 72 | $magicWords['nds-nl'] = array( 73 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__GIENENUMMERDENKOPJES__', '__GEENGENUMMERDEKOPPEN__' ), 74 | ); 75 | 76 | /** Dutch (Nederlands) */ 77 | $magicWords['nl'] = array( 78 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__GEENGENUMMERDEKOPPEN__' ), 79 | ); 80 | 81 | /** Polish (polski) */ 82 | $magicWords['pl'] = array( 83 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__NIENUMERUJNAGŁÓWKÓW__' ), 84 | ); 85 | 86 | /** Russian (русский) */ 87 | $magicWords['ru'] = array( 88 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__БЕЗНОМЕРОВЗАГОЛОВКОВ__' ), 89 | ); 90 | 91 | /** Serbian (Latin script) (srpski (latinica)‎) */ 92 | $magicWords['sr-el'] = array( 93 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__BEZNUMERISANIHNASLOVA__', '__BEZ_NUMERISANIH_NASLOVA__' ), 94 | ); 95 | 96 | /** Swedish (svenska) */ 97 | $magicWords['sv'] = array( 98 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__INTENUMRERADERUBRIKER__', '__NONUMBEREDHEADINGS__' ), 99 | ); 100 | 101 | /** Turkish (Türkçe) */ 102 | $magicWords['tr'] = array( 103 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__NUMARALIBAŞLIKYOK__' ), 104 | ); 105 | 106 | /** Ukrainian (українська) */ 107 | $magicWords['uk'] = array( 108 | 'MAG_NONUMBEREDHEADINGS' => array( 0, '__БЕЗНОМЕРІВЗАГОЛОВКІВ__', '__БЕЗНОМЕРОВЗАГОЛОВКОВ__' ), 109 | ); -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/resources/js/gcusercreateform.js: -------------------------------------------------------------------------------- 1 | 2 | $( '#mw-input-wpemailname' )[0].addEventListener( "blur", (event) => { 3 | const EmailName = document.getElementById('mw-input-wpemailname'); 4 | const EmailDomain = document.getElementById('mw-input-wpemaildomain'); 5 | 6 | var emailNameText = EmailName.value.replace(/ /g, ''); 7 | if ( emailNameText != '' && EmailDomain.value != 'example' && EmailDomain.value != ''){ 8 | 9 | var email = emailNameText + '@' + EmailDomain.value; 10 | mw.loader.using( 'mediawiki.api', function () { 11 | ( new mw.Api() ).get( { 12 | action: 'characterfilterajax', 13 | emailinput: email, 14 | } ).done( function ( data ) { 15 | document.getElementById('wpEmail').value = data.characterfilterajax; 16 | } ); 17 | } ); 18 | 19 | mw.loader.using( 'mediawiki.api', function () { 20 | ( new mw.Api() ).get( { 21 | action: 'generateusernameajax', 22 | emailinput: email, 23 | } ).done( function ( data ) { 24 | document.getElementById('wpName2').value = data.generateusernameajax; 25 | 26 | } ); 27 | } ); 28 | 29 | } else { 30 | document.getElementById('wpName2').value = ''; 31 | document.getElementById('wpEmail').value = ''; 32 | } 33 | }, 34 | true, 35 | ); 36 | 37 | 38 | 39 | $( '#mw-input-wpemaildomain' )[0].addEventListener( "change", (event) => { 40 | const EmailName = document.getElementById('mw-input-wpemailname'); 41 | const EmailDomain = document.getElementById('mw-input-wpemaildomain'); 42 | const EmailDomainText = document.getElementById('mw-input-wpemaildomaintext'); 43 | 44 | if(EmailDomain.value == 'other') { 45 | EmailDomain.parentElement.parentElement.style = "display: none;"; 46 | EmailDomainText.style = "display: block;"; 47 | } else if (EmailDomain.value == 'example') { 48 | document.getElementById('wpName2').value = ''; 49 | document.getElementById('wpEmail').value = ''; 50 | 51 | } else 52 | customCreateDomainUpdate( EmailName, EmailDomain ); 53 | }, 54 | true, 55 | ); 56 | 57 | $( '#mw-input-wpemaildomaintext' )[0].addEventListener( "blur", (event) => { 58 | const EmailName = document.getElementById('mw-input-wpemailname'); 59 | const EmailDomainText = document.getElementById('mw-input-wpemaildomaintext'); 60 | customCreateDomainUpdate( EmailName, EmailDomainText ); 61 | }, 62 | true, 63 | ); 64 | 65 | function customCreateDomainUpdate( EmailName, EmailDomain ){ 66 | const emailNameText = EmailName.value.replace(/ /g, ''); 67 | 68 | if ( emailNameText != '' ){ 69 | var email = emailNameText + '@' + EmailDomain.value; 70 | mw.loader.using( 'mediawiki.api', function () { 71 | ( new mw.Api() ).get( { 72 | action: 'characterfilterajax', 73 | emailinput: email, 74 | } ).done( function ( data ) { 75 | document.getElementById('wpEmail').value = data.characterfilterajax; 76 | } ); 77 | } ); 78 | 79 | mw.loader.using( 'mediawiki.api', function () { 80 | ( new mw.Api() ).get( { 81 | action: 'generateusernameajax', 82 | emailinput: email, 83 | } ).done( function ( data ) { 84 | document.getElementById('wpName2').value = data.generateusernameajax.replace(/^\s+|\s+$/g,''); 85 | } ); 86 | } ); 87 | } 88 | } -------------------------------------------------------------------------------- /kubernetes/gcpedia-kube.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: gcpedia 5 | namespace: gctools-test 6 | annotations: 7 | VIRTUAL_HOST: "gcpedia.gctools.nrc.ca" 8 | VIRTUAL_PORT: "80" 9 | spec: 10 | ports: 11 | - protocol: TCP 12 | port: 80 13 | selector: 14 | app: gcpedia 15 | --- 16 | apiVersion: apps/v1beta1 17 | kind: Deployment 18 | metadata: 19 | name: gcpedia-deployment 20 | namespace: gctools-test 21 | spec: 22 | replicas: 1 23 | template: # create pods using pod definition in this template 24 | metadata: 25 | labels: 26 | app: gcpedia 27 | spec: 28 | containers: 29 | - name: gcpedia 30 | image: localhost:5000/gctools-outilsgc/gcpedia:latest 31 | ports: 32 | - containerPort: 80 33 | env: 34 | - name: "DOCKER" 35 | value: "1" 36 | - name: "DBHOST" 37 | value: "gcpedia-db.gctools-test" 38 | - name: "HOST" 39 | value: "gcpedia.gctools.nrc.ca" 40 | - name: "PORT" 41 | value: "80" 42 | volumeMounts: 43 | - mountPath: /var/www/html/image 44 | name: gcpedia-data-volume 45 | - mountPath: /var/www/html/LocalSettings.php 46 | subPath: LocalSettings.php 47 | name: gcpedia-settings 48 | - name: parsoid 49 | image: localhost:5000/gctools-outilsgc/parsoid:latest 50 | ports: 51 | - containerPort: 8142 52 | - name: render 53 | image: localhost:5000/gctools-outilsgc/electron-render-service:latest 54 | ports: 55 | - containerPort: 3000 56 | env: 57 | - name: "RENDERER_ACCESS_KEY" 58 | value: "secret" 59 | - name: HOSTNAME 60 | value: "" 61 | - name: "CONCURRENCY" 62 | value: "1" 63 | - name: "TIMEOUT" 64 | value: "30" 65 | - name: "WINDOW_WIDTH" 66 | value: "1024" 67 | - name: "WINDOW_HEIGHT" 68 | value: "768" 69 | - name: "PORT" 70 | value: "3000" 71 | volumes: 72 | - name: gcpedia-data-volume 73 | persistentVolumeClaim: 74 | claimName: gcpedia-data-volume-claim 75 | - name: gcpedia-settings 76 | configMap: 77 | name: gcpedia-config 78 | --- 79 | apiVersion: v1 80 | kind: Service 81 | metadata: 82 | name: gcpedia-db 83 | namespace: gctools-test 84 | spec: 85 | clusterIP: None 86 | ports: 87 | - protocol: TCP 88 | port: 3306 89 | selector: 90 | app: gcpedia-db 91 | --- 92 | apiVersion: apps/v1beta1 93 | kind: Deployment 94 | metadata: 95 | name: gcpedia-db-deployment 96 | namespace: gctools-test 97 | spec: 98 | replicas: 1 # tells deployment to run 1 pod matching the template 99 | template: # create pods using pod definition in this template 100 | metadata: 101 | labels: 102 | app: gcpedia-db 103 | spec: 104 | containers: 105 | - name: mysql 106 | image: localhost:5000/mysql:5.6 107 | ports: 108 | - containerPort: 3306 109 | env: 110 | - name: "MYSQL_ROOT_PASSWORD" 111 | value: "gcpedia" 112 | - name: "MYSQL_DATABASE" 113 | value: "wiki" 114 | - name: "MYSQL_USER" 115 | value: "wiki" 116 | - name: "MYSQL_PASSWORD" 117 | value: "gcpedia" 118 | volumeMounts: 119 | - mountPath: /var/lib/mysql 120 | name: gcpedia-db-volume 121 | volumes: 122 | - name: gcpedia-db-volume 123 | persistentVolumeClaim: 124 | claimName: gcpedia-db-volume-claim -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/resources/js/newUserPage.js: -------------------------------------------------------------------------------- 1 | function newUserPage(){ 2 | 3 | var newPageContents = "{{subst:MediaWiki:Userpage}}"; // Replace with your content 4 | var mw = window.mw; 5 | 6 | function checkForUserPage(newPage) { 7 | mw.loader.using("mediawiki.util").then(function () { 8 | var editToken = mw.user.tokens.get("csrfToken"); 9 | 10 | function checkPageExists() { 11 | return new Promise(function (resolve, reject) { 12 | new mw.Api() 13 | .get({ 14 | action: "query", 15 | titles: newPage, 16 | prop: "deletedrevisions", 17 | format: "json", 18 | }) 19 | .done(function (data) { 20 | var page = data.query.pages; 21 | var pageId = Object.keys(page)[0]; 22 | var pageProperties = Object.keys(page[pageId]); 23 | resolve(pageId !== "-1" || pageProperties.includes("deletedrevisions") ); // -1 indicates the page does not exist 24 | }) 25 | .fail(function (error) { 26 | reject(error); 27 | }); 28 | }); 29 | } 30 | 31 | function createIfMissing(exists) { 32 | if (!exists) { 33 | new mw.Api() 34 | .postWithToken("csrf", { 35 | action: "edit", 36 | title: newPage, 37 | text: newPageContents, 38 | format: "json", 39 | }) 40 | .done(function (data) { 41 | if (data && data.edit && data.edit.result === "Success") { 42 | var link = window.location.protocol + '//' + window.location.host + '/' + newPage; 43 | 44 | var messageNode = document.createElement("div"); 45 | messageNode.innerHTML = mw.msg("newuserpage-notification", link); 46 | mw.notify(messageNode, { 47 | title: mw.msg("newuserpage-notification-title"), 48 | autoHide: false, 49 | }); 50 | } else { 51 | console.error("Failed to create page"); 52 | } 53 | }) 54 | .fail(function (error) { 55 | console.error("Failed to create page:", error); 56 | }); 57 | } 58 | } 59 | 60 | checkPageExists() 61 | .then(createIfMissing) 62 | .catch(function (error) { 63 | console.error("Error checking if page exists:", error); 64 | }); 65 | }); 66 | } 67 | 68 | function getCookie(name) { 69 | var value = "; " + document.cookie; 70 | var parts = value.split("; " + name + "="); 71 | if (parts.length == 2) return parts.pop().split(";").shift(); 72 | } 73 | 74 | function setCookie(name, value, days) { 75 | var date = new Date(); 76 | date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); 77 | var expires = "; expires=" + date.toUTCString(); 78 | document.cookie = name + "=" + (value || "") + expires + "; path=/"; 79 | } 80 | 81 | if (mw.config.values.wgUserId) { 82 | const username = mw.config.values.wgUserName; 83 | if (getCookie("createdNewUserPage") !== 'userPage') { 84 | var newPage = "User:" + username; 85 | console.info("checking new user page", newPage); 86 | checkForUserPage(newPage); 87 | setCookie("createdNewUserPage", 'userPage', 3650); 88 | } 89 | } 90 | } 91 | 92 | newUserPage(); 93 | -------------------------------------------------------------------------------- /extensions/ROTedits/ROTedits.php: -------------------------------------------------------------------------------- 1 | getEditCount(); 35 | 36 | $dbr = wfGetDB( DB_SLAVE ); 37 | $queryString = "SELECT * FROM `rotusers` WHERE `user_name` = \"".$username ."\""; 38 | $result = $dbr->query($queryString); 39 | $row = $dbr->fetchRow($result); 40 | 41 | if ( $row[0] != $username ){ // user not in rot db 42 | str_replace( "", "", $text, $countreplace ); // only for the count 43 | str_replace( "", "", $text, $countreplace2 ); 44 | if ( $countreplace + $countreplace2 > 0 ) { 45 | $queryString2 = "INSERT INTO `rotusers` (user_name, start_editcount) VALUES ( '".$username ."', " . $total . ")"; 46 | $dbr->query($queryString2); 47 | $result = $dbr->query($queryString); 48 | } 49 | } 50 | 51 | $rotstart = $row[1]; 52 | 53 | $rotcount = $total - $rotstart; 54 | $text = str_replace( "", $rotcount, $text ); 55 | $text = str_replace( "", "", $text ); 56 | 57 | // Add stats table tag 58 | str_replace( "", "", $text, $countreplace ); // only for the count 59 | if ( $countreplace > 0 ) { 60 | $querystr = 'SELECT`rotusers`.`user_name` , (`user`.`user_editcount`-`rotusers`.`start_editcount`) AS "ROTedits" FROM`rotusers` LEFT JOIN`user` ON`rotusers`.`user_name`=`user`.`user_name`'; 61 | $dbr->query($querystr); 62 | $result = $dbr->query($querystr); 63 | 64 | $table = "{|border='3px' style='text-align:center;' \n"; 65 | $table .= "!ROT User \n!ROT Edits\n"; 66 | $sum = 0; 67 | foreach ( $result as $rotusr ){ 68 | $table = $table . "|- \n"; 69 | $table = $table . "|". $rotusr->user_name ." \n"; 70 | $table = $table . "|". $rotusr->ROTedits ." \n"; 71 | $sum = $sum + $rotusr->ROTedits; 72 | } 73 | $table = $table . "|- \n"; 74 | $table = $table . "!Total \n"; 75 | $table = $table . "!". $sum ." \n"; 76 | $table = $table . "|}"; 77 | 78 | $text = str_replace( "", $table, $text, $countreplace ); 79 | } 80 | 81 | } 82 | 83 | function ROTeditsSchemaUpdates( $updater = null ) { 84 | if ( $updater === null ) { // <= 1.16 support 85 | global $wgExtNewTables, $wgExtModifiedFields; 86 | $wgExtNewTables[] = array( 87 | 'rotusers', 88 | dirname( __FILE__ ) . '/ROTedits.sql' 89 | ); 90 | } else { // >= 1.17 support 91 | $db = $updater->getDB(); 92 | 93 | $updater->addExtensionUpdate( array( 'addTable', 'rotusers', 94 | dirname( __FILE__ ) . '/ROTedits.sql', true ) ); 95 | } 96 | return true; 97 | } 98 | 99 | /** 100 | * Uses the title of the page (excluding namespace) to return the username of the user who's awards should be displayed 101 | */ 102 | /*function getUName( $pagename ) 103 | { 104 | $name = $pagename; 105 | $pos; 106 | 107 | $pos = strripos( $pagename, "/" ); 108 | 109 | if ( $pos ) 110 | $name = substr( $pagename, 0, $pos ); 111 | 112 | 113 | return $name; 114 | }*/ 115 | 116 | ?> -------------------------------------------------------------------------------- /extensions/GCUserCreateForm/src/api/generateUsernameAJAX.php: -------------------------------------------------------------------------------- 1 | users email address 10 | * 11 | * @return always returns "" because we use the response text directly 12 | * 13 | * @author Matthew April , Ilia Salem 14 | */ 15 | use MediaWiki\MediaWikiServices; 16 | 17 | class generateUsernameAJAX extends ApiBase 18 | { 19 | /** 20 | * Returns an array of allowed parameters (parameter name) => (default 21 | * value) or (parameter name) => (array with PARAM_* constants as keys) 22 | * Don't call this function directly: use getFinalParams() to allow 23 | * hooks to modify parameters as needed. 24 | * 25 | * Some derived classes may choose to handle an integer $flags parameter 26 | * in the overriding methods. Callers of this method can pass zero or 27 | * more OR-ed flags like GET_VALUES_FOR_HELP. 28 | * 29 | * @return array 30 | */ 31 | protected function getAllowedParams( /* $flags = 0 */ ) { 32 | // int $flags is not declared because it causes "Strict standards" 33 | // warning. Most derived classes do not implement it. 34 | return array( 35 | 'emailinput' => ''); 36 | } 37 | 38 | 39 | public function execute() { 40 | // extract request parameters 41 | $params = $this->extractRequestParams(); 42 | $emailInput = $params['emailinput']; 43 | 44 | $email = trim($emailInput); 45 | 46 | if ( strlen( $email ) > 0 ) { 47 | 48 | $domainPos = strpos($email, '@') + 1; 49 | $domain = substr($email, $domainPos); 50 | 51 | # make sure selected domain is not the example domain (this is already checked for in the JS, but do it anyway) 52 | if($domain == "example") { 53 | # NOTE: the '>' character is used to make the username invalid. 54 | echo "> Invalid domain"; 55 | return ""; 56 | } 57 | if ( !Sanitizer::validateEmail( $email ) ){ 58 | $this->getResult()->addValue( null, $this->getModuleName(), "418" ); 59 | return 1; 60 | } 61 | 62 | $dbProvider = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); 63 | $dbr = $dbProvider->getReplicaDatabase(); 64 | 65 | $emailrow = $dbr->newSelectQueryBuilder() 66 | ->select( ['count(*) as emails'] ) 67 | ->from( 'user' ) 68 | ->where( [ 'user_email' => $email ] ) 69 | ->caller( __METHOD__ )->fetchRow(); 70 | 71 | #check if email in use 72 | if ( $emailrow->emails > 0 ) { 73 | # NOTE: the '>' character is used to make the username invalid. 74 | $this->getResult()->addValue( null, $this->getModuleName(), "> " . $this->msg('email-in-use') ); //translate this 75 | return ""; 76 | } 77 | 78 | $usrname = ucfirst( strtok( $email, '@' ) ); 79 | 80 | ##Capitalize first and last name## 81 | if(substr_count($usrname, ".") == 1) { #make sure they have one, and only one period in their username (should typically be the case, but check anyway) 82 | 83 | $lastnamePos = strpos($usrname, ".") + 1; 84 | $lastnameLetter = substr($usrname, $lastnamePos, 1); #first letter of last name 85 | $lastnameLetter = strtoupper($lastnameLetter); #force uppercase 86 | 87 | $usrname = substr_replace($usrname, $lastnameLetter, $lastnamePos, 1); #replace original with uppercase 88 | } 89 | 90 | if(rtrim($usrname, "0..9") != "") { 91 | $usrname = rtrim($usrname, "0..9"); 92 | } 93 | 94 | #check if username exists and increment it 95 | if ( User::newFromName($usrname)->getId() != null ){ 96 | $unamePostfix = 0; 97 | do { 98 | $unamePostfix++; 99 | $uname = $usrname . $unamePostfix; 100 | } while ( User::newFromName($uname)->getId() != null ); 101 | 102 | }else{ 103 | #username is available 104 | $uname = $usrname; 105 | } 106 | 107 | #username output 108 | $this->getResult()->addValue( null, $this->getModuleName(), $uname ); 109 | 110 | } 111 | 112 | return ""; 113 | } 114 | } 115 | 116 | ?> -------------------------------------------------------------------------------- /extensions/Multilang/multilang.php: -------------------------------------------------------------------------------- 1 | tag for 7 | selective text display depending from user language settings. 8 | Author: Daniel Arnold after an idea of Eric David 9 | Copyright: Daniel Arnold (2006) 10 | License: GPL version 2 or at your option any later version 11 | Usage 1: 12 | 13 | @de|Deutsche Version 14 | @en|English version 15 | @fr|Version française 16 | 17 | Usage 2: to show your language settings 18 | In order to activate the extension copy it into your extension folder and 19 | include it from your LocalSettings.php with: 20 | include("extensions/multilang.php"); 21 | */ 22 | 23 | $wgExtensionFunctions[] = "wfMultilang"; 24 | $wgExtensionCredits['parserhook'][] = array( 25 | 'name' => 'Multilang', 26 | 'author' => 'Daniel Arnold, after an idea of Eric David', 27 | 'description' => 'adds tag, for selective display of translated texts', 28 | 'url' => 'http://download.pakanto.org/software/' 29 | ); 30 | 31 | 32 | function wfMultilang() { 33 | $parser = \MediaWiki\MediaWikiServices::getInstance()->getParser(); 34 | $parser->setHook("multilang","renderMultilang"); 35 | } 36 | 37 | 38 | function renderMultilang($input, array $argv, Parser $parser, PPFrame $frame) { 39 | global $wgLang, $wgLanguageCode, $wgMultilangUseBrowserLanguage; 40 | 41 | // The parser cache needs to be disabled as the page output is 42 | // depending from user settings without any change in the page 43 | // wiki source code 44 | $parser->getOutput()->updateCacheExpiry(0); 45 | 46 | // wether we use browser or user setting for language detection 47 | if ($wgMultilangUseBrowserLanguage == true) 48 | { 49 | // This code probably does not work with all browsers 50 | // only tested it with Konqueror 51 | $browserstring = str_replace(";",",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]); 52 | $userlanguages = split(",",$browserstring); 53 | } 54 | else 55 | { 56 | // sadly in current MediaWiki you can only set one user language 57 | $userlanguages[0] = $wgLang->getCode(); 58 | 59 | // second language is wiki default language as fallback 60 | if ($userlanguages[0] != $wgLanguageCode) 61 | { 62 | $userlanguages[1] = $wgLanguageCode; 63 | } 64 | } 65 | 66 | // if no text is given only display the language settings of the client 67 | if ($input == "") 68 | { 69 | $languagelist = ""; 70 | for ($i=0;$i 0) 81 | { 82 | // the last "matching" position is the end of the input string, see below 83 | $match[0][$sections][1] = strlen($input); 84 | for ($i=0;$iparse($rawtext, $parser->mTitle, $parser->mOptions, true, false); 99 | return $output->getText(); 100 | } 101 | } 102 | } 103 | // fallback to first entry if there is no match (no default 104 | // language message and no match with user language settings) 105 | $rawtext = substr($input,$match[0][0][1],($match[0][1][1])-$match[0][0][1]); 106 | $delimiter = strpos($rawtext,'|'); 107 | $rawtext = substr($rawtext, $delimiter+1); 108 | $output = $parser->parse($rawtext, $parser->mTitle, $parser->mOptions, true, false); 109 | return $output->getText(); 110 | } 111 | } 112 | 113 | ?> 114 | -------------------------------------------------------------------------------- /extensions/SkinTweaksGCpedia/resources/js/skintweaksgcpedia.js: -------------------------------------------------------------------------------- 1 | function addTopBar(){ 2 | const mw = window.mw; 3 | const lang = { 4 | "lang3Code": mw.msg( 'wet:lang3Code' ), 5 | "searchBoxPlaceholder": mw.msg( 'searchsuggest-search-tools' ), 6 | "pedia": mw.msg( 'pedia' ), 7 | "gcdirectoryLink": mw.msg( 'wet:gcdirectoryLink' ), 8 | "barDirectory": mw.msg( 'wet:barDirectory' ), 9 | "gcintranetLink": mw.msg( 'wet:gcintranetLink' ), 10 | "gcconnexLink": mw.msg( 'wet:gcconnexLink' ), 11 | "gccollabLink": mw.msg( 'wet:gccollabLink' ), 12 | "langlink": mw.msg( 'topbar:langlink' ) 13 | } 14 | 15 | var header = document.createElement('header'); 16 | header.role = "banner" 17 | 18 | // the federated search form 19 | const searchbox = "
\ 20 |

Search

\ 21 | \ 38 |
"; 39 | 40 | header.innerHTML = "
\ 41 |
\ 42 |
\ 43 |
\ 44 | \ 49 |
\ 50 | \ 70 |
\ 71 |
\ 72 |
    \ 73 |
  • " + lang.langlink + "
  • \ 74 |
\ 75 |
\ 76 |
\ 77 | " + searchbox + "\ 78 |
\ 79 |
\ 80 |
"; 81 | 82 | document.body.insertBefore(header, document.body.firstChild); 83 | 84 | 85 | $('#header-lang-toggle').on( 'click', (Event) => { 86 | Event.preventDefault(); 87 | mw.loader.using(['ext.uls.common']).then(function() { 88 | mw.uls.changeLanguage( Event.target.lang ); 89 | }) 90 | }); 91 | } 92 | 93 | addTopBar(); 94 | --------------------------------------------------------------------------------