├── .gitignore ├── i18n ├── qqq.json ├── os.json ├── mg.json ├── lv.json ├── af.json ├── br.json ├── grc.json ├── vep.json ├── vo.json ├── ko.json ├── io.json ├── bn.json ├── eu.json ├── lt.json ├── te.json ├── bcc.json ├── km.json ├── ja.json ├── mr.json ├── ar.json ├── hi.json ├── sv.json ├── fi.json ├── arz.json ├── hsb.json ├── tr.json ├── uk.json ├── eo.json ├── nds.json ├── nn.json ├── jut.json ├── vi.json ├── ca.json ├── cs.json ├── dsb.json ├── gsw.json ├── stq.json ├── ia.json ├── li.json ├── hr.json ├── ms.json ├── pt-br.json ├── sah.json ├── an.json ├── fa.json ├── ro.json ├── tg-cyrl.json ├── vec.json ├── ast.json ├── bs.json ├── jv.json ├── bg.json ├── pt.json ├── el.json ├── gl.json ├── hu.json ├── oc.json ├── be-tarask.json ├── frp.json ├── nb.json ├── roa-tara.json ├── lb.json ├── es.json ├── ml.json ├── tl.json ├── ksh.json ├── yue.json ├── zh-hans.json ├── zh-hant.json ├── nl.json ├── sr-el.json ├── he.json ├── ru.json ├── sk.json ├── sr-ec.json ├── sr.json ├── id.json ├── fr.json ├── it.json ├── de.json ├── en.json └── pl.json ├── .gitreview ├── .gitlab-ci.yml ├── composer.json ├── classes ├── heading │ ├── OrderedHeading.php │ ├── UnorderedHeading.php │ ├── DefinitionHeading.php │ ├── TieredHeading.php │ └── Heading.php ├── lister │ ├── UnorderedList.php │ ├── DefinitionList.php │ ├── GalleryList.php │ ├── CategoryList.php │ ├── InlineList.php │ ├── OrderedList.php │ ├── SubPageList.php │ └── UserFormatList.php ├── db │ └── CreateTemplateUpdateMaintenance.php ├── Config.php ├── Logger.php ├── Variables.php └── Article.php ├── DynamicPageList.i18n.magic.php ├── .phpcs.xml ├── extension.json ├── README.md ├── README.mediawiki └── LICENSE.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.kate-swp 2 | *~ 3 | .*.swp 4 | .DS_Store 5 | .svn 6 | /vendor 7 | composer.lock 8 | .idea 9 | -------------------------------------------------------------------------------- /i18n/qqq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Purodha" 5 | ] 6 | }, 7 | "intersection-desc": "{{desc}}" 8 | } -------------------------------------------------------------------------------- /.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=gerrit.wikimedia.org 3 | port=29418 4 | project=mediawiki/extensions/DynamicPageList.git 5 | defaultbranch=master 6 | defaultrebase=0 7 | -------------------------------------------------------------------------------- /i18n/os.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amikeco" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Рæдыд: æгæр бирæ категоритæ!" 8 | } -------------------------------------------------------------------------------- /i18n/mg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jagwar" 5 | ] 6 | }, 7 | "intersection_toomanycats": "DynamicPageList : Be laotra ny sokajy" 8 | } -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: valeryan/php-fpm 2 | 3 | stages: 4 | - test 5 | 6 | before_script: 7 | - composer self-update 8 | - composer install 9 | - npm install 10 | 11 | job: 12 | stage: test 13 | script: composer test 14 | -------------------------------------------------------------------------------- /i18n/lv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Xil" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Kļūda: pārāk daudz kategoriju!", 8 | "intersection_toofewcats": "Kļūda: pārāk maz kategoriju!" 9 | } -------------------------------------------------------------------------------- /i18n/af.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Naudefj" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Fout: Te veel kategorieë!", 8 | "intersection_toofewcats": "Fout: Te min kategorieë!", 9 | "intersection_noresults": "Fout: Geen resultate!" 10 | } -------------------------------------------------------------------------------- /i18n/br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Fulup" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Error: Re a rummadoù !", 8 | "intersection_toofewcats": "Error: Re nebeut a rummadoù !", 9 | "intersection_noresults": "Error: Disoc'h ebet !" 10 | } -------------------------------------------------------------------------------- /i18n/grc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Omnipaedista" 5 | ] 6 | }, 7 | "intersection_noresults": "Σφάλμα: οὐδὲν ἀποτέλεσμα", 8 | "intersection_noincludecats": "Σφάλμα: Ἔξεστί σοι περιλαμβάνειν μίαν τοὐλάχιστον κατηγορίαν, ἢ καθορίζειν ὀνοματεῖον τι!" 9 | } -------------------------------------------------------------------------------- /i18n/vep.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Игорь Бродский" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Error: äjahk kategorijoid!", 8 | "intersection_toofewcats": "Error: Vähähk kategorijoid!", 9 | "intersection_noresults": "Error: Ei ole rezul'tatoid!" 10 | } -------------------------------------------------------------------------------- /i18n/vo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Smeira" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Error: Klads tu mödiks!", 8 | "intersection_toofewcats": "Error: Klads tu nemödiks!", 9 | "intersection_noresults": "Error: Seks nonik!", 10 | "intersection_noincludecats": "Error: Nedol välön kladi pu bali, u nemaspadi!" 11 | } -------------------------------------------------------------------------------- /i18n/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kwj2772", 5 | "Yknok29" 6 | ] 7 | }, 8 | "intersection_toomanycats": "에러: 분류가 너무 많습니다!", 9 | "intersection_toofewcats": "에러: 분류가 너무 적습니다!", 10 | "intersection_noresults": "오류: 결과가 없습니다!", 11 | "intersection_noincludecats": "에러: 최소한 하나의 분류에 포함시켜 주시거나 이름공간을 명확히 적어 주세요!" 12 | } -------------------------------------------------------------------------------- /i18n/io.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Malafaya" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Eroro: Tro multa kategorii!", 8 | "intersection_toofewcats": "Eroro: Tro poka kategorii!", 9 | "intersection_noresults": "Eroro: Nula rezultaji!", 10 | "intersection_noincludecats": "Eroro: Vu mustas inkluzar adminime un kategorio, o specigez nomaro!" 11 | } -------------------------------------------------------------------------------- /i18n/bn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bellayet" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Error: অনেক বেশি বিষয়শ্রেণী!", 8 | "intersection_toofewcats": "Error: অনেক কম বিষয়শ্রেণী!", 9 | "intersection_noresults": "Error: ফলাফল নাই!", 10 | "intersection_noincludecats": "ত্রুটি:আপনার অন্তত একটি বিষয়শ্রেণী যুক্ত করতে, অথবা একটি নেমস্পেস দিতে হবে!" 11 | } -------------------------------------------------------------------------------- /i18n/eu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "An13sa" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Errorea: Kategoria gehiegi!", 8 | "intersection_toofewcats": "Errorea: Kategoria gutxiegi!", 9 | "intersection_noresults": "Errorea: Emaitzarik ez!", 10 | "intersection_noincludecats": "Errorea: Gutxienez kategoria bat gehitu edo izen bat zehaztu behar duzu!" 11 | } -------------------------------------------------------------------------------- /i18n/lt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Matasg" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Error: Per daug kategorijų!", 8 | "intersection_toofewcats": "Error: Per mažai kategorijų!", 9 | "intersection_noresults": "Error: Nėra rezultatų!", 10 | "intersection_noincludecats": "Error: Jums reikia įtraukti bent vieną kategoriją, arba nurodyti vardų sritį!" 11 | } -------------------------------------------------------------------------------- /i18n/te.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Veeven" 5 | ] 6 | }, 7 | "intersection_toomanycats": "Error: చాలా ఎక్కువ వర్గాలు!", 8 | "intersection_toofewcats": "Error: మరీ తక్కువ వర్గాలు!", 9 | "intersection_noresults": "Error: ఫలితాలు లేవు!", 10 | "intersection_noincludecats": "Error: మీరు కనీసం ఒక్క వర్గాన్నైనా చేర్చాలి, లేదా ఓ నేమ్‌స్పేసునైనా ఇవ్వాలి!" 11 | } -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "jakub-onderka/php-parallel-lint": "1.0.0", 4 | "jakub-onderka/php-console-highlighter": "0.3.2", 5 | "mediawiki/minus-x": "0.3.1", 6 | "hydrawiki/hydrawiki-codesniffer": "^1.0.0" 7 | }, 8 | "scripts": { 9 | "test": [ 10 | "parallel-lint . --exclude vendor", 11 | "phpcs -p -s", 12 | "minus-x check ." 13 | ], 14 | "fix": [ 15 | "minus-x fix .", 16 | "phpcbf" 17 | ] 18 | } 19 | } -------------------------------------------------------------------------------- /i18n/bcc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mostafadaneshvar" 5 | ] 6 | }, 7 | "intersection_toomanycats": "DynamicPageList: بازگین دسته جات!", 8 | "intersection_toofewcats": "DynamicPageList: باز کمین دسته جات!", 9 | "intersection_noresults": "DynamicPageList: هچ نتیجه ای", 10 | "intersection_noincludecats": "لیست صفحات دینامیکی: شما لازمنت حداقل یک دسته هور کنیت یا یک نام فضایی مشخص کنیت!" 11 | } -------------------------------------------------------------------------------- /i18n/km.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chhorran", 5 | "Thearith" 6 | ] 7 | }, 8 | "intersection_toomanycats": "កំហុស​៖ ចំណាត់ថ្នាក់ក្រុម​ច្រើនពេក​!", 9 | "intersection_toofewcats": "កំហុស​៖ ចំណាត់ថ្នាក់ក្រុម​តិចពេក​!", 10 | "intersection_noresults": "កំហុស​៖ គ្មាន​លទ្ធផល​!", 11 | "intersection_noincludecats": "កំហុស​៖ អ្នក​ត្រូវតែ​មាន​ចំណាត់ថ្នាក់ក្រុម​មួយយ៉ាងតិច ឬ សំដៅ​មួយ​លំហឈ្មោះ​!" 12 | } -------------------------------------------------------------------------------- /i18n/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Fryed-peach", 5 | "JtFuruhata" 6 | ] 7 | }, 8 | "intersection-desc": "単一カテゴリ内または複数カテゴリ内において最近更新された項目を箇条書きで表示する", 9 | "intersection_toomanycats": "エラー: カテゴリ指定が多すぎます!", 10 | "intersection_toofewcats": "エラー: カテゴリ指定が少なすぎます!", 11 | "intersection_noresults": "エラー: 最近更新された項目はありません!", 12 | "intersection_noincludecats": "エラー: 1つ以上のカテゴリ、または名前空間を指定する必要があります!" 13 | } -------------------------------------------------------------------------------- /i18n/mr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kaustubh" 5 | ] 6 | }, 7 | "intersection-desc": "एखाद्या वर्गातील अथवा वर्गसमूहातील नवीनतम लेख दर्शवितो.", 8 | "intersection_toomanycats": "Error: खूप जास्त वर्ग!", 9 | "intersection_toofewcats": "Error: खूप कमी वर्ग!", 10 | "intersection_noresults": "Error: निकाल नाहीत!", 11 | "intersection_noincludecats": "Error: कमीतकमी एक वर्ग अथवा नामविश्व देणे गरजेचे आहे!" 12 | } -------------------------------------------------------------------------------- /i18n/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Meno25" 5 | ] 6 | }, 7 | "intersection-desc": "يخرج قائمة معلمة بأحدث المدخلات الساكنة في تصنيف، أو اتحاد عدة تصنيفات", 8 | "intersection_toomanycats": "خطأ: تصنيفات كثيرة جدا!", 9 | "intersection_toofewcats": "خطأ: تصنيفات قليلة جدا!", 10 | "intersection_noresults": "خطأ: لا نتائج!", 11 | "intersection_noincludecats": "خطأ: ينبغي أن تضمن تصنيفا واحدا على الأقل، أو تحدد نطاقا!" 12 | } -------------------------------------------------------------------------------- /i18n/hi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kaustubh" 5 | ] 6 | }, 7 | "intersection-desc": "एक श्रेणी या श्रेणीसमूहमें उपलब्ध नवीनतम लेख दर्शायें।", 8 | "intersection_toomanycats": "Error: बहुत ज्यादा श्रेणीयां!", 9 | "intersection_toofewcats": "Error: बहुत कम श्रेणीयां!", 10 | "intersection_noresults": "Error: रिज़ल्ट नहीं!", 11 | "intersection_noincludecats": "Error: कमसे कम एक श्रेणी या नामस्थान देना अनिवार्य हैं!" 12 | } -------------------------------------------------------------------------------- /i18n/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Lejonel" 5 | ] 6 | }, 7 | "intersection-desc": "Skapar punktlistor över de nyaste sidorna i en eller flera kategorier", 8 | "intersection_toomanycats": "Fel: För många kategorier!", 9 | "intersection_toofewcats": "Fel: För få kategorier!", 10 | "intersection_noresults": "Fel: Inga resultat!", 11 | "intersection_noincludecats": "Fel: Du måste inkludera minst en kategori eller ange en namnrymd!" 12 | } -------------------------------------------------------------------------------- /i18n/fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nike" 5 | ] 6 | }, 7 | "intersection-desc": "Tulostaa listan luokassa tai useamman luokan yhdisteessä olevista sivuista.", 8 | "intersection_toomanycats": "Error: Liian monta luokkaa.", 9 | "intersection_toofewcats": "Error: Liian vähän luokkia.", 10 | "intersection_noresults": "Error: Ei tuloksia.", 11 | "intersection_noincludecats": "Error: Lisää vähintään yksi luokka tai määritä nimiavaruus." 12 | } -------------------------------------------------------------------------------- /i18n/arz.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Meno25", 5 | "Ramsis II" 6 | ] 7 | }, 8 | "intersection-desc": "بيطلع لستة مترقمة لاحدث الحاجات الموجودة فى تصنيف,او اتحاد اكتر من تصنيف", 9 | "intersection_toomanycats": "غلط:تصانيف كتيرة خالص!", 10 | "intersection_toofewcats": "غلط:تصانيف قليلة خالص!", 11 | "intersection_noresults": "غلط:مافيش نتايج!", 12 | "intersection_noincludecats": "غلط: لازم تحط تصنيف واحد على الأقل، أو تحدد نطاق!" 13 | } -------------------------------------------------------------------------------- /classes/heading/OrderedHeading.php: -------------------------------------------------------------------------------- 1 | '; 20 | 21 | /** 22 | * List(Section) End 23 | * 24 | * @var string 25 | */ 26 | public $listEnd = ''; 27 | } 28 | -------------------------------------------------------------------------------- /i18n/hsb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Michawiki" 5 | ] 6 | }, 7 | "intersection-desc": "Wudaće lisćiny najaktualnišich zapiskow w jednej kategoriji abo w skupinje kategorijow", 8 | "intersection_toomanycats": "Error: Přewjele kategorijow!", 9 | "intersection_toofewcats": "Error: Přemało kategorijow!", 10 | "intersection_noresults": "Error: Žane wuslědki!", 11 | "intersection_noincludecats": "Error: Dyrbiš znajmjeńša kednu kategoriju zapřijeć abo mjenowy rum podać!" 12 | } -------------------------------------------------------------------------------- /i18n/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joseph" 5 | ] 6 | }, 7 | "intersection-desc": "Bir kategoride, yada birçok kategorinin kesişiminde bulunan en son öğelerin, madde işaretli listesini üretir", 8 | "intersection_toomanycats": "Hata: Çok fazla kategori!", 9 | "intersection_toofewcats": "Hata: Çok az kategori!", 10 | "intersection_noresults": "Hata: Sonuç yok!", 11 | "intersection_noincludecats": "Hata: En az bir kategori eklemeli, ya da bir ad alanı belirtmelisiniz!" 12 | } -------------------------------------------------------------------------------- /i18n/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ahonc" 5 | ] 6 | }, 7 | "intersection-desc": "Виводить у маркований список останні додавання до категорії або об'єднання кількох категорій", 8 | "intersection_toomanycats": "Error: дуже багато категорій!", 9 | "intersection_toofewcats": "Error: дуже мало категорій!", 10 | "intersection_noresults": "Error: нема результатів!", 11 | "intersection_noincludecats": "Error: ви повинні включити хоча б одну категорію або зазначити простір назв!" 12 | } -------------------------------------------------------------------------------- /DynamicPageList.i18n.magic.php: -------------------------------------------------------------------------------- 1 | [0, 'dpl'], 16 | 'dplnum' => [0, 'dplnum'], 17 | 'dplvar' => [0, 'dplvar'], 18 | 'dplreplace' => [0, 'dplreplace'], 19 | 'dplchapter' => [0, 'dplchapter'], 20 | 'dplmatrix' => [0, 'dplmatrix'], 21 | 'DynamicPageList' => [0, 'DynamicPageList'] 22 | ]; 23 | -------------------------------------------------------------------------------- /i18n/eo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Yekrats" 5 | ] 6 | }, 7 | "intersection-desc": "Eligas bulpunktitan liston de la plej lastaj kategorianoj, aŭ unuigo de pluraj kategorioj", 8 | "intersection_toomanycats": "Eraro: Tro da kategorioj!", 9 | "intersection_toofewcats": "Error: Tro malmultaj da kategorioj!", 10 | "intersection_noresults": "Error: Neniom da rezultoj!", 11 | "intersection_noincludecats": "Error: Vi devas inkluzivi almenaŭ unu kategorion, aŭ specifigu nomspacon!" 12 | } -------------------------------------------------------------------------------- /i18n/nds.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Slomox" 5 | ] 6 | }, 7 | "intersection-desc": "Wiest en List mit de aktuellsten Indrääg in en Kategorie, oder de Snittmengd vun mehr Kategorien", 8 | "intersection_toomanycats": "Fehler: Toveel Kategorien!", 9 | "intersection_toofewcats": "Fehler: To wenig Kategorien!", 10 | "intersection_noresults": "Fehler: Nix funnen!", 11 | "intersection_noincludecats": "Fehler: Dor mutt opminnst een Kategorie angeven warrn! ODer geev en Naamruum an." 12 | } -------------------------------------------------------------------------------- /i18n/nn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Harald Khan" 5 | ] 6 | }, 7 | "intersection-desc": "Gjev ei punktlista over dei nyaste elementa i ein kategori, eller element som er felles i fleire kategoriar", 8 | "intersection_toomanycats": "Feil: For mange kategoriar!", 9 | "intersection_toofewcats": "Feil: For få kategoriar!", 10 | "intersection_noresults": "Feil: Ingen resultat!", 11 | "intersection_noincludecats": "Feil: Du må inkludera minst éin kategori, eller oppgje eit namnerom!" 12 | } -------------------------------------------------------------------------------- /i18n/jut.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Huslåke" 5 | ] 6 | }, 7 | "intersection-desc": "Outputs en bulleted liste der senestste itemer ræsidende i en klynge, æller æ unje der severæl klynger", 8 | "intersection_toomanycats": "Error: Åverføl klynger!", 9 | "intersection_toofewcats": "Error: Åverwæneg klynger!", 10 | "intersection_noresults": "Error: Ekke ræsultåter!", 11 | "intersection_noincludecats": "Error: Du nødst til inkludær til mendst en klynge, æller spæsifiær en navnerum!" 12 | } -------------------------------------------------------------------------------- /i18n/vi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Minh Nguyen" 5 | ] 6 | }, 7 | "intersection-desc": "Cho ra danh sách những khoản gần đây nhất được xếp vào một thể loại hay hợp của hơn một thể loại", 8 | "intersection_toomanycats": "Error: Nhiều thể loại quá!", 9 | "intersection_toofewcats": "Error: Ít thể loại quá!", 10 | "intersection_noresults": "Error: Không tìm thấy trang nào!", 11 | "intersection_noincludecats": "Error: Cần phải bao gồm ít nhất một thể loại hay định rõ một không gian tên!" 12 | } -------------------------------------------------------------------------------- /i18n/ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Paucabot", 5 | "SMP" 6 | ] 7 | }, 8 | "intersection-desc": "Genera una llista d'elements recents en una categoria o en la intersecció de diverses.", 9 | "intersection_toomanycats": "Error: Massa categories!", 10 | "intersection_toofewcats": "Error: Massa poques categories!", 11 | "intersection_noresults": "Error: Cap resultat!", 12 | "intersection_noincludecats": "Error: Heu d'incloure almenys una categoria o especificar un espai de noms!" 13 | } -------------------------------------------------------------------------------- /i18n/cs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Li-sung", 5 | "Matěj Grabovský" 6 | ] 7 | }, 8 | "intersection-desc": "Vypíše seznam nejnovějších položek v kategorii nebo sjednotí několik kategorií", 9 | "intersection_toomanycats": "Error: Příliš mnoho kategorií!", 10 | "intersection_toofewcats": "Error: Málo kategorií!", 11 | "intersection_noresults": "Error: Žádné výsledky!", 12 | "intersection_noincludecats": "Error: Musíte zahrnout alespoň jednu kategorii nebo určit jmenný prostor!" 13 | } -------------------------------------------------------------------------------- /i18n/dsb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Michawiki" 5 | ] 6 | }, 7 | "intersection-desc": "Wudawa lisćina nejaktualnjejšych zapiskow w kategoriji abo zgromadneje młogosći někotarych kategorijow", 8 | "intersection_toomanycats": "Zmólka: Pśewjele kategorijow!", 9 | "intersection_toofewcats": "Zmólka: Pśemało kategorijow!", 10 | "intersection_noresults": "Zmólka: Žedne wuslědki!", 11 | "intersection_noincludecats": "Zmólka: Musyš nanejmjenjej jadnu kategoriju zapśěgnuś abo mjenjowy rum pódaś!" 12 | } -------------------------------------------------------------------------------- /i18n/gsw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Als-Holder" 5 | ] 6 | }, 7 | "intersection-desc": "Usgabe vun ere Lischt vu dr aktuällschte Yyträg in ere Kategorii, oder vu dr Schnittmängi vu mehrere Kategorie", 8 | "intersection_toomanycats": "Fähler: Zvyyl Kategorie!", 9 | "intersection_toofewcats": "Fähler: Zwenig Kategorie!", 10 | "intersection_noresults": "Fähler: Kei Ergebnis!", 11 | "intersection_noincludecats": "Fähler: S muess zmindescht ei Kategorii yybunde wäre oder gib e Namensruum aa!" 12 | } -------------------------------------------------------------------------------- /i18n/stq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Pyt" 5 | ] 6 | }, 7 | "intersection-desc": "Uutgoawe fon ne Lieste fon do aktuälste Iendraage in ne Kategorie, of n Truchsnit fon moorere Kategorien.", 8 | "intersection_toomanycats": "Error: Toufuul Kategorien!", 9 | "intersection_toofewcats": "Error: Toumin Kategorien!", 10 | "intersection_noresults": "Error: Neen Resultoat!", 11 | "intersection_noincludecats": "Error: Der mout mindestens een Kategorie ienbuunen weese of reek n Noomensruum oun!" 12 | } -------------------------------------------------------------------------------- /i18n/ia.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "McDutchie" 5 | ] 6 | }, 7 | "intersection-desc": "Face un lista a punctos del elementos le plus recente in un categoria, o un union de plure categorias", 8 | "intersection_toomanycats": "Error: Troppo de categorias!", 9 | "intersection_toofewcats": "Error: Non bastante categorias!", 10 | "intersection_noresults": "Error: Nulle resultatos!", 11 | "intersection_noincludecats": "Error: Tu debe includer al minus un categoria, o specificar un spatio de nomines!" 12 | } -------------------------------------------------------------------------------- /i18n/li.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Matthias" 5 | ] 6 | }, 7 | "intersection-desc": "Geeft als uitvoer een ongenummerde lijst met de meest recent toegevoegde items in een categorie, of een combinatie van categorieë", 8 | "intersection_toomanycats": "Error: Te veel categorieë!", 9 | "intersection_toofewcats": "Error: Te weinig categorieë!", 10 | "intersection_noresults": "Error: Gein resultate!", 11 | "intersection_noincludecats": "Error: U moet tenminste een categorie of een naamruimte opgeve!" 12 | } -------------------------------------------------------------------------------- /i18n/hr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dalibor Bosits", 5 | "Dnik" 6 | ] 7 | }, 8 | "intersection-desc": "Omogućava popis najnovijih stranica ili datoteka iz kategorije, ili presjeka nekoliko kategorija", 9 | "intersection_toomanycats": "Error: Previše kategorija!", 10 | "intersection_toofewcats": "Error: Premalo kategorija!", 11 | "intersection_noresults": "Error: Nema rezultata!", 12 | "intersection_noincludecats": "Error: Morate uključiti bar jednu kategoriju, ili odabrati imenski prostor!" 13 | } -------------------------------------------------------------------------------- /i18n/ms.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aviator" 5 | ] 6 | }, 7 | "intersection-desc": "Mengoutput senarai item terkini dalam sesebuah kategori atau kesatuan beberapa buah kategori", 8 | "intersection_toomanycats": "Error: Kategori terlalu banyak!", 9 | "intersection_toofewcats": "Error: Kategori terlalu sedikit!", 10 | "intersection_noresults": "Error: Tiada hasil!", 11 | "intersection_noincludecats": "Error: Anda hendaklah memasukkan sekurang-kurangnya sebuah kategori atau menyatakan sebuah ruang nama!" 12 | } -------------------------------------------------------------------------------- /i18n/pt-br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Eduardo.mps" 5 | ] 6 | }, 7 | "intersection-desc": "Exibe uma lista pontuada dos itens mais recentes presentes numa categoria, ou uma intersecção de várias categorias", 8 | "intersection_toomanycats": "Erro: Categorias demais!", 9 | "intersection_toofewcats": "Erro: Poucas categorias!", 10 | "intersection_noresults": "Erro: Sem resultados!", 11 | "intersection_noincludecats": "Erro: É necessário incluir no mínimo uma categoria ou especificar um espaço nominal!" 12 | } -------------------------------------------------------------------------------- /i18n/sah.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "HalanTul" 5 | ] 6 | }, 7 | "intersection-desc": "Категорияларга бүтэһик эбиилэри эбэтэр категориялар холбонууларын бэлиэлээх (маркированнай) испииһэк курдук таһаарар", 8 | "intersection_toomanycats": "Error: категорийата наһаа элбэх!", 9 | "intersection_toofewcats": "Error: Категорията наһаа аҕыйах", 10 | "intersection_noresults": "Error: Түмүк суох!", 11 | "intersection_noincludecats": "Error: Биир эмит категорияны эбэтэр ааты (пространство имен) талыахтааххын!" 12 | } -------------------------------------------------------------------------------- /i18n/an.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Juanpabl" 5 | ] 6 | }, 7 | "intersection-desc": "Preduz una lista d'os elementos más rezients que bi ha en una categoría u a unión de barios categorías", 8 | "intersection_toomanycats": "Error: Masiadas categorías!", 9 | "intersection_toofewcats": "Error: numero insufizient de categorías!", 10 | "intersection_noresults": "Error: No bi ha garra resultau!", 11 | "intersection_noincludecats": "Error: Ha d'encluyir á lo menos una categoría u endicar un espazio de nombres!" 12 | } -------------------------------------------------------------------------------- /i18n/fa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Huji" 5 | ] 6 | }, 7 | "intersection-desc": "فهرست گلوله‌ای از صفحه‌هایی به نمایش در می‌آورد که به تازگی در یک یا چند رده وارد شده‌اند", 8 | "intersection_toomanycats": "DynamicPageList: تعداد رده‌ها زیاد است!", 9 | "intersection_toofewcats": "DynamicPageList: تعداد رده‌ها کم است!", 10 | "intersection_noresults": "DynamicPageList: نتیجه‌ای وجود ندارد!", 11 | "intersection_noincludecats": "DynamicPageList: شما حداقل باید یک رده را وارد کنید، یا یک فضای نام را مشخص کنید!" 12 | } -------------------------------------------------------------------------------- /i18n/ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mihai" 5 | ] 6 | }, 7 | "intersection-desc": "Întoarce o lista celor mai recenţi itemi care fac parte dintr-o categorie, sau intersecţia a mai multor categorii", 8 | "intersection_toomanycats": "Eroare: Prea multe categorii!", 9 | "intersection_toofewcats": "Eroare: Prea puţine categorii!", 10 | "intersection_noresults": "Eroare: Niciun rezultat!", 11 | "intersection_noincludecats": "Eroare: Trebuie să incluzi cel puţin o categorie, sau să specifici un spaţiu de nume!" 12 | } -------------------------------------------------------------------------------- /i18n/tg-cyrl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ibrahim" 5 | ] 6 | }, 7 | "intersection-desc": "Феҳристи гулулае аз саҳифаҳое ба намоиш дар меояд, ки ба тозагӣ дар як ё чанд гурӯҳ ворид шудаанд", 8 | "intersection_toomanycats": "Error: Теъдоди гурӯҳҳо зиёд аст!", 9 | "intersection_toofewcats": "Error: Теъдоди гурӯҳҳо кам аст!", 10 | "intersection_noresults": "Error: Натиҷае вуҷуд надорад!", 11 | "intersection_noincludecats": "Error: Шумо ҳадди ақал бояд як гурӯҳро ворид кунед, ё як фазои номро мушаххас кунед!" 12 | } -------------------------------------------------------------------------------- /i18n/vec.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Candalua" 5 | ] 6 | }, 7 | "intersection-desc": "Mostra un elenco puntato coi elementi piassè reçenti inserìi in te na categoria o ne l'union de più categorie", 8 | "intersection_toomanycats": "Error: Ghe xe massa categorie!", 9 | "intersection_toofewcats": "Error: Ghe xe massa póche categorie!", 10 | "intersection_noresults": "Error: Nissun risultato!", 11 | "intersection_noincludecats": "Error: Te ghè da inclùdar almanco na categoria opure specificar un namespace." 12 | } -------------------------------------------------------------------------------- /i18n/ast.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Esbardu" 5 | ] 6 | }, 7 | "intersection-desc": "Amuesa una llista de los elementos más recién que tenga una categoría o una xuntanza de varies categoríes", 8 | "intersection_toomanycats": "Error: ¡Demasiaes categoríes!", 9 | "intersection_toofewcats": "Error: ¡Demasiaes poques categoríes!", 10 | "intersection_noresults": "Error: ¡Nun hai resultaos!", 11 | "intersection_noincludecats": "Error: ¡Necesites amiestar a lo menos una categoría, o especificar un espaciu de nomes!" 12 | } -------------------------------------------------------------------------------- /i18n/bs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "CERminator", 5 | "Seha" 6 | ] 7 | }, 8 | "intersection-desc": "Izbacuje listu najčešćih tačaka koje se nalaze u kategoriji ili u sekciji nekoliko kategorija.", 9 | "intersection_toomanycats": "Greška: Previše kategorija!", 10 | "intersection_toofewcats": "Greška: Premalo kategorija!", 11 | "intersection_noresults": "Greška: Nema rezultata!", 12 | "intersection_noincludecats": "Greška: Potrebno je da uključite najmanje jednu kategoriju ili odredite imenski prostor!" 13 | } -------------------------------------------------------------------------------- /i18n/jv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Meursault2004" 5 | ] 6 | }, 7 | "intersection-desc": "Ngasilaké sawijining daftar item paling anyar ing sawijining kategori utawa gabungan sawetara kategori", 8 | "intersection_toomanycats": "Error: Kakèhan kategori!", 9 | "intersection_toofewcats": "Error: Kesithikan kategori!", 10 | "intersection_noresults": "Error: Ora ana pituwasé (kasilé)!", 11 | "intersection_noincludecats": "Error: Panjenengan perlu minimal mènèhi kategori sawiji, utawa spésifikasi bilik nama sawiji!" 12 | } -------------------------------------------------------------------------------- /i18n/bg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "DCLXVI", 5 | "Spiritia" 6 | ] 7 | }, 8 | "intersection-desc": "Извежда списък на най-скорошните записи в дадена категория или сечение на няколко категории", 9 | "intersection_toomanycats": "Error: Твърде много категории!", 10 | "intersection_toofewcats": "Error: Твърде малко категории!", 11 | "intersection_noresults": "Error: Няма резултати!", 12 | "intersection_noincludecats": "Error: Необходимо е да се включи поне една категория или да се посочи именно пространство!" 13 | } -------------------------------------------------------------------------------- /i18n/pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "555", 5 | "Malafaya" 6 | ] 7 | }, 8 | "intersection-desc": "constrói uma lista pontuada dos itens mais recentes presentes numa categoria, ou uma união de várias categorias", 9 | "intersection_toomanycats": "Error: Categorias em excesso!", 10 | "intersection_toofewcats": "Error: Poucas categorias!", 11 | "intersection_noresults": "Error: Sem resultados!", 12 | "intersection_noincludecats": "Error: É necessário incluir no mínimo uma categoria ou especificar um espaço nominal!" 13 | } -------------------------------------------------------------------------------- /i18n/el.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dead3y3" 5 | ] 6 | }, 7 | "intersection-desc": "Έχει ως έξοδο μια μη αριθμημένη λίστα των πιο πρόσφατων στοιχείων σε μια κατηγορία, ή μια τομή μερικών κατηγοριών", 8 | "intersection_toomanycats": "Σφάλμα: Πάρα πολλές κατηγορίες!", 9 | "intersection_toofewcats": "Σφάλμα: Πολύ λίγες κατηγορίες!", 10 | "intersection_noresults": "Σφάλμα: Δεν υπάρχουν αποτελέσματα!", 11 | "intersection_noincludecats": "Σφάλμα: Πρέπει να περιλάβετε τουλάχιστον μία κατηγορία, ή να ορίσετε μια περιοχή ονομάτων!" 12 | } -------------------------------------------------------------------------------- /i18n/gl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Toliño", 5 | "Xosé" 6 | ] 7 | }, 8 | "intersection-desc": "Devolve unha lista punteada dos elementos máis recentes que están nunha categoría ou nunha unión de varias categorías", 9 | "intersection_toomanycats": "Erro: demasiadas categorías!", 10 | "intersection_toofewcats": "Erro: moi poucas categorías!", 11 | "intersection_noresults": "Erro: ningún resultado!", 12 | "intersection_noincludecats": "Erro: ten que incluír unha categoría polo menos ou especificar un espazo de nomes!" 13 | } -------------------------------------------------------------------------------- /i18n/hu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dani", 5 | "Gondnok", 6 | "KossuthRad" 7 | ] 8 | }, 9 | "intersection-desc": "Megjeleníti egy adott kategóriában, vagy kategóriák uniójában lévő legújabb szócikkek listáját", 10 | "intersection_toomanycats": "Hiba: Túl sok kategória!", 11 | "intersection_toofewcats": "Hiba: Túl kevés kategória!", 12 | "intersection_noresults": "Hiba: Nincs eredmény!", 13 | "intersection_noincludecats": "Hiba: Legalább egy listázandó kategóriát meg kell adnod, vagy pedig egy névteret!" 14 | } -------------------------------------------------------------------------------- /i18n/oc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Cedric31" 5 | ] 6 | }, 7 | "intersection-desc": "Aficha una lista, amb de piuses, dels articles mai recents dins una categoria, o a partir d’una combinason de mantuna categoria.", 8 | "intersection_toomanycats": "Error : Tròp de categorias !", 9 | "intersection_toofewcats": "Error : Pas pro de categorias !", 10 | "intersection_noresults": "Error : Pas cap de resultat !", 11 | "intersection_noincludecats": "Error : avètz besonh d’inclure almens una categoria, o de precisar un nom d’espaci !" 12 | } -------------------------------------------------------------------------------- /i18n/be-tarask.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "EugeneZelenko", 5 | "Jim-by" 6 | ] 7 | }, 8 | "intersection-desc": "Выводзіць у маркіраваны сьпіс апошнія дабаўленьні да катэгорыі альбо аб'ядноўвае некалькі катэгорыяў", 9 | "intersection_toomanycats": "Памылка: Зашмат катэгорыяў!", 10 | "intersection_toofewcats": "Памылка: Занадта мала катэгорыяў!", 11 | "intersection_noresults": "Памылка: Няма вынікаў!", 12 | "intersection_noincludecats": "Памылка: Вам неабходна ўключыць хаця б адну катэгорыю альбо ўказаць прастору назваў!" 13 | } -------------------------------------------------------------------------------- /i18n/frp.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ChrisPtDe" 5 | ] 6 | }, 7 | "intersection-desc": "Afiche una lista de puges des articllos los ples novéls dens una catègorie, ou ben dês una combinèson de plusiors catègories.", 8 | "intersection_toomanycats": "Error : trop de catègories !", 9 | "intersection_toofewcats": "Error : pas prod de catègories !", 10 | "intersection_noresults": "Error : nion rèsultat !", 11 | "intersection_noincludecats": "Error : vos avéd fôta d’encllure u muens yona catègorie, ou ben de spècefiar un èspâço de nom !" 12 | } -------------------------------------------------------------------------------- /i18n/nb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jon Harald Søby" 5 | ] 6 | }, 7 | "intersection-desc": "Gir en punktliste over de nyeste elementene i en kategori, eller elementer som er felles i flere kategorier", 8 | "intersection_toomanycats": "Dynamisk sideliste: For mange kategorier!", 9 | "intersection_toofewcats": "Dynamisk sidelist: For få kategorier!", 10 | "intersection_noresults": "Dynamisk sideliste: Ingen resultater!", 11 | "intersection_noincludecats": "Dynamisk sideliste: Du må inkludere minst én kategori, eller oppgi et navnerom!" 12 | } -------------------------------------------------------------------------------- /i18n/roa-tara.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joetaras" 5 | ] 6 | }, 7 | "intersection-desc": "Fa assè 'na liste cu le palle de le urteme urteme artichele ca stonne jndr'à 'na categorije, o 'n'interseziona de cchiù categorije", 8 | "intersection_toomanycats": "Errore: Troppe categorije!", 9 | "intersection_toofewcats": "Errore: Troppe picche categorije!", 10 | "intersection_noresults": "Errore: Nisciune resultete!", 11 | "intersection_noincludecats": "Errore: Tu è abbesogne de 'ngludere ninde ninde 'na categorije, o specificà 'nu namespace!" 12 | } -------------------------------------------------------------------------------- /i18n/lb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robby" 5 | ] 6 | }, 7 | "intersection-desc": "Generéiert eng Lëscht mat de rezentesten Androungen an eng Kategorie, oder an eng Intersektioun vu méi Kategorien", 8 | "intersection_toomanycats": "Dynamesch Säite-Lëscht: Zevill Kategorien!", 9 | "intersection_toofewcats": "Dynamesch Säite-Lëscht: Ze wéineg Kategorien!", 10 | "intersection_noresults": "Dynamesch Säite-Lëscht: Kee Resultat!", 11 | "intersection_noincludecats": "Dynamesch Säite-Lëscht: Dir musst mindestens eng Kategorie abannen, oder de Nummraum uginn!" 12 | } -------------------------------------------------------------------------------- /i18n/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aleator", 5 | "Remember the dot", 6 | "Sanbec" 7 | ] 8 | }, 9 | "intersection-desc": "Devuelve una lista de los elementos más recientes que están en una categoría o en una intersección de varias categorías", 10 | "intersection_toomanycats": "¡Error: Demasiadas categorías!", 11 | "intersection_toofewcats": "Error: ¡Muy pocas categorías!", 12 | "intersection_noresults": "Error: ¡Sin resultados!", 13 | "intersection_noincludecats": "Error: ¡Necesita incluir al menos una categoría, o especificar un espacio de nombres!" 14 | } -------------------------------------------------------------------------------- /i18n/ml.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Shijualex" 5 | ] 6 | }, 7 | "intersection-desc": "ഒരു കാറ്റഗറിയില്‍ പുതിയതായി വന്ന ഇനങ്ങളുടെ ബുള്ളറ്റ് പട്ടികയോ, അല്ലെങ്കില്‍ നിരവധി കാറ്റഗറികളുടെ കൂട്ടത്തെയോ ഔട്ട് പുട്ടായി കിട്ടുന്നു.", 8 | "intersection_toomanycats": "Error: വളരെയധികം കാറ്റഗറികള്‍!", 9 | "intersection_toofewcats": "Error: വളരെ കുറച്ച് കാറ്റഗറികള്‍!", 10 | "intersection_noresults": "Error: ഫലങ്ങള്‍ ഒന്നുമില്ല!", 11 | "intersection_noincludecats": "Error: ചുരുങ്ങിയത് ഒരു കാറ്റഗറിയെങ്കിലും ഉള്‍പ്പെടുത്തുകയോ അല്ലെങ്കില്‍ ഒരു നേംസ്പേസ് എങ്കിലും നിഷ്കര്‍ഷിച്ചിരിക്കുകയോ വേണം!" 12 | } -------------------------------------------------------------------------------- /i18n/tl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "AnakngAraw" 5 | ] 6 | }, 7 | "intersection-desc": "Naglalabas ng isang tinuldukang talaan ng pinakakamakailang mga bagay-bagay na naninirahan sa loob ng isang kaurian, o isang pinagsangahang daanan ng ilang mga kaurian", 8 | "intersection_toomanycats": "Kamalian: Napakaraming mga kaurian!", 9 | "intersection_toofewcats": "Kamalian: Napakakaunti ng mga kaurian!", 10 | "intersection_noresults": "Kaurian: Walang mga kinalabasan/resulta!", 11 | "intersection_noincludecats": "Kamalian: Kinakailangan mong magsama ng kahit na isang kaurian, o tumukoy ng isang espasyo ng pangalan!" 12 | } -------------------------------------------------------------------------------- /.phpcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 3 12 | 13 | . 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /classes/heading/UnorderedHeading.php: -------------------------------------------------------------------------------- 1 | '; 20 | 21 | /** 22 | * List(Section) End 23 | * 24 | * @var string 25 | */ 26 | public $listEnd = ''; 27 | 28 | /** 29 | * Item Start 30 | * 31 | * @var string 32 | */ 33 | public $itemStart = ''; 34 | 35 | /** 36 | * Item End 37 | * 38 | * @var string 39 | */ 40 | public $itemEnd = ''; 41 | } 42 | -------------------------------------------------------------------------------- /i18n/ksh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Purodha" 5 | ] 6 | }, 7 | "intersection-desc": "Zeij_en Liß met de neuste Enndrääsch en en Saachjrupp, udder de neuste Enndrääsch, die en alle Jruppe uss_enem Knubbel fun Saachjrupp dren sin.", 8 | "intersection_toomanycats": "DynamicPageList hät ene Fääler jefonge: Dat sinn_er zo vill Saachjroppe!", 9 | "intersection_toofewcats": "DynamicPageList hät ene Fääler jefonge: Dat sin ze winnisch Saachjruppe!", 10 | "intersection_noresults": "DynamicPageList hät ene Fääler jefonge: Do kohm nix bei erus!", 11 | "intersection_noincludecats": "DynamicPageList hät ene Fääler jefonge: Mer bruch winnischßdens ein Saachjrupp. Söns jivv e Appachtemang aan!" 12 | } -------------------------------------------------------------------------------- /classes/lister/UnorderedList.php: -------------------------------------------------------------------------------- 1 | '; 27 | 28 | /** 29 | * List(Section) End 30 | * 31 | * @var string 32 | */ 33 | public $listEnd = ''; 34 | 35 | /** 36 | * Item Start 37 | * 38 | * @var string 39 | */ 40 | public $itemStart = ''; 41 | 42 | /** 43 | * Item End 44 | * 45 | * @var string 46 | */ 47 | public $itemEnd = ''; 48 | } 49 | -------------------------------------------------------------------------------- /classes/lister/DefinitionList.php: -------------------------------------------------------------------------------- 1 | 24 | * 25 | * @var string 26 | */ 27 | public $headListStart = ''; 28 | 29 | /** 30 | * Heading List End 31 | * 32 | * @var string 33 | */ 34 | public $headListEnd = ''; 35 | 36 | /** 37 | * Heading List Start 38 | * Use %s for attribute placement. Example: 39 | * 40 | * @var string 41 | */ 42 | public $headItemStart = ''; 43 | 44 | /** 45 | * Heading List End 46 | * 47 | * @var string 48 | */ 49 | public $headItemEnd = ''; 50 | 51 | /** 52 | * List(Section) Start 53 | * 54 | * @var string 55 | */ 56 | public $listStart = ''; 57 | 58 | /** 59 | * List(Section) End 60 | * 61 | * @var string 62 | */ 63 | public $listEnd = ''; 64 | 65 | /** 66 | * Item Start 67 | * 68 | * @var string 69 | */ 70 | public $itemStart = ''; 71 | 72 | /** 73 | * Item End 74 | * 75 | * @var string 76 | */ 77 | public $itemEnd = ''; 78 | } 79 | -------------------------------------------------------------------------------- /classes/lister/GalleryList.php: -------------------------------------------------------------------------------- 1 | '; 29 | 30 | /** 31 | * List(Section) End 32 | * 33 | * @var string 34 | */ 35 | public $listEnd = ''; 36 | 37 | /** 38 | * Item Start 39 | * 40 | * @var string 41 | */ 42 | public $itemStart = "\n"; 43 | 44 | /** 45 | * Item End 46 | * 47 | * @var string 48 | */ 49 | public $itemEnd = "|"; 50 | 51 | /** 52 | * Format an item. 53 | * 54 | * @access public 55 | * @param object DPL\Article 56 | * @param string [Optional] Page text to include.include. 57 | * @return string Item HTML 58 | */ 59 | public function formatItem(Article $article, $pageText = null) { 60 | $item = $article->mTitle; 61 | 62 | if ($pageText !== null) { 63 | //Include parsed/processed wiki markup content after each item before the closing tag. 64 | $item .= $pageText; 65 | } 66 | 67 | $item = $this->getItemStart() . $item . $this->itemEnd; 68 | 69 | $item = $this->replaceTagParameters($item, $article); 70 | 71 | return $item; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /classes/db/CreateTemplateUpdateMaintenance.php: -------------------------------------------------------------------------------- 1 | exists()) { 33 | $page = WikiPage::factory($title); 34 | $pageContent = ContentHandler::makeContent("This page was automatically created. It serves as an anchor page for all '''[[Special:WhatLinksHere/Template:Extension_DPL|invocations]]''' of [http://mediawiki.org/wiki/Extension:DynamicPageList Extension:DynamicPageList (DPL)].", $title); 35 | $page->doEditContent( 36 | $pageContent, 37 | $title, 38 | EDIT_NEW | EDIT_FORCE_BOT 39 | ); 40 | } 41 | } 42 | 43 | /** 44 | * Get the unique update key for this logged update. 45 | * 46 | * @access protected 47 | * @return string Unique Key 48 | */ 49 | protected function getUpdateKey() { 50 | return 'dynamic-page-list-create-template'; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /classes/lister/CategoryList.php: -------------------------------------------------------------------------------- 1 | mLink; 37 | $articleStartChars[] = $articles[$i]->mStartChar; 38 | $filteredCount = $filteredCount + 1; 39 | } 40 | 41 | $this->rowCount = $filteredCount; 42 | 43 | if (count($articleLinks) > Config::getSetting('categoryStyleListCutoff')) { 44 | return "__NOTOC____NOEDITSECTION__" . \CategoryViewer::columnList($articleLinks, $articleStartChars); 45 | } elseif (count($articleLinks) > 0) { 46 | // for short lists of articles in categories. 47 | return "__NOTOC____NOEDITSECTION__" . \CategoryViewer::shortList($articleLinks, $articleStartChars); 48 | } 49 | return ''; 50 | } 51 | 52 | /** 53 | * Format a single item. 54 | * 55 | * @access public 56 | * @param object DPL\Article 57 | * @param string [Optional] Page text to include. 58 | * @return string Item HTML 59 | */ 60 | public function formatItem(Article $article, $pageText = null) { 61 | return ''; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /classes/lister/InlineList.php: -------------------------------------------------------------------------------- 1 | '; 41 | 42 | /** 43 | * List(Section) End 44 | * 45 | * @var string 46 | */ 47 | public $listEnd = ''; 48 | 49 | /** 50 | * Item Start 51 | * 52 | * @var string 53 | */ 54 | public $itemStart = ''; 55 | 56 | /** 57 | * Item End 58 | * 59 | * @var string 60 | */ 61 | public $itemEnd = ''; 62 | 63 | /** 64 | * Inline item text separator. 65 | * 66 | * @var string 67 | */ 68 | protected $textSeparator = ''; 69 | 70 | /** 71 | * Main Constructor 72 | * 73 | * @access public 74 | * @param object \DPL\Parameters 75 | * @param object MediaWiki \Parser 76 | * @return void 77 | */ 78 | public function __construct(\DPL\Parameters $parameters, \Parser $parser) { 79 | parent::__construct($parameters, $parser); 80 | $this->textSeparator = $parameters->getParameter('inlinetext'); 81 | } 82 | 83 | /** 84 | * Join together items after being processed by formatItem(). 85 | * 86 | * @access public 87 | * @param array Items as formatted by formatItem(). 88 | * @return string Imploded items. 89 | */ 90 | protected function implodeItems($items) { 91 | return implode($this->textSeparator, $items); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /classes/lister/OrderedList.php: -------------------------------------------------------------------------------- 1 | '; 27 | 28 | /** 29 | * List(Section) End 30 | * 31 | * @var string 32 | */ 33 | public $listEnd = ''; 34 | 35 | /** 36 | * Offset Count 37 | * 38 | * @var integer 39 | */ 40 | private $offsetCount = 0; 41 | 42 | /** 43 | * Format the list of articles. 44 | * 45 | * @access public 46 | * @param array List of \DPL\Article 47 | * @param integer Start position of the array to process. 48 | * @param integer Total objects from the array to process. 49 | * @return string Formatted list. 50 | */ 51 | public function formatList($articles, $start, $count) { 52 | $this->offsetCount = $count; 53 | return parent::formatList($articles, $start, $count); 54 | } 55 | 56 | /** 57 | * Return $this->listStart with attributes replaced. 58 | * 59 | * @access public 60 | * @return string List Start 61 | */ 62 | public function getListStart() { 63 | // increase start value of ordered lists at multi-column output 64 | //The offset that comes from the URL parameter is zero based, but has to be +1'ed for display. 65 | $offset = $this->getParameters()->getParameter('offset') + 1; 66 | 67 | if ($offset != 0) { 68 | //@TODO: So this adds the total count of articles to the offset. I have not found a case where this does not mess up the displayed count. I am commenting this out for now. 69 | //$offset += $this->offsetCount; 70 | } 71 | 72 | return sprintf($this->listStart, $this->listAttributes . ' start="' . $offset . '"'); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /classes/Config.php: -------------------------------------------------------------------------------- 1 | 19 | * 20 | * @var string 21 | */ 22 | public $headListStart = '
'; 23 | 24 | /** 25 | * Heading List End 26 | * 27 | * @var string 28 | */ 29 | public $headListEnd = '
'; 30 | 31 | /** 32 | * Heading List Start 33 | * Use %s for attribute placement. Example: 34 | * 35 | * @var string 36 | */ 37 | public $headItemStart = ''; 38 | 39 | /** 40 | * Heading List End 41 | * 42 | * @var string 43 | */ 44 | public $headItemEnd = ''; 45 | 46 | /** 47 | * List(Section) Start 48 | * 49 | * @var string 50 | */ 51 | public $listStart = ''; 52 | 53 | /** 54 | * List(Section) End 55 | * 56 | * @var string 57 | */ 58 | public $listEnd = ''; 59 | 60 | /** 61 | * Item Start 62 | * 63 | * @var string 64 | */ 65 | public $itemStart = ''; 66 | 67 | /** 68 | * Item End 69 | * 70 | * @var string 71 | */ 72 | public $itemEnd = ''; 73 | 74 | /** 75 | * Format a heading group. 76 | * 77 | * @access public 78 | * @param integer Article start index for this heading. 79 | * @param integer Article count for this heading. 80 | * @param string Heading link/text display. 81 | * @param array List of \DPL\Article. 82 | * @param object List of \DPL\Lister\Lister 83 | * @return string Heading HTML 84 | */ 85 | public function formatItem($headingStart, $headingCount, $headingLink, $articles, Lister $lister) { 86 | $item = ''; 87 | 88 | $item .= $this->headListStart . $headingLink; 89 | if ($this->showHeadingCount) { 90 | $item .= $this->articleCountMessage($headingCount); 91 | } 92 | $item .= $this->headListEnd; 93 | $item .= $this->getItemStart() . $lister->formatList($articles, $headingStart, $headingCount) . $this->getItemEnd(); 94 | 95 | return $item; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /classes/Logger.php: -------------------------------------------------------------------------------- 1 | buffer; 42 | if ($clearBuffer === true) { 43 | $this->buffer = []; 44 | } 45 | return $buffer; 46 | } 47 | 48 | /** 49 | * Get a message, with optional parameters 50 | * Parameters from user input must be escaped for HTML *before* passing to this function 51 | * 52 | * @access public 53 | * @param integer Message ID 54 | * @return string 55 | */ 56 | public function msg() { 57 | $args = func_get_args(); 58 | $errorId = array_shift($args); 59 | $errorLevel = floor($errorId / 1000); 60 | $errorMessageId = $errorId % 1000; 61 | if (\DynamicPageListHooks::getDebugLevel() >= $errorLevel) { 62 | if (\DynamicPageListHooks::isLikeIntersection()) { 63 | if ($errorId == \DynamicPageListHooks::FATAL_TOOMANYCATS) { 64 | $text = wfMessage('intersection_toomanycats', $args)->text(); 65 | } elseif ($errorId == \DynamicPageListHooks::FATAL_TOOFEWCATS) { 66 | $text = wfMessage('intersection_toofewcats', $args)->text(); 67 | } elseif ($errorId == \DynamicPageListHooks::WARN_NORESULTS) { 68 | $text = wfMessage('intersection_noresults', $args)->text(); 69 | } elseif ($errorId == \DynamicPageListHooks::FATAL_NOSELECTION) { 70 | $text = wfMessage('intersection_noincludecats', $args)->text(); 71 | } 72 | } 73 | if (empty($text)) { 74 | $text = wfMessage('dpl_log_' . $errorMessageId, $args)->text(); 75 | } 76 | $this->buffer[] = '

Extension:DynamicPageList (DPL), version ' . DPL_VERSION . ': ' . $text . '

'; 77 | } 78 | return false; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /i18n/yue.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Shinjiman" 5 | ] 6 | }, 7 | "intersection-desc": "輸出一個點列最近響分類嘅項目,或者係幾個分類嘅一個聯繫", 8 | "intersection_toomanycats": "DynamicPageList: 太多分類!", 9 | "intersection_toofewcats": "DynamicPageList: 太少分類!", 10 | "intersection_noresults": "DynamicPageList: 無結果!", 11 | "intersection_noincludecats": "DynamicPageList: 你需要去包含最少一個分類,或者指定一個空間名!", 12 | "dpl-desc": "一個畀MediaWiki嘅高彈性報告產生器", 13 | "dpl_log_1": "錯誤: 錯嘅 '$0' 參數: '$1'! 幫助: $0= 空字串 (主)$3。", 14 | "dpl_log_3": "錯誤: 太多分類! 最大值: $0。 幫助: 增加 DynamicPageListHooks::$maxCategoryCount 嘅值去指定更多嘅分類或者設定 DynamicPageListHooks::$allowUnlimitedCategories=true 以解除限制。 (當加上 DynamicPageList.php之後,響LocalSettings.php度設定變數。)", 15 | "dpl_log_4": "錯誤: 太少分類! 最小值: $0. 幫助: 減少 DynamicPageListHooks::$minCategoryCount 嘅值去指定更少嘅分類。 (當加上 DynamicPageList.php之後,響LocalSettings.php度設定一個合適嘅變數。)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "錯誤: 如果你想去用 'addfirstcategorydate=true' 或者 'ordermethod=categoryadd' ,你需要包含最少一個分類!", 18 | "dpl_log_7": "錯誤: 如果你包含多過一個分類,你唔可以用 'addfirstcategorydate=true' 或者 'ordermethod=categoryadd'!", 19 | "dpl_log_8": "錯誤: 你唔可以響一個時間度加入多個一種嘅日期!", 20 | "dpl_log_9": "錯誤: 你只可以用 'ordermethod=[...,]$1' 響 '$0' 上!", 21 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 22 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 23 | "dpl_log_13": "警告: 不明嘅參數 '$1' 被忽略。 幫助: 可用嘅參數: $2。", 24 | "dpl_log_14": "警告: 錯誤嘅 '$0' 參數: '$1'! 用緊預設嘅: '$2'。 幫助: $0= $3。", 25 | "dpl_log_15": "警告: 錯誤嘅 '$0' 參數: '$1'! 用緊預設嘅: '$2' (冇上限)。 幫助: $0= 空字串 (冇上限) | n, n係一個正整數。", 26 | "dpl_log_16": "警告: 無結果!", 27 | "dpl_log_17": "警告: 加入* 參數 ('adduser', 'addeditdate', 等)' 係對 'mode=category' 冇作用嘅。只有頁空間名/標題至可以響呢個模式度睇到。", 28 | "dpl_log_18": "警告: 響單一部件中, 'ordermethod' 度用 'headingmode=$0' 係冇作用嘅。 用緊: '$1'。 幫助: 你可以用非$1 'headingmode' 數值,響多個部件中用 'ordermethod' 。第一個部件係用嚟做標題。例如響分類標題度用 'ordermethod=category,comp' (comp係另外一個部件) 。", 29 | "dpl_log_19": "警告: 'debug=$0' 唔係第一個響DPL元素嘅第一位。新嘅除錯設定響所有參數都能夠處理同檢查之前都唔會應用。", 30 | "dpl_log_21": "查訽: $0", 31 | "dpl_articlecount": "響呢個標題度有$1篇文。" 32 | } -------------------------------------------------------------------------------- /i18n/zh-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Shinjiman" 5 | ] 6 | }, 7 | "intersection-desc": "输出一个点列最近在分类中的项目,或者系数个分类的一个联系", 8 | "intersection_toomanycats": "DynamicPageList: 太多分类!", 9 | "intersection_toofewcats": "DynamicPageList: 太少分类!", 10 | "intersection_noresults": "DynamicPageList: 没有结果!", 11 | "intersection_noincludecats": "DynamicPageList: 您需要去包含最少一个分类,或者指定一个空间名!", 12 | "dpl-desc": "一个给MediaWiki的高弹性报告产生器", 13 | "dpl_log_1": "错误: 错误的 '$0' 参数: '$1'! 帮助: $0= 空白字符串 (主)$3。", 14 | "dpl_log_3": "错误: 过多分类! 最大值: $0。 帮助: 增加 DynamicPageListHooks::$maxCategoryCount 的值去指定更多的分类或设定 DynamicPageListHooks::$allowUnlimitedCategories=true 以解除限制。 (当加上 DynamicPageList.php后,在LocalSettings.php中设定变量。)", 15 | "dpl_log_4": "错误: 过少分类! 最小值: $0。 帮助: 减少 DynamicPageListHooks::$minCategoryCount 的值去指定更少的分类。 (当加上 DynamicPageList.php后,在LocalSettings.php中设定一个合适的变量。)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "错误: 如果您想用 'addfirstcategorydate=true' 或 'ordermethod=categoryadd' ,您需要包含最少一个分类!", 18 | "dpl_log_7": "错误: 如果您包含多一个分类,您不可以用 'addfirstcategorydate=true' 或 'ordermethod=categoryadd'!", 19 | "dpl_log_8": "错误: 您不可以在一个时间里加入多于一种的日期!", 20 | "dpl_log_9": "错误: 你只可以用 'ordermethod=[...,]$1' 在 '$0' 上!", 21 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 22 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 23 | "dpl_log_13": "警告: 不明的参数 '$1' 被忽略。 帮助: 可用的参数: $2。", 24 | "dpl_log_14": "警告: 错误的 '$0' 参数: '$1'! 正在使用默认值: '$2'。 帮助: $0= $3。", 25 | "dpl_log_15": "警告: 错误的 '$0' 参数: '$1'! 正在使用默认值: '$2' (没有上限)。 帮助: $0= 空白字符串 (没有上限) | n, n是一个正整数。", 26 | "dpl_log_16": "警告: 无结果!", 27 | "dpl_log_17": "警告: 加入* 参数 ('adduser', 'addeditdate', 等)' 是对 'mode=category' 没有作用。只有页面空间名/标题才可以在这个模式度看到。", 28 | "dpl_log_18": "警告: 在单一部件中, 'ordermethod' 用 'headingmode=$0' 是没有作用的。 正在使用: '$1'。 帮助: 你可以用非$1 'headingmode' 数值,在多个部件中用 'ordermethod' 。第一个部是用来作标题。例如在分类标题中用 'ordermethod=category,comp' (comp是另外一个部件) 。", 29 | "dpl_log_19": "警告: 'debug=$0' 不是第一个在DPL元素嘅第一位置。新的除错设定在所有参数都能处理和检查前都不会应用。", 30 | "dpl_log_21": "查訽: $0", 31 | "dpl_articlecount": "在这个标题中有$1篇条目。" 32 | } -------------------------------------------------------------------------------- /i18n/zh-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Shinjiman" 5 | ] 6 | }, 7 | "intersection-desc": "輸出一個點列最近在分類中的項目,或者係數個分類的一個聯繫", 8 | "intersection_toomanycats": "DynamicPageList: 太多分類!", 9 | "intersection_toofewcats": "DynamicPageList: 太少分類!", 10 | "intersection_noresults": "DynamicPageList: 沒有結果!", 11 | "intersection_noincludecats": "DynamicPageList: 您需要去包含最少一個分類,或者指定一個空間名!", 12 | "dpl-desc": "一個給MediaWiki的高彈性報告產生器", 13 | "dpl_log_1": "錯誤: 錯誤的 '$0' 參數: '$1'! 說明: $0= 空白字串 (主)$3。", 14 | "dpl_log_3": "錯誤: 過多分類! 最大值: $0。 說明: 增加 DynamicPageListHooks::$maxCategoryCount 的值去指定更多的分類或設定 DynamicPageListHooks::$allowUnlimitedCategories=true 以解除限制。 (當加上 DynamicPageList.php後,在LocalSettings.php中設定變數。)", 15 | "dpl_log_4": "錯誤: 過少分類! 最小值: $0。 說明: 減少 DynamicPageListHooks::$minCategoryCount 的值去指定更少的分類。 (當加上 DynamicPageList.php後,在LocalSettings.php中設定一個合適的變數。)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "錯誤: 如果您想用 'addfirstcategorydate=true' 或 'ordermethod=categoryadd' ,您需要包含最少一個分類!", 18 | "dpl_log_7": "錯誤: 如果您包含多一個分類,您不可以用 'addfirstcategorydate=true' 或 'ordermethod=categoryadd'!", 19 | "dpl_log_8": "錯誤: 您不可以在一個時間裡加入多於一種的日期!", 20 | "dpl_log_9": "錯誤: 你只可以用 'ordermethod=[...,]$1' 在 '$0' 上!", 21 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 22 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 23 | "dpl_log_13": "警告: 不明的參數 '$1' 被忽略。 說明: 可用的參數: $2。", 24 | "dpl_log_14": "警告: 錯誤的 '$0' 參數: '$1'! 正在使用預設值: '$2'。 說明: $0= $3。", 25 | "dpl_log_15": "警告: 錯誤的 '$0' 參數: '$1'! 正在使用預設值: '$2' (沒有上限)。 說明: $0= 空白字串 (沒有上限) | n, n是一個正整數。", 26 | "dpl_log_16": "警告: 無結果!", 27 | "dpl_log_17": "警告: 加入* 參數 ('adduser', 'addeditdate', 等)' 是對 'mode=category' 沒有作用。只有頁面空間名/標題才可以在這個模式度看到。", 28 | "dpl_log_18": "警告: 在單一部件中, 'ordermethod' 用 'headingmode=$0' 是沒有作用的。 正在使用: '$1'。 說明: 你可以用非$1 'headingmode' 數值,在多個部件中用 'ordermethod' 。第一個部是用來作標題。例如在分類標題中用 'ordermethod=category,comp' (comp是另外一個部件) 。", 29 | "dpl_log_19": "警告: 'debug=$0' 不是第一個在DPL元素嘅第一位置。新的除錯設定在所有參數都能處理和檢查前都不會應用。", 30 | "dpl_log_21": "查訽: $0", 31 | "dpl_articlecount": "在這個標題中有$1篇條目。" 32 | } -------------------------------------------------------------------------------- /classes/heading/TieredHeading.php: -------------------------------------------------------------------------------- 1 | '; 23 | 24 | /** 25 | * List(Section) End 26 | * 27 | * @var string 28 | */ 29 | public $listEnd = ''; 30 | 31 | /** 32 | * Item Start 33 | * 34 | * @var string 35 | */ 36 | public $itemStart = ''; 37 | 38 | /** 39 | * Item End 40 | * 41 | * @var string 42 | */ 43 | public $itemEnd = ''; 44 | 45 | /** 46 | * Tier Level 47 | * 48 | * @var string 49 | */ 50 | private $tierLevel = 'eader'; 51 | 52 | /** 53 | * Main Constructor 54 | * 55 | * @access public 56 | * @param object \DPL\Parameters 57 | * @return void 58 | */ 59 | public function __construct(Parameters $parameters) { 60 | parent::__construct($parameters); 61 | $this->tierLevel = substr($parameters->getParameter('headingmode'), 1); 62 | } 63 | 64 | /** 65 | * Format a heading group. 66 | * 67 | * @access public 68 | * @param integer Article start index for this heading. 69 | * @param integer Article count for this heading. 70 | * @param string Heading link/text display. 71 | * @param array List of \DPL\Article. 72 | * @param object List of \DPL\Lister\Lister 73 | * @return string Heading HTML 74 | */ 75 | public function formatItem($headingStart, $headingCount, $headingLink, $articles, Lister $lister) { 76 | $item = ''; 77 | 78 | $item .= $this->getItemStart() . $headingLink; 79 | if ($this->showHeadingCount) { 80 | $item .= $this->articleCountMessage($headingCount); 81 | } 82 | $item .= $this->getItemEnd(); 83 | $item .= $lister->formatList($articles, $headingStart, $headingCount); 84 | 85 | return $item; 86 | } 87 | 88 | /** 89 | * Return $this->listStart with attributes replaced. 90 | * 91 | * @access public 92 | * @return string List Start 93 | */ 94 | public function getListStart() { 95 | return sprintf($this->listStart, $this->listAttributes); 96 | } 97 | 98 | /** 99 | * Return $this->itemStart with attributes replaced. 100 | * 101 | * @access public 102 | * @return string Item Start 103 | */ 104 | public function getItemStart() { 105 | return sprintf($this->itemStart, $this->itemAttributes, $this->tierLevel); 106 | } 107 | 108 | /** 109 | * Return $this->itemEnd with attributes replaced. 110 | * 111 | * @access public 112 | * @return string Item End 113 | */ 114 | public function getItemEnd() { 115 | return sprintf($this->itemEnd, $this->itemAttributes, $this->tierLevel); 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /classes/lister/SubPageList.php: -------------------------------------------------------------------------------- 1 | '; 27 | 28 | /** 29 | * List(Section) End 30 | * 31 | * @var string 32 | */ 33 | public $listEnd = ''; 34 | 35 | /** 36 | * Item Start 37 | * 38 | * @var string 39 | */ 40 | public $itemStart = ''; 41 | 42 | /** 43 | * Item End 44 | * 45 | * @var string 46 | */ 47 | public $itemEnd = ''; 48 | 49 | /** 50 | * Format a list of articles into a singular list. 51 | * 52 | * @access public 53 | * @param array List of \DPL\Article 54 | * @param integer Start position of the array to process. 55 | * @param integer Total objects from the array to process. 56 | * @return string Formatted list. 57 | */ 58 | public function formatList($articles, $start, $count) { 59 | $filteredCount = 0; 60 | $items = []; 61 | for ($i = $start; $i < $start + $count; $i++) { 62 | $article = $articles[$i]; 63 | if (empty($article) || empty($article->mTitle)) { 64 | continue; 65 | } 66 | 67 | $pageText = null; 68 | if ($this->includePageText) { 69 | $pageText = $this->transcludePage($article, $filteredCount); 70 | } else { 71 | $filteredCount++; 72 | } 73 | 74 | $this->rowCount = $filteredCount++; 75 | 76 | $parts = explode('/', $article->mTitle); 77 | $item = $this->formatItem($article, $pageText); 78 | $items = $this->nestItem($parts, $items, $item); 79 | } 80 | 81 | return $this->getListStart() . $this->implodeItems($items) . $this->listEnd; 82 | } 83 | 84 | /** 85 | * Nest items down to the proper level. 86 | * 87 | * @access private 88 | * @param array Part levels to nest down to. 89 | * @param array Items holder to nest the item into. 90 | * @param string Formatted Item 91 | * @return array Nest Items 92 | */ 93 | private function nestItem(&$parts, $items, $item) { 94 | $firstPart = reset($parts); 95 | if (count($parts) > 1) { 96 | array_shift($parts); 97 | if (!isset($items[$firstPart])) { 98 | $items[$firstPart] = []; 99 | } 100 | $items[$firstPart] = $this->nestItem($parts, $items[$firstPart], $item); 101 | return $items; 102 | } 103 | $items[$firstPart][] = $item; 104 | 105 | return $items; 106 | } 107 | 108 | /** 109 | * Join together items after being processed by formatItem(). 110 | * 111 | * @access protected 112 | * @param array Items as formatted by formatItem(). 113 | * @return string Imploded items. 114 | */ 115 | protected function implodeItems($items) { 116 | $list = ''; 117 | foreach ($items as $key => $item) { 118 | if (is_string($item)) { 119 | $list .= $item; 120 | continue; 121 | } 122 | if (is_array($item)) { 123 | $list .= $this->getItemStart() . $key . $this->getListStart() . $this->implodeItems($item) . $this->listEnd . $this->getItemEnd(); 124 | } 125 | } 126 | return $list; 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /i18n/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "SPQRobin", 5 | "Siebrand" 6 | ] 7 | }, 8 | "intersection-desc": "Geeft als uitvoer een ongenummerde lijst met de meest recent toegevoegde items in een categorie, of een combinatie van categorieën", 9 | "intersection_toomanycats": "Fout: Te veel categorieën!", 10 | "intersection_toofewcats": "Fout: Te weinig categorieën!", 11 | "intersection_noresults": "Fout: Geen resultaten!", 12 | "intersection_noincludecats": "Fout: U moet tenminste een categorie of een naamruimte opgeven!", 13 | "dpl_log_1": "FOUT: Verkeerde parameter '$0': '$1'! Hulp: $0= lege string (Main)$3.", 14 | "dpl_log_2": "FOUT: Te veel categoriën! Maximum: $0. Hulp: verhoog DynamicPageListHooks::$maxCategoryCount om meer categorieën op te kunnen geven of stel geen limiet in met DynamicPageListHooks::$allowUnlimitedCategories=true. (Neem deze variabele op in LocalSettings.php, na het toevoegen van DynamicPageList.php.)", 15 | "dpl_log_3": "FOUT: Te weinig categorieën! Minimum: $0. Hulp: verlaag DynamicPageListHooks::$minCategoryCount om minder categorieën aan te hoeven geven. (Stel de variabele bij voorkeur in via LocalSettings.php, na het toevoegen van DynamicPageList.php.)", 16 | "dpl_log_4": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_5": "FOUT: U dient tenminste één categorie op te nemen als u 'addfirstcategorydate=true' of 'ordermethod=categoryadd' wilt gebruiken!", 18 | "dpl_log_6": "FOUT: Als u meer dan één categorie opneemt, kunt u 'addfirstcategorydate=true' of 'ordermethod=categoryadd' niet gebruiken!", 19 | "dpl_log_8": "FOUT: U kunt niet meer dan één type of datum tegelijk gebruiken!", 20 | "dpl_log_9": "FOUT: U kunt '$0' alleen met 'ordermethod=[...,]$1' gebruiken!", 21 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 22 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 23 | "dpl_log_14": "WAARSCHUWING: Verkeerde parameter '$0': '$1'! Nu wordt de standaard gebruikt: '$2'. Hulp: $0= $3.", 24 | "dpl_log_16": "WAARSCHUWING: Geen resultaten!", 25 | "dpl_log_17": "WAARSCHUWING: Add* parameters ('adduser', 'addeditdate', etc.)' heeft geen effect bij 'mode=category'. Alleen de paginanaamruimte/titel is in deze modus te bekijken.", 26 | "dpl_log_18": "WAARSCHUWING: 'headingmode=$0' heeft geen effect met 'ordermethod' op een enkele component. Nu wordt gebruikt: '$1'. Hulp: u kunt een niet-$1 'headingmode'-waarde gebruiken met 'ordermethod' op meerdere componenten. De eerste component wordt gebruikt als kop. Bijvoorbeeld 'ordermethod=category,comp' (comp is een ander component) voor categoriekoppen.", 27 | "dpl_log_19": "WAARSCHUWING: 'debug=$0' is niet de eerste positie in het DPL-element. De nieuwe debuginstellingen zijn niet toegepast voor alle voorgaande parameters zijn verwerkt en gecontroleerd.", 28 | "dpl_log_21": "QUERY: $0", 29 | "dpl_articlecount": "Er {{PLURAL:$1|is één pagina|zijn $1 pagina's}} onder deze kop." 30 | } -------------------------------------------------------------------------------- /i18n/sr-el.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Millosh" 5 | ] 6 | }, 7 | "dpl_log_1": "GREŠKA: Pogrean '$0' parametar: '$1'! Pomoć: $0= pogrešan string (Glavno)$3. (Ekvivalenti sa magičnim rečima su takođe dozvoljeni.)", 8 | "dpl_log_2": "GREŠKA: Pogrešan '$0' parametar: '$1'! Pomoć: $0= puno ime stranice. (Magične reči su dozvoljene.)", 9 | "dpl_log_3": "GREŠKA: Previše kategorija! Maksimum je: $0. Pomoć: povećajte DynamicPageListHooks::$maxCategoryCount kako biste postavili više kategorija ili promenite DynamicPageListHooks::$allowUnlimitedCategories=true za bez granica. (Podesite varijablu u LocalSettings.php, nakon uključivanja DynamicPageList.php.)", 10 | "dpl_log_4": "GREŠKA: Premalo kategorija! Minimum je: $0. Pomoć: povećajte DynamicPageListHooks::$minCategoryCount kako biste postavili manje kategorija. (Podesite varijablu u LocalSettings.php, nakon uključivanja DynamicPageList.php.)", 11 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 12 | "dpl_log_6": "GREŠKA: Morate uključiti bar jednu kategoriju ukoliko želite da koristite 'addfirstcategorydate=true' ili 'ordermethod=categoryadd'!", 13 | "dpl_log_7": "GREŠKA: Ukoliko uključujete više od jedne kategorije, ne možete koristiti 'addfirstcategorydate=true' ili 'ordermethod=categoryadd'!", 14 | "dpl_log_8": "GREŠKA: Ne možete dodati više od jednog tipa datuma!", 15 | "dpl_log_9": "GREŠKA: Možete koristiti '$0' sa 'ordermethod=[...,]$1' isključivo!", 16 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 17 | "dpl_log_11": "GREŠKA: Nemoguće izvršiti operaciju na nekategorizovanim stranicama (npr. sa 'category' parametrom) zato što $0 pregled ne postoji u bazi podataka! Pomoć: neka administrator baze izvrši ovaj upit: $1.", 18 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 19 | "dpl_log_13": "PAŽNJA: Nepoznat parametar '$1' je ignorisan. Pomoć: dostupni parametri su: $2.", 20 | "dpl_log_14": "PAŽNJA: Pogrešan '$0' parametar: '$1'! Koristi se osnovni: '$2'. Pomoć: $0= $3.", 21 | "dpl_log_15": "PAŽNJA: Pogrešan '$0' parametar: '$1'! Koristi se osnovni: '$2' (bez granice). Pomoć: $0= prazan string (bez granice) | n, s n je pozitivan integer.", 22 | "dpl_log_16": "PAŽNJA: Nema rezultata!", 23 | "dpl_log_17": "PAŽNJA: Dodavanje* parametara ('adduser', 'addeditdate', itd.)' i 'includepage' nema efekta sa 'mode=category'. Isključivo ime stranice/imenski prostor mogu da se vide u ovom modu.", 24 | "dpl_log_18": "PAŽNJA: 'headingmode=$0' nema efekta sa 'ordermethod' na jednoj komponenti. Koristi se: '$1'. Pomoć: ne morate koristiti-$1 'headingmode' podatke 'ordermethod' na više komponenti. Prva komponenta se koristi za naslov. Npr. 'ordermethod=category,komponenta' (komponenta je druga komponenta) za naslove kategorija.", 25 | "dpl_log_19": "PAŽNJA: 'debug=$0' nije na prvom mestu u DPL elementu. Nova debag podešavanja nisu primenjena pre svih parametara koji su provereni", 26 | "dpl_log_20": "PAŽNJA: Beskonačna petljasa stranice '$0'.", 27 | "dpl_log_21": "UPIT: $0", 28 | "dpl_articlecount": "U ovom naslovu se trenutno nalazi {{PLURAL:$1|jedan članak|$1 članka|$1 članaka}}" 29 | } -------------------------------------------------------------------------------- /classes/Variables.php: -------------------------------------------------------------------------------- 1 | = 3 && $arg[2] == '') { 33 | $start = 3; 34 | } else { 35 | $start = 2; 36 | } 37 | for ($i = $start; $i < $numargs; $i++) { 38 | $var = $arg[$i]; 39 | if (++$i <= $numargs - 1) { 40 | self::$memoryVar[$var] = $arg[$i]; 41 | } else { 42 | self::$memoryVar[$var] = ''; 43 | } 44 | } 45 | return ''; 46 | } 47 | 48 | public static function setVarDefault($arg) { 49 | $numargs = count($arg); 50 | if ($numargs > 3) { 51 | $value = $arg[3]; 52 | } else { 53 | return ''; 54 | } 55 | $var = $arg[2]; 56 | if (!array_key_exists($var, self::$memoryVar) || self::$memoryVar[$var] == '') { 57 | self::$memoryVar[$var] = $value; 58 | } 59 | return ''; 60 | } 61 | 62 | public static function getVar($var) { 63 | if (array_key_exists($var, self::$memoryVar)) { 64 | return self::$memoryVar[$var]; 65 | } 66 | return ''; 67 | } 68 | 69 | public static function setArray($arg) { 70 | $numargs = count($arg); 71 | if ($numargs < 5) { 72 | return ''; 73 | } 74 | $var = trim($arg[2]); 75 | $value = $arg[3]; 76 | $delimiter = $arg[4]; 77 | if ($var == '') { 78 | return ''; 79 | } 80 | if ($value == '') { 81 | self::$memoryArray[$var] = []; 82 | return; 83 | } 84 | if ($delimiter == '') { 85 | self::$memoryArray[$var] = [ 86 | $value 87 | ]; 88 | return; 89 | } 90 | if (0 !== strpos($delimiter, '/') || (strlen($delimiter) - 1) !== strrpos($delimiter, '/')) { 91 | $delimiter = '/\s*' . $delimiter . '\s*/'; 92 | } 93 | self::$memoryArray[$var] = preg_split($delimiter, $value); 94 | return "value={$value}, delimiter={$delimiter}," . count(self::$memoryArray[$var]); 95 | } 96 | 97 | public static function dumpArray($arg) { 98 | $numargs = count($arg); 99 | if ($numargs < 3) { 100 | return ''; 101 | } 102 | $var = trim($arg[2]); 103 | $text = " array {$var} = {"; 104 | $n = 0; 105 | if (array_key_exists($var, self::$memoryArray)) { 106 | foreach (self::$memoryArray[$var] as $value) { 107 | if ($n++ > 0) { 108 | $text .= ', '; 109 | } 110 | $text .= "{$value}"; 111 | } 112 | } 113 | return $text . "}\n"; 114 | } 115 | 116 | public static function printArray($var, $delimiter, $search, $subject) { 117 | $var = trim($var); 118 | if ($var == '') { 119 | return ''; 120 | } 121 | if (!array_key_exists($var, self::$memoryArray)) { 122 | return ''; 123 | } 124 | $values = self::$memoryArray[$var]; 125 | $rendered_values = []; 126 | foreach ($values as $v) { 127 | $temp_result_value = str_replace($search, $v, $subject); 128 | $rendered_values[] = $temp_result_value; 129 | } 130 | return [ 131 | implode($delimiter, $rendered_values), 132 | 'noparse' => false, 133 | 'isHTML' => false 134 | ]; 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DynamicPageList3", 3 | "version": "3.3.3", 4 | "author": [ 5 | "[http://de.wikipedia.org/wiki/Benutzer:Algorithmix Gero Scholz]", 6 | "Alexia E. Smith" 7 | ], 8 | "url": "https://www.mediawiki.org/wiki/Extension:DynamicPageList3", 9 | "descriptionmsg": "dpl-desc", 10 | "license-name": "GPL-2.0-or-later", 11 | "type": "parserhook", 12 | "requires": { 13 | "MediaWiki": ">= 1.27.4" 14 | }, 15 | "GroupPermissions": { 16 | "sysop": { 17 | "dpl_param_update_rules": true, 18 | "dpl_param_delete_rules": true 19 | } 20 | }, 21 | "AvailableRights": [ 22 | "dpl_param_update_rules", 23 | "dpl_param_delete_rules" 24 | ], 25 | "MessagesDirs": { 26 | "DynamicPageList": [ 27 | "i18n" 28 | ] 29 | }, 30 | "ExtensionMessagesFiles": { 31 | "DynamicPageListMagic": "DynamicPageList.i18n.magic.php" 32 | }, 33 | "AutoloadClasses": { 34 | "DPL\\Article": "classes/Article.php", 35 | "DPL\\Config": "classes/Config.php", 36 | "DPL\\DB\\CreateTemplateUpdateMaintenance": "classes/db/CreateTemplateUpdateMaintenance.php", 37 | "DPL\\Heading\\DefinitionHeading": "classes/heading/DefinitionHeading.php", 38 | "DPL\\Heading\\Heading": "classes/heading/Heading.php", 39 | "DPL\\Heading\\OrderedHeading": "classes/heading/OrderedHeading.php", 40 | "DPL\\Heading\\TieredHeading": "classes/heading/TieredHeading.php", 41 | "DPL\\Heading\\UnorderedHeading": "classes/heading/UnorderedHeading.php", 42 | "DPL\\Lister\\CategoryList": "classes/lister/CategoryList.php", 43 | "DPL\\Lister\\DefinitionList": "classes/lister/DefinitionList.php", 44 | "DPL\\Lister\\GalleryList": "classes/lister/GalleryList.php", 45 | "DPL\\Lister\\InlineList": "classes/lister/InlineList.php", 46 | "DPL\\Lister\\Lister": "classes/lister/Lister.php", 47 | "DPL\\Lister\\OrderedList": "classes/lister/OrderedList.php", 48 | "DPL\\Lister\\SubPageList": "classes/lister/SubPageList.php", 49 | "DPL\\Lister\\UnorderedList": "classes/lister/UnorderedList.php", 50 | "DPL\\Lister\\UserFormatList": "classes/lister/UserFormatList.php", 51 | "DPL\\Logger": "classes/Logger.php", 52 | "DPL\\LST": "classes/LST.php", 53 | "DPL\\Parameters": "classes/Parameters.php", 54 | "DPL\\ParametersData": "classes/ParametersData.php", 55 | "DPL\\Parse": "classes/Parse.php", 56 | "DPL\\Query": "classes/Query.php", 57 | "DPL\\UpdateArticle": "classes/UpdateArticle.php", 58 | "DPL\\Variables": "classes/Variables.php", 59 | "DynamicPageListHooks": "DynamicPageListHooks.php" 60 | }, 61 | "Hooks": { 62 | "ParserFirstCallInit": [ 63 | "DynamicPageListHooks::onParserFirstCallInit" 64 | ], 65 | "LoadExtensionSchemaUpdates": [ 66 | "DynamicPageListHooks::onLoadExtensionSchemaUpdates" 67 | ] 68 | }, 69 | "config": { 70 | "DplSettings": { 71 | "allowedNamespaces": null, 72 | "allowUnlimitedCategories": false, 73 | "allowUnlimitedResults": false, 74 | "behavingLikeIntersection": false, 75 | "categoryStyleListCutoff": 6, 76 | "fixedCategories": [], 77 | "functionalRichness": 3, 78 | "maxCategoryCount": 4, 79 | "minCategoryCount": 0, 80 | "maxResultCount": 500, 81 | "recursiveTagParse": false, 82 | "runFromProtectedPagesOnly": false, 83 | "handleSectionTag": false, 84 | "alwaysCacheResults": false 85 | } 86 | }, 87 | "TrackingCategories": [ 88 | "dpl-tag-tracking-category", 89 | "dpl-intersection-tracking-category", 90 | "dpl-parserfunc-tracking-category", 91 | "dplnum-parserfunc-tracking-category", 92 | "dplvar-parserfunc-tracking-category", 93 | "dplreplace-parserfunc-tracking-category", 94 | "dplchapter-parserfunc-tracking-category", 95 | "dplmatrix-parserfunc-tracking-category" 96 | ], 97 | "callback": "DynamicPageListHooks::onRegistration", 98 | "manifest_version": 1 99 | } 100 | -------------------------------------------------------------------------------- /i18n/he.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Rotem Liss" 5 | ] 6 | }, 7 | "intersection-desc": "רשימה עם תבליטים של הפריטים האחרונים המצויים בקטגוריה, או במספר קטגוריות", 8 | "intersection_toomanycats": "DynamicPageList: קטגוריות רבות מדי!", 9 | "intersection_toofewcats": "DynamicPageList: קטגוריות מעטות מדי!", 10 | "intersection_noresults": "DynamicPageList: אין תוצאות!", 11 | "intersection_noincludecats": "DynamicPageList: עליכם לכלול לפחות קטגוריה אחת, או לציין מרחב שם!", 12 | "dpl_log_1": "שגיאה: פרמטר '$0' שגוי: '$1'! עזרה: $0= מחרוזת ריקה (ראשי)$3. (ניתן להשתמש גם בשווי ערך באמצעות מילות קסם.)", 13 | "dpl_log_2": "שגיאה: פרמטר '$0' שגוי: '$1'! עזרה: $0= שם הדף המלא. (ניתן להשתמש במילות קסם.)", 14 | "dpl_log_3": "שגיאה: קטגוריות רבות מדי! מקסימום: $0. עזרה: העלו את DynamicPageListHooks::$maxCategoryCount כדי לציין עוד קטגוריות או הגדירו DynamicPageListHooks::$allowUnlimitedCategories=true כדי לבטל את ההגבלה. (הגידרו את המשתנה בקובץ LocalSettings.php, לאחר הכללת DynamicPageList.php.)", 15 | "dpl_log_4": "שגיאה: קטגוריות מעטות מדי! מינימום: $0. עזרה: הורידו את DynamicPageListHooks::$minCategoryCount כדי לציין פחות קטגוריות. (הגידרו את המשתנה בקובץ LocalSettings.php, לאחר הכללת DynamicPageList.php.)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "שגיאה: עליכם להכליל לפחות קטגוריה אחת אם ברצונכם להשתמש ב־'addfirstcategorydate=true' או ב־'ordermethod=categoryadd'!", 18 | "dpl_log_7": "שגיאה: אם אתם מכלילים יותר מקטגוריה אחת, אינכם יכולים להשתמש ב־'addfirstcategorydate=true' או ב־'ordermethod=categoryadd'!", 19 | "dpl_log_8": "שגיאה: אינכם יכולים להוסיף יותר מסוג אחד של תאריך בו זמנית!", 20 | "dpl_log_9": "?????: ????????? ?????? ??'$0' ?? 'ordermethod=[...,]$1' ????!", 21 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 22 | "dpl_log_11": "שגיאה: לא ניתן לבצע פעולות לוגיות על דפים ללא קטגוריות (למשל, עם הפרמטר 'קטגוריה') כיוון שתצוגת $0 אינה קיימת במסד הנתונים! עזרה: מנהל מסד הנתונים צריך להריץ את השאילתה: $1.", 23 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 24 | "dpl_log_13": "אזהרה: בוצעה התעלמות מהפרמטר הלא ידוע '$1'. עזרה: פרמטרים זמינים: $2.", 25 | "dpl_log_14": "אזהרה: פרמטר '$0' שגוי: '$1'! משתמש בברירת המחדל: '$2'. עזרה: $0= $3.", 26 | "dpl_log_15": "אזהרה: פרמטר '$0' שגוי: '$1'! משתמש בברירת המחדל: '$2' (ללא הגבלה). עזרה: $0= מחרוזת ריקה (ללא הגבלה) | n, עם n כמספר שלם וחיובי.", 27 | "dpl_log_16": "?????: ??? ??????!", 28 | "dpl_log_17": "אזהרה: להוספת* הפרמטרים ('adduser',‏ 'addeditdate' וכדומה) וכן ל־'includepage' אין השפעה עם 'mode=category'. ניתן לצפות רק במרחב השם או בכותרת הדף במצב זה.", 29 | "dpl_log_18": "אזהרה: ל־'headingmode=$0' אין השפעה עם 'ordermethod' על פריט יחיד. משתמש ב: '$1'. עזרה: באפשרותכם להשתמש בערכים של 'headingmode' שאינם $1 עם 'ordermethod' על פריטים מרובים. משתמשים בפריט הראשון לכותרת. למשל, 'ordermethod=category,comp' (comp הוא פריט אחר) לכותרות הקטגוריה.", 30 | "dpl_log_19": "אזהרה: 'debug=$0w הוא לא במקום הראשון ברכיב ה־DPL. הגדרות ניפוי השגיאות החדשות לא יחולו לפני שכל הפרמטרים הקודמים ינותחו וייבדקו.", 31 | "dpl_log_20": "אזהרה: לולאת הכללה אינסופית נוצרה בדף '$0'.", 32 | "dpl_log_21": "שאילתה: $0", 33 | "dpl_articlecount": "{{PLURAL:$1|ישנם $1 דפים|ישנו דף אחד}} תחת כותרת זו." 34 | } -------------------------------------------------------------------------------- /i18n/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Александр Сигачёв" 5 | ] 6 | }, 7 | "intersection-desc": "Выводит в маркированный список последние добавления в категорию или объединение нескольких категорий", 8 | "intersection_toomanycats": "Error: слишком много категорий!", 9 | "intersection_toofewcats": "Error: слишком мало категорий!", 10 | "intersection_noresults": "Error: нет результатов!", 11 | "intersection_noincludecats": "Error: вы должны включить хотя бы одну категорию или указать пространство имён!", 12 | "dpl_log_1": "ОШИБКА: неправильный «$0»-параметр: «$1»! Подсказка: $0= пустая строка (Основное)$3.", 13 | "dpl_log_3": "ОШИБКА: слишком много категорий! Максимум: $0. Подсказка: увеличте DynamicPageListHooks::$maxCategoryCount чтобы разрешить больше категорий или установите DynamicPageListHooks::$allowUnlimitedCategories=true для снятия ограничения. (Устанавливайте переменные в LocalSettings.php, после подключения DynamicPageList.php.)", 14 | "dpl_log_4": "ОШИБКА: слишком мало категорий! Минимум: $0. Подсказка: уменьшите DynamicPageListHooks::$minCategoryCount чтобы разрешить меньше категорий. (Устанавливайте переменную в LocalSettings.php, после подключения DynamicPageList.php.)", 15 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 16 | "dpl_log_6": "ОШИБКА: вы должны включить хотя бы одну категорию, если вы хотите использовать «addfirstcategorydate=true» или «ordermethod=categoryadd»!", 17 | "dpl_log_7": "ОШИБКА: если вы включаете больше одной категории, то вы не можете использовать «addfirstcategorydate=true» или «ordermethod=categoryadd»!", 18 | "dpl_log_8": "ОШИБКА: вы не можете добавить более одного типа данных за раз!", 19 | "dpl_log_9": "ОШИБКА: вы можете использовать «$0» только с «ordermethod=[...,]$1»!", 20 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 21 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 22 | "dpl_log_13": "ПРЕДУПРЕЖДЕНИЕ: неизвестный параметр «$1» проигнорирован. Подсказка: доступные параметры: $2.", 23 | "dpl_log_14": "ПРЕДУПРЕЖДЕНИЕ: неправильный параметр «$0»: «$1»! Использование параметра по умолчанию: «$2». Подсказка: $0= $3.", 24 | "dpl_log_15": "ПРЕДУПРЕЖДЕНИЕ: неправильный параметр «$0»: «$1»! Использование параметра по умолчанию: «$2» (без ограничений). Подсказка: $0= пустая строка (без ограничений) | n, с n равным положительному целому числу.", 25 | "dpl_log_16": "ПРЕДУПРЕЖДЕНИЕ: не найдено!", 26 | "dpl_log_17": "ПРЕДУПРЕЖДЕНИЕ: Добавление* параметров («adduser», «addeditdate», и др.) не действительны с «mode=category». Только пространства имён или названия могут просматриваться в этом режиме.", 27 | "dpl_log_18": "ПРЕДУПРЕЖДЕНИЕ: «headingmode=$0» не действителен с «ordermethod» в одном компоненте. Использование: «$1». Подсказка: вы можете использоватьe не-$1 «headingmode» значения с «ordermethod» во множестве компонентов. Первый компонент используется для заголовков. Например, «ordermethod=category,comp» (comp является другим компонентом) для заголовков категорий.", 28 | "dpl_log_19": "ПРЕДУПРЕЖДЕНИЕ: «debug=$0» не находится на первом месте в DPL-элементе. Новые настройки отладки не будут применены пока все предыдущие параметры не будут разобраны и проверены.", 29 | "dpl_log_21": "ЗАПРОС: $0", 30 | "dpl_articlecount": "В этом заголовке $1 {{PLURAL:$1|статья|статьи|статей}}." 31 | } -------------------------------------------------------------------------------- /i18n/sk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Helix84" 5 | ] 6 | }, 7 | "intersection-desc": "Vypíše zoznam najnovších položiek v kategórii alebo zjednotení niekoľkých kategórií", 8 | "intersection_toomanycats": "Error: Príliš veľa kategórií!", 9 | "intersection_toofewcats": "Error: Príliš málo kategórií!", 10 | "intersection_noresults": "Error: Žiadne výsledky!", 11 | "intersection_noincludecats": "Error: Musíte uviesť aspoň jednu kategóriu alebo menný priestor!", 12 | "dpl_log_1": "CHYBA: nesprávny parameter '$0': '$1'! Pomocník $0= prázdny retazec (Hlavný)$3.", 13 | "dpl_log_2": "CHYBA: Zlý parameter '$0': '$1'! Pomocník $0= plný názov stránky.", 14 | "dpl_log_3": "CHYBA: Príliš vela kategórií! Maximum: $0. Pomocník: zväcšite DynamicPageListHooks::$maxCategoryCount, aby ste mohli špecifikovat viac kategórií alebo nastavte DynamicPageListHooks::$allowUnlimitedCategories=true pre vypnutie limitu. (Premennú nastatavte v LocalSettings.php, potom ako bol includovaný DynamicPageList.php.)", 15 | "dpl_log_4": "CHYBA: Príliš málo kategórií! Minimum: $0. Pomocník: znížte DynamicPageListHooks::$minCategoryCount, aby ste mohli špecifikovat menej kategórií. (Premennú nastavte najlepšie v LocalSettings.php potom, ako v nom bol includovaný DynamicPageList.php.)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "CHYBA: Musíte uviest aspon jednu kategóriu ak chcete použit 'addfirstcategorydate=true' alebo 'ordermethod=categoryadd'!", 18 | "dpl_log_7": "CHYBA: Ak zahrniete viac ako jednu kategóriu, nemôžete použit 'addfirstcategorydate=true' alebo 'ordermethod=categoryadd'!", 19 | "dpl_log_8": "CHYBA: Nemôžete naraz pridat viac ako jeden typ dátumu!", 20 | "dpl_log_9": "CHYBA: '$0' môžete použit iba s 'ordermethod=[...,]$1'!", 21 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 22 | "dpl_log_11": "CHYBA: Nie je momožné vykonávat logické operácie na nekategorizovaných kategóriách (napr. s parametrom 'Kategória') lebo neexistuje na databázu pohlad $0! Pomocník: nech admin databázy vykoná tento dotaz: $1.", 23 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 24 | "dpl_log_13": "VAROVANIE: Neznámy parameter '$1' ignorovaný. Pomocník: dostupné parametre: $2.", 25 | "dpl_log_14": "VAROVANIE: Nesprávny '$0' parameter: '$1'! Používam štandardný '$2'. Pomocník: $0= $3.", 26 | "dpl_log_15": "VAROVANIE: Nesprávny parameter '$0': '$1'! Používam štandardný: '$2' (bez obmedzenia). Pomocník: $0= prázdny retazec (bez obmedzenia) | n, s kladným celým císlom n.", 27 | "dpl_log_16": "VAROVANIE: No results!", 28 | "dpl_log_17": "VAROVANIE: Parametre Add* ('adduser', 'addeditdate', atd' nepracujú s mode=category'. V tomto režime je možné prehliadat iba menná priestor/titulok stránky.", 29 | "dpl_log_18": "VAROVANIE: 'headingmode=$0' nepracuje s 'ordermethod' na jednom komponente. Použitie: '$1'. Pomocník: môžete použit not-$1 hodnoty 'headingmode' s 'ordermethod' na viaceré komponenty. Prvý komponent sa používa na nadpisy. Napr. 'ordermethod=category,comp' (comp je iný komponent) pre nadpisy kategórií.", 30 | "dpl_log_19": "VAROVANIE: 'debug=$0' nie je na prvej pozícii v prvku DPL. Nové ladiacie nastavenia nebudú použíté skôr než budú parsované a skontrolované všetky predchádzajúce.", 31 | "dpl_log_21": "DOTAZ: $0", 32 | "dpl_articlecount": "V tomto nadpise {{PLURAL:$1|je jeden clánok|sú $1 clánky|je $1 clánkov}}." 33 | } -------------------------------------------------------------------------------- /i18n/sr-ec.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Millosh" 5 | ] 6 | }, 7 | "intersection-desc": "Даје редни списак најскорије додатих чланака у једну или више категорија.", 8 | "intersection_toomanycats": "Грешка: Превише категорија!", 9 | "intersection_toofewcats": "Грешка:Премало категорија!", 10 | "intersection_noresults": "Грешка: Нема резулатата!", 11 | "intersection_noincludecats": "Грешка: Потребно је укључити бар једну категорију или одредити именски простор!", 12 | "dpl_log_1": "ГРЕШКА: Погреан '$0' параметар: '$1'! Помоћ: $0= погрешан стринг (Главно)$3. (Еквиваленти са магичним речима су такође дозвољени.)", 13 | "dpl_log_2": "ГРЕШКА: Погрешан '$0' параметар: '$1'! Помоћ: $0= пуно име странице. (Магичне речи су дозвољене.)", 14 | "dpl_log_3": "ГРЕШКА: Превише категорија! Максимум је: $0. Помоћ: повећајте DynamicPageListHooks::$maxCategoryCount како бисте поставили више категорија или промените DynamicPageListHooks::$allowUnlimitedCategories=true за без граница. (Подесите варијаблу у LocalSettings.php, након укључивања DynamicPageList.php.)", 15 | "dpl_log_4": "ГРЕШКА: Премало категорија! Минимум је: $0. Помоћ: повећајте DynamicPageListHooks::$minCategoryCount како бисте поставили мање категорија. (Подесите варијаблу у LocalSettings.php, након укључивања DynamicPageList.php.)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "ГРЕШКА: Морате укључити бар једну категорију уколико желите да користите 'addfirstcategorydate=true' или 'ordermethod=categoryadd'!", 18 | "dpl_log_7": "ГРЕШКА: Уколико укључујете више од једне категорије, не можете користити 'addfirstcategorydate=true' или 'ordermethod=categoryadd'!", 19 | "dpl_log_8": "ГРЕШКА: Не можете додати више од једног типа датума!", 20 | "dpl_log_9": "ГРЕШКА: Можете користити '$0' са 'ordermethod=[...,]$1' искључиво!", 21 | "dpl_log_10": "ГРЕШКА: Немогуће извршити операцију на некатегоризованим страницама (нпр. са 'category' параметром) зато што $0 преглед не постоји у бази података! Помоћ: нека администратор базе изврши овај упит: $1.", 22 | "dpl_log_11": "ERROR: Cannot perform logical operations on the Uncategorized pages (f.e. with the 'category' parameter) because the $0 view does not exist on the database! Help: have the database administrator execute this query: $1.", 23 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 24 | "dpl_log_13": "ПАЖЊА: Непознат параметар '$1' је игнорисан. Помоћ: доступни параметри су: $2.", 25 | "dpl_log_14": "ПАЖЊА: Погрешан '$0' параметар: '$1'! Користи се основни: '$2'. Помоћ: $0= $3.", 26 | "dpl_log_15": "ПАЖЊА: Погрешан '$0' параметар: '$1'! Користи се основни: '$2' (без границе). Помоћ: $0= празан стринг (без границе) | n, с n је позитиван интегер.", 27 | "dpl_log_16": "ПАЖЊА: Нема резултата!", 28 | "dpl_log_17": "ПАЖЊА: Додавање* параметара ('adduser', 'addeditdate', итд.)' и 'includepage' нема ефекта са 'mode=category'. Искључиво име странице/именски простор могу да се виде у овом моду.", 29 | "dpl_log_18": "ПАЖЊА: 'headingmode=$0' нема ефекта са 'ordermethod' на једној компоненти. Користи се: '$1'. Помоћ: не морате користити-$1 'headingmode' податке 'ordermethod' на више компоненти. Прва компонента се користи за наслов. Нпр. 'ordermethod=category,компонента' (компонента је друга компонента) за наслове категорија.", 30 | "dpl_log_29": "ПАЖЊА: 'debug=$0' није на првом месту у DPL елементу. Нова дебаг подешавања нису примењена пре свих параметара који су проверени", 31 | "dpl_log_20": "ПАЖЊА: Бесконачна петљаса странице '$0'.", 32 | "dpl_log_21": "УПИТ: $0", 33 | "dpl_articlecount": "У овом наслову се тренутно налази {{PLURAL:$1|један чланак|$1 чланка|$1 чланака}}." 34 | } -------------------------------------------------------------------------------- /i18n/sr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Millosh" 5 | ] 6 | }, 7 | "intersection-desc": "Даје редни списак најскорије додатих чланака у једну или више категорија.", 8 | "intersection_toomanycats": "Грешка: Превише категорија!", 9 | "intersection_toofewcats": "Грешка:Премало категорија!", 10 | "intersection_noresults": "Грешка: Нема резулатата!", 11 | "intersection_noincludecats": "Грешка: Потребно је укључити бар једну категорију или одредити именски простор!", 12 | "dpl_log_1": "ГРЕШКА: Погреан '$0' параметар: '$1'! Помоћ: $0= погрешан стринг (Главно)$3. (Еквиваленти са магичним речима су такође дозвољени.)", 13 | "dpl_log_2": "ГРЕШКА: Погрешан '$0' параметар: '$1'! Помоћ: $0= пуно име странице. (Магичне речи су дозвољене.)", 14 | "dpl_log_3": "ГРЕШКА: Превише категорија! Максимум је: $0. Помоћ: повећајте DynamicPageListHooks::$maxCategoryCount како бисте поставили више категорија или промените DynamicPageListHooks::$allowUnlimitedCategories=true за без граница. (Подесите варијаблу у LocalSettings.php, након укључивања DynamicPageList.php.)", 15 | "dpl_log_4": "ГРЕШКА: Премало категорија! Минимум је: $0. Помоћ: повећајте DynamicPageListHooks::$minCategoryCount како бисте поставили мање категорија. (Подесите варијаблу у LocalSettings.php, након укључивања DynamicPageList.php.)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "ГРЕШКА: Морате укључити бар једну категорију уколико желите да користите 'addfirstcategorydate=true' или 'ordermethod=categoryadd'!", 18 | "dpl_log_7": "ГРЕШКА: Уколико укључујете више од једне категорије, не можете користити 'addfirstcategorydate=true' или 'ordermethod=categoryadd'!", 19 | "dpl_log_8": "ГРЕШКА: Не можете додати више од једног типа датума!", 20 | "dpl_log_9": "ГРЕШКА: Можете користити '$0' са 'ordermethod=[...,]$1' искључиво!", 21 | "dpl_log_10": "ГРЕШКА: Немогуће извршити операцију на некатегоризованим страницама (нпр. са 'category' параметром) зато што $0 преглед не постоји у бази података! Помоћ: нека администратор базе изврши овај упит: $1.", 22 | "dpl_log_11": "ERROR: Cannot perform logical operations on the Uncategorized pages (f.e. with the 'category' parameter) because the $0 view does not exist on the database! Help: have the database administrator execute this query: $1.", 23 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 24 | "dpl_log_13": "ПАЖЊА: Непознат параметар '$1' је игнорисан. Помоћ: доступни параметри су: $2.", 25 | "dpl_log_14": "ПАЖЊА: Погрешан '$0' параметар: '$1'! Користи се основни: '$2'. Помоћ: $0= $3.", 26 | "dpl_log_15": "ПАЖЊА: Погрешан '$0' параметар: '$1'! Користи се основни: '$2' (без границе). Помоћ: $0= празан стринг (без границе) | n, с n је позитиван интегер.", 27 | "dpl_log_16": "ПАЖЊА: Нема резултата!", 28 | "dpl_log_17": "ПАЖЊА: Додавање* параметара ('adduser', 'addeditdate', итд.)' и 'includepage' нема ефекта са 'mode=category'. Искључиво име странице/именски простор могу да се виде у овом моду.", 29 | "dpl_log_18": "ПАЖЊА: 'headingmode=$0' нема ефекта са 'ordermethod' на једној компоненти. Користи се: '$1'. Помоћ: не морате користити-$1 'headingmode' податке 'ordermethod' на више компоненти. Прва компонента се користи за наслов. Нпр. 'ordermethod=category,компонента' (компонента је друга компонента) за наслове категорија.", 30 | "dpl_log_29": "ПАЖЊА: 'debug=$0' није на првом месту у DPL елементу. Нова дебаг подешавања нису примењена пре свих параметара који су проверени", 31 | "dpl_log_20": "ПАЖЊА: Бесконачна петљаса странице '$0'.", 32 | "dpl_log_21": "УПИТ: $0", 33 | "dpl_articlecount": "У овом наслову се тренутно налази {{PLURAL:$1|један чланак|$1 чланка|$1 чланака}}." 34 | } -------------------------------------------------------------------------------- /i18n/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "IvanLanin" 5 | ] 6 | }, 7 | "intersection-desc": "Menghasilkan suatu daftar item terbaru pada suatu kategori atau gabungan beberapa kategori", 8 | "intersection_toomanycats": "DynamicPageList: Terlalu banyak kategori!", 9 | "intersection_toofewcats": "DynamicPageList: Terlalu sedikit kategori!", 10 | "intersection_noresults": "DynamicPageList: Tak ada hasil yang sesuai!", 11 | "intersection_noincludecats": "DynamicPageList: Anda perlu mencantumkan paling tidak satu kategori, atau menyebutkan satu ruang nama!", 12 | "dpl_log_1": "KESALAHAN: Parameter '$0' salah: '$1'! Bantuan: $0= string kosong (Utama)$3. (Ekivalen kata kunci juga diizinkan.)", 13 | "dpl_log_2": "KESALAHAN: Parameter '$0' salah: '$1'! Bantuan: $0= nama lengkap halaman. (Kata kunci diizinkan.)", 14 | "dpl_log_3": "KESALAHAN: Kategori terlalu banyak! Maksimum: $0. Bantuan: perbesar DynamicPageListHooks::$maxCategoryCount untuk memberikan lebih banyak kategori atau atur DynamicPageListHooks::$allowUnlimitedCategories=true untuk menghapus batasan. (Atur variabel tersebut di LocalSettings.php, setelah mencantumkan DynamicPageList.php.)", 15 | "dpl_log_4": "KESALAHAN: Kategori terlalu sedikit! Minimum: $0. Bantuan: kurangi DynamicPageListHooks::$minCategoryCount untuk mengurangi kategori. (Atur variabel tersebut di LocalSettings.php, setelah mencantumkan DynamicPageList.php.)", 16 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 17 | "dpl_log_6": "KESALAHAN: Anda harus memberikan paling tidak satu kategori jika menggunakan 'addfirstcategorydate=true' atau 'ordermethod=categoryadd'!", 18 | "dpl_log_7": "KESALAHAN: Jika Anda memberikan lebih dari satu kategori, Anda tidak dapat menggunakan 'addfirstcategorydate=true' atau 'ordermethod=categoryadd'!", 19 | "dpl_log_8": "KESALAHAN: Anda tidak dapat memberikan lebih dari satu jenis tanggal dalam satu waktu!", 20 | "dpl_log_9": "KESALAHAN: Anda dapat menggunakan '$0' hanya dengan 'ordermethod=[...,]$1'!", 21 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 22 | "dpl_log_11": "KESALAHAN: Tidak dapat melakukan operasi logika pada halaman yang tak terkategori (misalnya dengan parameter 'kategori') karena view $0 tidak ada di basis data! Bantuan: mintalah admin basis data untuk menjalankan kueri berikut: $1.", 23 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 24 | "dpl_log_13": "KESALAHAN: Paramater yang tak dikenal '$1' diabaikan. Bantuan: parameter yang tersedia: $2.", 25 | "dpl_log_14": "KESALAHAN: Parameter '$0' salah: '$1'! Menggunakan konfigurasi baku: '$2'. Bantuan: $0= $3.", 26 | "dpl_log_15": "KESALAHAN: Parameter '$0' salah: '$1'! Menggunakan konfigurasi baku: '$2' (tanpa limitasi). Bantuan: $0= string kosong (tanpa limitasi) | n, dengan n suatu bilangan positif.", 27 | "dpl_log_16": "KESALAHAN: Hasil tak ditemukan!", 28 | "dpl_log_17": "KESALAHAN: Menambahkan * parameter ('adduser', 'addeditdate', dll.)' dan 'includepage' tidak berpengaruh pada 'mode=category'. Hanya ruang nama/judul halaman yang dapat ditampilkan dengan mode ini.", 29 | "dpl_log_18": "KESALAHAN: 'headingmode=$0' tidak berpengaruh dengan 'ordermethod' pada suatu komponen tunggal. Menggunakan: '$1'. Bantuan: Anda dapat menggunakan nilai not-$1 'headingmode' dengan 'ordermethod' terhadap beberapa komponen. Komponen pertama digunakan sebagai judul. Misalnya 'ordermethod=category,comp' (comp adalah komponen lain) untuk judul kategori.", 30 | "dpl_log_19": "KESALAHAN: 'debug=$0' tidak pada posisi pertama pada elemen DPL. Aturan debug tidak diterapkan sebelum semua variabel sebelumnya telah diparsing dan dicek.", 31 | "dpl_log_20": "KESALAHAN: Suatu lingkaran transklusi tak hingga ditimbulkan oleh halaman '$0'.", 32 | "dpl_log_21": "KUERI: $0", 33 | "dpl_articlecount": "Terdapat {{PLURAL:$1|artikel|artikel}} dalam judul ini." 34 | } -------------------------------------------------------------------------------- /i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Grondin", 5 | "Urhixidur", 6 | "Verdy p" 7 | ] 8 | }, 9 | "intersection-desc": "Affiche une liste, à puces, des articles les plus récents dans une catégorie, ou à partir d’une combinaison de plusieurs catégories.", 10 | "intersection_toomanycats": "DynamicPageList : trop de catégories !", 11 | "intersection_toofewcats": "DynamicPageList : pas assez de catégories !", 12 | "intersection_noresults": "DynamicPageList : aucun résultat !", 13 | "intersection_noincludecats": "Error : vous devez inclure au moins une catégorie, ou préciser un nom d’espace !", 14 | "dpl_log_1": "ERREUR : Mauvais paramètre '$0' : '$1'! Aide : $0= chaîne vide (Principal)$3. (Les équivalents avec des mots magiques sont aussi autorisés.)", 15 | "dpl_log_2": "ERREUR : Mauvais paramètre '$0' : '$1'! Aide : $0= Nom complet de la page. (Les mots magiques sont autorisés.)", 16 | "dpl_log_3": "ERREUR : Trop de catégories ! Maximum : $0. Aide : accroître DynamicPageListHooks::$maxCategoryCount pour autoriser plus de catégories ou régler DynamicPageListHooks::$allowUnlimitedCategories=true pour aucune limite. (À régler dans LocalSettings.php, après avoir inclus DynamicPageList.php.)", 17 | "dpl_log_4": "ERREUR : Pas assez de catégories ! Minimum : $0. Aide : décroître DynamicPageListHooks::$minCategoryCount pour autoriser moins de catégories. (À régler dans LocalSettings.php de préférence, après avoir inclus DynamicPageList.php.)", 18 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 19 | "dpl_log_6": "ERREUR : Vous devez inclure au moins une catégorie si vous voulez utiliser 'addfirstcategorydate=true' ou 'ordermethod=categoryadd' !", 20 | "dpl_log_7": "ERREUR : Si vous incluez plus d’une catégorie, vous ne pouvez pas utiliser 'addfirstcategorydate=true' ou 'ordermethod=categoryadd' !", 21 | "dpl_log_8": "ERREUR : Vous ne pouvez pas utiliser plus d’un type de date à la fois !", 22 | "dpl_log_9": "ERREUR : Vous ne pouvez utiliser '$0' qu’avec 'ordermethod=[...,]$1' !", 23 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 24 | "dpl_log_11": "ERREUR : Ne peut pas effectuer d’opérations logiques sur les pages sans catégories (avec la paramètre 'category') car la vue $0 n’existe pas dans la base de données ! Aide : demander à un administrateur de la base de données d'effectuer : $1.", 25 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 26 | "dpl_log_13": "AVERTISSEMENT : Le paramètre inconnu '$1' est ignoré. Aide : paramètres disponibles : $2.", 27 | "dpl_log_14": "AVERTISSEMENT : Mauvais paramètre '$0' : '$1'! Utilisation de la valeur par défaut : '$2'. Aide : $0= $3.", 28 | "dpl_log_15": "AVERTISSEMENT : Mauvais paramètre '$0' : '$1'! Utilisattion de la valeur par défaut : '$2' (aucune limite). Aide : $0= chaîne vide (aucune limite) | n, avec n un entier positif.", 29 | "dpl_log_16": "AVERTISSEMENT : Aucun résultat !", 30 | "dpl_log_17": "AVERTISSEMENT : Les paramètres Add* ('adduser', 'addeditdate', etc.)' et 'includepage' n’ont aucun effet avec 'mode=category'. Seuls l’espace de nom et le titre de la page peuvent être vus dans ce mode..", 31 | "dpl_log_18": "AVERTISSEMENT : 'headingmode=$0' n'a aucun effet avec 'ordermethod' sur une simple composante. Utiliser : '$1'. Aide : vous pouvez utiliser not-$1 sur les valeurs de 'headingmode' avec 'ordermethod' sur plusieurs composantes. La première composante est utilisée pour les en-têtes. Exemple : 'ordermethod=category,comp' (comp est une autre composante) pour les en-têtes de catégorie.", 32 | "dpl_log_19": "AVERTISSEMENT : 'debug=$0' n’est pas en première position dans l’élément DPL. Les nouveaux réglages de débogage ne seront appliqués qu’après que les paramètres précédents aient été vérifiés.", 33 | "dpl_log_20": "AVERTISSEMENT : Une boucle d’inclusion infinie est créée par la page '$0'.", 34 | "dpl_log_21": "REQUÊTE : $0", 35 | "dpl_articlecount": "Il y a {{PLURAL:$1|un article|$1 articles}} dans cette section." 36 | } -------------------------------------------------------------------------------- /i18n/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BrokenArrow", 5 | "Darth Kule" 6 | ] 7 | }, 8 | "intersection-desc": "Visualizza un elenco puntato con gli elementi più recenti inseriti in una categoria o nell'unione di più categorie", 9 | "intersection_toomanycats": "Errore: Numero di categorie eccessivo.", 10 | "intersection_toofewcats": "Errore: Numero di categorie insufficiente.", 11 | "intersection_noresults": "Errore: Nessun risultato.", 12 | "intersection_noincludecats": "Errore: È necessario includere almeno una categoria oppure specificare un namespace.", 13 | "dpl_log_1": "ERRORE nel parametro '$0': '$1'. Suggerimento: $0= stringa vuota (Principale)$3.", 14 | "dpl_log_2": "ERRORE nel parametro '$0': '$1'. Suggerimento: $0= nome completo della pagina.", 15 | "dpl_log_3": "ERRORE: Categorie sovrabbondanti (massimo $0). Suggerimento: aumentare il valore di DynamicPageListHooks::$maxCategoryCount per indicare un numero maggiore di categorie, oppure impostare DynamicPageListHooks::$allowUnlimitedCategories=true per non avere alcun limite. (Impostare le variabili nel file LocalSettings.php, dopo l'inclusione di DynamicPageList.php.)", 16 | "dpl_log_4": "ERRORE: Categorie insufficienti (minimo $0). Suggerimento: diminuire il valore di DynamicPageListHooks::$minCategoryCount per indicare un numero minore di categorie. (Impostare la variabile nel file LocalSettings.php, dopo l'inclusione di DynamicPageList.php.)", 17 | "dpl_log_5": "ERROR: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 18 | "dpl_log_6": "ERRORE: L'uso dei parametri 'addfirstcategorydate=true' e 'ordermethod=categoryadd' richiede l'inserimento di una o più categorie.", 19 | "dpl_log_7": "ERRORE: L'inserimento di più categorie impedisce l'uso dei parametri 'addfirstcategorydate=true' e 'ordermethod=categoryadd'.", 20 | "dpl_log_8": "ERRORE: Non è consentito l'uso contemporaneo di più tipi di data.", 21 | "dpl_log_9": "ERRORE: L'uso del parametro '$0' è consentito unicamente con 'ordermethod=[...,]$1'.", 22 | "dpl_log_10": "ERROR: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 23 | "dpl_log_11": "ERRORE: Impossibile effettuare operazioni logiche sulle pagine prive di categoria (ad es. con il parametro 'category') in quanto il database non contiene la vista $0. Suggerimento: chiedere all'amministratore del database di eseguire la seguente query: $1.", 24 | "dpl_log_12": "ERROR: specifying \"openreferences\" is incompatible with some other option you specified. See the manual for details.", 25 | "dpl_log_13": "ATTENZIONE: Il parametro non riconosciuto '$1' è stato ignorato. Suggerimento: i parametri disponibili sono: $2.", 26 | "dpl_log_14": "ATTENZIONE: Errore nel parametro '$0': '$1'. È stato usato il valore predefinito '$2'. Suggerimento: $0= $3.", 27 | "dpl_log_15": "ATTENZIONE: errore nel parametro '$0': '$1'. È stato usato il valore predefinito '$2' (nessun limite). Suggerimento: $0= stringa vuota (nessun limite) | n, con n intero positivo.", 28 | "dpl_log_16": "ATTENZIONE: Nessun risultato.", 29 | "dpl_log_17": "ATTENZIONE: I parametri add* ('adduser', 'addeditdate', ecc.)' non hanno alcun effetto quando è specificato 'mode=category'. In tale modalità vengono visualizzati unicamente il namespace e il titolo della pagina.", 30 | "dpl_log_18": "ATTENZIONE: Il parametro 'headingmode=$0' non ha alcun effetto quando è specificato 'ordermethod' su un solo componente. Verrà utilizzato il valore '$1'. Suggerimento: è posibile utilizzare i valori diversi da $1 per il parametro 'headingmode' nel caso di 'ordermethod' su più componenti. Il primo componente viene usato per generare i titoli di sezione. Ad es. 'ordermethod=category,comp' (dove comp è un altro componente) per avere titoli di sezione basati sulla categoria.", 31 | "dpl_log_19": "ATTENZIONE: Il parametro 'debug=$0' non è il primo elemento della sezione DPL. Le nuove impostazioni di debug non verranno applicate prima di aver completato il parsing e la verifica di tutti i parametri che lo precedono.", 32 | "dpl_log_21": "QUERY: $0", 33 | "dpl_articlecount": "Questa sezione contiene {{PLURAL:$1|una voce|$1 voci}}." 34 | } -------------------------------------------------------------------------------- /classes/lister/UserFormatList.php: -------------------------------------------------------------------------------- 1 | textSeparator = $parameters->getParameter('inlinetext'); 41 | $listSeparators = $parameters->getParameter('listseparators'); 42 | if (isset($listSeparators[0])) { 43 | $this->listStart = $listSeparators[0]; 44 | } 45 | if (isset($listSeparators[1])) { 46 | $this->itemStart = $listSeparators[1]; 47 | } 48 | if (isset($listSeparators[2])) { 49 | $this->itemEnd = $listSeparators[2]; 50 | } 51 | if (isset($listSeparators[3])) { 52 | $this->listEnd = $listSeparators[3]; 53 | } 54 | } 55 | 56 | /** 57 | * Format the list of articles. 58 | * 59 | * @access public 60 | * @param array List of \DPL\Article 61 | * @param integer Start position of the array to process. 62 | * @param integer Total objects from the array to process. 63 | * @return string Formatted list. 64 | */ 65 | public function formatList($articles, $start, $count) { 66 | $filteredCount = 0; 67 | $items = []; 68 | for ($i = $start; $i < $start + $count; $i++) { 69 | $article = $articles[$i]; 70 | if (empty($article) || empty($article->mTitle)) { 71 | continue; 72 | } 73 | 74 | $pageText = null; 75 | if ($this->includePageText) { 76 | $pageText = $this->transcludePage($article, $filteredCount); 77 | } else { 78 | $filteredCount++; 79 | } 80 | 81 | $this->rowCount = $filteredCount; 82 | 83 | $items[] = $this->formatItem($article, $pageText); 84 | } 85 | 86 | $this->rowCount = $filteredCount; 87 | 88 | // if requested we sort the table by the contents of a given column 89 | $sortColumn = $this->getTableSortColumn(); 90 | if ($sortColumn != 0) { 91 | $rowsKey = []; 92 | foreach ($items as $index => $item) { 93 | $item = trim($item); 94 | if (strpos($item, '|-') === 0) { 95 | $item = explode('|-', $item, 2); 96 | if (count($item) == 2) { 97 | $item = $item[1]; 98 | } else { 99 | $rowsKey[$index] = $item; 100 | continue; 101 | } 102 | } 103 | if (strlen($item) > 0) { 104 | $word = explode("\n|", $item); 105 | if (isset($word[0]) && empty($word[0])) { 106 | array_shift($word); 107 | } 108 | if (isset($word[abs($sortColumn) - 1])) { 109 | $test = trim($word[abs($sortColumn) - 1]); 110 | if (strpos($test, '|') > 0) { 111 | $test = trim(explode('|', $test)[1]); 112 | } 113 | $rowsKey[$index] = $test; 114 | } 115 | } 116 | } 117 | if ($sortColumn < 0) { 118 | arsort($rowsKey); 119 | } else { 120 | asort($rowsKey); 121 | } 122 | $newItems = []; 123 | foreach ($rowsKey as $index => $val) { 124 | $newItems[] = $items[$index]; 125 | } 126 | $items = $newItems; 127 | } 128 | 129 | return $this->listStart . $this->implodeItems($items) . $this->listEnd; 130 | } 131 | 132 | /** 133 | * Format a single item. 134 | * 135 | * @access public 136 | * @param object DPL\Article 137 | * @param string [Optional] Page text to include. 138 | * @return string Item HTML 139 | */ 140 | public function formatItem(Article $article, $pageText = null) { 141 | $item = ''; 142 | 143 | if ($pageText !== null) { 144 | //Include parsed/processed wiki markup content after each item before the closing tag. 145 | $item .= $pageText; 146 | } 147 | 148 | $item = $this->getItemStart() . $item . $this->getItemEnd(); 149 | 150 | $item = $this->replaceTagParameters($item, $article); 151 | 152 | return $item; 153 | } 154 | 155 | /** 156 | * Return $this->itemStart with attributes replaced. 157 | * 158 | * @access public 159 | * @return string Item Start 160 | */ 161 | public function getItemStart() { 162 | return $this->replaceTagCount($this->itemStart, $this->getRowCount()); 163 | } 164 | 165 | /** 166 | * Return $this->itemEnd with attributes replaced. 167 | * 168 | * @access public 169 | * @return string Item End 170 | */ 171 | public function getItemEnd() { 172 | return $this->replaceTagCount($this->itemEnd, $this->getRowCount()); 173 | } 174 | 175 | /** 176 | * Join together items after being processed by formatItem(). 177 | * 178 | * @access public 179 | * @param array Items as formatted by formatItem(). 180 | * @return string Imploded items. 181 | */ 182 | protected function implodeItems($items) { 183 | return implode($this->textSeparator, $items); 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /i18n/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Gero Scholz", 5 | "MarkusRost" 6 | ] 7 | }, 8 | "intersection-desc": "Ausgabe einer Liste der aktuellsten Einträge in einer Kategorie, oder der Schnittmenge mehrerer Kategorien", 9 | "intersection_toomanycats": "Fehler: Zu viele Kategorien!", 10 | "intersection_toofewcats": "Fehler: Zu wenige Kategorien!", 11 | "intersection_noresults": "Fehler: Kein Ergebnis!", 12 | "intersection_noincludecats": "Fehler: Es muss mindestens eine Kategorie eingebunden werden oder ein Namensraum angegeben sein!", 13 | "dpl_log_1": "Fehler: bei „$1“ Parameter: „$2“! Hilfe: $1= (leer) (Hauptnamensraum)$3.", 14 | "dpl_log_2": "Fehler: bei „$1“ Parameter: „$2“! Hilfe: $1= vollständiger Seitenname.", 15 | "dpl_log_3": "Fehler: Zu viele Kategorien! Maximum: $1.", 16 | "dpl_log_4": "Fehler: Zu wenige Kategorien! Minimum: $1.", 17 | "dpl_log_5": "Fehler: Keine Auswahlkriterien angegeben! Mindestens einer der folgenden Parameter ist erforderlich: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby oder die „not“-Varianten davon.", 18 | "dpl_log_6": "Fehler: Sie müssen mindestens eine Kategorie angeben, wenn Sie „addfirstcategorydate=true“ oder „ordermethod=categoryadd“ benutzen.", 19 | "dpl_log_7": "Fehler: Wenn Sie mehr als eine Kategorie angeben, können Sie „addfirstcategorydate=true“ oder „ordermethod=categoryadd“ nicht benutzen.", 20 | "dpl_log_8": "Fehler: Es ist nur eine einzige Art der Datumsangabe gleichzeitig möglich.", 21 | "dpl_log_9": "Fehler: Der Parameter „$1“ muss in Verbindung mit „ordermethod=[ $2 ]“ benutzt werden.", 22 | "dpl_log_10": "Fehler: Die Indexangabe bei „dominantsection“ muss zwischen 1 und der Anzahl der Argumente von „includepage“ liegen ($0 in diesem Fall).", 23 | "dpl_log_11": "Fehler: Kann keine logischen Operationen an nicht kategorisierten Seiten ausführen (z. B. mit dem „category“ Parameter) weil die „$0“-Ansicht nicht in der Datenbank vorhanden ist!", 24 | "dpl_log_12": "Fehler: Die Angabe von „openreferences“ ist nicht vereinbar mit anderen angegegeben Optionen. Entferne die anderen Optionen oder „openreferences“. Details dazu stehen im DPL-Manual.", 25 | "dpl_log_13": "Warnung: Der unbekannte Parameter „$1“ wurde ignoriert. Hilfe: Verfügbare Parameter: $2.", 26 | "dpl_log_14": "Warnung: Überspringe die ungültige Option „$2“ für den Parameter „$1“.", 27 | "dpl_log_15": "Warnung: Falscher „$1“-Parameter: „$2“! Standardwert wird verwendet: „$3“ (unbegrenzt). Hilfe: $1= (leer) (unbegrenzt) | n, wobei n eine positive Ganzzahl sein muss.", 28 | "dpl_log_16": "Warnung: Keine Ergebnisse.", 29 | "dpl_log_17": "Warnung: Add* Parameter („adduser“, „addeditdate“, usw.) und „includepage“ haben keinen Effekt in Verbindung mit „mode=category“. Es kann nur der Seitentitel und Namensraum angezeigt werden.", 30 | "dpl_log_18": "Warnung: „headingmode=$1“ hat keinen Effekt, wenn „ordermethod“ sich auf eine einzelne Komponente bezieht. Es wird „$2“ verwendet. Hilfe: Sie können not-$1 „headingmode“ Werte in Verbindung mit „ordermethod“ für mehrfache Komponenten verwenden. Die erste Konponente wird für Gruppen verwendet. Z. B. „ordermethod=category,comp“ (comp ist eine andere Komponente) für Kategorie-Gruppen.", 31 | "dpl_log_19": "Warnung: „debug=$1“ steht nicht an erster Stelle in der DPL-Anweisung. Die Einstellung wird erst wirksam, nachdem die vorausgehenden Parameter geprüft und verarbeitet sind.", 32 | "dpl_log_20": "Warnung: Endlosschleife beim Einbinden von Inhalten der Seite „$0“.", 33 | "dpl_log_21": "Datenbank-Abfrage: $0", 34 | "dpl_log_22": "Warnung: Keine Parameter-Option angegeben für „$1“. („=“ fehlt)", 35 | "dpl_articlecount": "Diese Gruppe enthält {{PLURAL:$1|einen|$1}} Artikel.", 36 | "action-dpl_param_update_rules": "um den Parameter „updaterules“ zu nutzen", 37 | "action-dpl_param_delete_rules": "um den Parameter „deleterules“ zu nutzen", 38 | "dpl_query_error": "Die DPL-Erweiterung (Version $1) produzierte ein SQL-Statement, was zu einem Datenbank-Fehler führte.
Der Grund könnte ein interner Fehler von DPL sein oder ein Fehler deinerseits; besonders beim Nutzen von Parametern wie „categoryregexp“ oder „titleregexp“. Die Verwendung von non-greedy *? matching patterns werden nicht unterstützt.
Fehlermeldung:
$2", 39 | "dpl-tag-tracking-category": "Seiten, die DynamicPageList parser tag nutzen", 40 | "dpl-intersection-tracking-category": "Seiten, die DynamicPageList Intersection parser tag nutzen", 41 | "dpl-parserfunc-tracking-category": "Seiten, die DynamicPageList parser function nutzen", 42 | "dplnum-parserfunc-tracking-category": "Seiten, die DynamicPageList dplnum parser function nutzen", 43 | "dplvar-parserfunc-tracking-category": "Seiten, die DynamicPageList dplvar parser function nutzen", 44 | "dplreplace-parserfunc-tracking-category": "Seiten, die DynamicPageList dplreplace parser function nutzen", 45 | "dplchapter-parserfunc-tracking-category": "Seiten, die DynamicPageList dplchapter parser function nutzen", 46 | "dplmatrix-parserfunc-tracking-category": "Seiten, die DynamicPageList dplmatrix parser function nutzen", 47 | "right-dpl_param_delete_rules": "Massenlöschungen von Seiten, die DPL nutzen", 48 | "right-dpl_param_update_rules": "Massenänderungen von Seiten, die DPL nutzen" 49 | } -------------------------------------------------------------------------------- /i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "m:User:Dangerman " 5 | ] 6 | }, 7 | "intersection-desc": "Outputs a bulleted list of the most recent items residing in a category, or an intersection of several categories", 8 | "intersection_toomanycats": "Error: Too many categories!", 9 | "intersection_toofewcats": "Error: Too few categories!", 10 | "intersection_noresults": "Error: No results!", 11 | "intersection_noincludecats": "Error: You need to include at least one category, or specify a namespace!", 12 | "dpl-desc": "A highly flexible report generator for MediaWikis", 13 | "dpl_log_1": "Error: Wrong '$1' parameter: '$2'! Help: $1= empty string (Main)$3.", 14 | "dpl_log_2": "Error: Wrong '$1' parameter: '$2'! Help: $1= full pagename.", 15 | "dpl_log_3": "Error: Too many categories! Maximum: $1. Help: increase $wgDplSettings['maxCategoryCount'] to specify more categories or set $wgDplSettings['allowUnlimitedCategories'] = true; for no limitation. (Set the variable in the wiki's LocalSettings.php configuration file.)", 16 | "dpl_log_4": "Error: Too few categories! Minimum: $1. Help: decrease $wgDplSettings['minCategoryCount'] to specify fewer categories. (Set the variable in the wiki's LocalSettings.php configuration file.)", 17 | "dpl_log_5": "Error: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants", 18 | "dpl_log_6": "Error: At least one category must be chosen if to use 'addfirstcategorydate=true' or 'ordermethod=categoryadd'.", 19 | "dpl_log_7": "Error: If you include more than one category, you cannot use 'addfirstcategorydate=true' or 'ordermethod=categoryadd'.", 20 | "dpl_log_8": "Error: Only one date type can be added at a time.", 21 | "dpl_log_9": "Error: The paramater '$1' must be used with 'ordermethod=[ $2 ]'", 22 | "dpl_log_10": "Error: the index for the dominant section must be between 1 and the number of arguments of includepage ($0 in this case)", 23 | "dpl_log_11": "Error: Cannot perform logical operations on the Uncategorized pages (f.e. with the 'category' parameter) because the $0 view does not exist on the database! Help: have the database administrator execute this query: $1.", 24 | "dpl_log_12": "Error: specifying \"openreferences\" is incompatible with another option specified. Please remove that other option or \"openreferences\". See the manual for details.", 25 | "dpl_log_13": "Warning: Unknown parameter '$1' was ignored. Help: available parameters: $2.", 26 | "dpl_log_14": "Warning: Skipping bad option '$2' for parameter '$1'.", 27 | "dpl_log_15": "Warning: Wrong '$1' parameter: '$2'! Using default: '$3' (no limit). Help: $1= empty string (no limit) | n, with n a positive integer.", 28 | "dpl_log_16": "Warning: No results.", 29 | "dpl_log_17": "Warning: Add* parameters ('adduser', 'addeditdate', etc.)' and 'includepage' have no effect with 'mode=category'. Only the page namespace/title can be viewed in this mode.", 30 | "dpl_log_18": "Warning: 'headingmode=$1' has no effect with 'ordermethod' on a single component. Using: '$2'. Help: you can use not-$2 'headingmode' values with 'ordermethod' on multiple components. The first component is used for headings. E.g. 'ordermethod=category,comp' (comp is another component) for category headings.", 31 | "dpl_log_19": "Warning: 'debug=$1' is not in first position in the DPL element. The new debug settings are not applied before all previous parameters have been parsed and checked.", 32 | "dpl_log_20": "Warning: An infinite transclusion loop is created by page '$0'.", 33 | "dpl_log_21": "Query: $0", 34 | "dpl_log_22": "Warning: No parameter option supplied for '$1'. (Missing '=')", 35 | "dpl_articlecount": "There {{PLURAL:$1|is one article|are $1 articles}} in this heading.", 36 | "dpl_description": "A flexible report generator for MediaWiki. See [http://semeb.com/dpldemo] for the manual and examples", 37 | "action-dpl_param_update_rules": "to use the parameter 'updaterules'", 38 | "action-dpl_param_delete_rules": "to use the parameter 'deleterules'", 39 | "dpl_query_error": "The DPL extension (version $1) produced a SQL statement which led to a Database error.
The reason may be an internal error of DPL or an error which you made; especially when using parameters like 'categoryregexp' or 'titleregexp'. Usage of non-greedy *? matching patterns are not supported.
Error message was:
$2", 40 | "dpl-tag-tracking-category": "Pages using DynamicPageList parser tag", 41 | "dpl-intersection-tracking-category": "Pages using DynamicPageList Intersection parser tag", 42 | "dpl-parserfunc-tracking-category": "Pages using DynamicPageList parser function", 43 | "dplnum-parserfunc-tracking-category": "Pages using DynamicPageList dplnum parser function", 44 | "dplvar-parserfunc-tracking-category": "Pages using DynamicPageList dplvar parser function", 45 | "dplreplace-parserfunc-tracking-category": "Pages using DynamicPageList dplreplace parser function", 46 | "dplchapter-parserfunc-tracking-category": "Pages using DynamicPageList dplchapter parser function", 47 | "dplmatrix-parserfunc-tracking-category": "Pages using DynamicPageList dplmatrix parser function", 48 | "right-dpl_param_delete_rules": "Mass deletion of pages using DPL", 49 | "right-dpl_param_update_rules": "Mass update of pages using DPL" 50 | } -------------------------------------------------------------------------------- /i18n/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sp5uhe", 5 | "Rail", 6 | "Frisk" 7 | ] 8 | }, 9 | "intersection-desc": "Zwraca listę wypunktowaną najnowszych elementów w kategorii lub grupie kilku kategorii", 10 | "intersection_toomanycats": "Błąd – zbyt wiele kategorii!", 11 | "intersection_toofewcats": "Błąd – zbyt mało kategorii!", 12 | "intersection_noresults": "Błąd – brak wyników!", 13 | "intersection_noincludecats": "Błąd – musisz załączyć co najmniej jedną kategorię lub określić przestrzeń nazw!", 14 | "dpl-desc": "Wysoce elastyczny generator raportów w MediaWiki", 15 | "dpl_log_1": "Błąd – Błędny parametr „$1”: „$2”! Pomoc: $1= empty string (Main)$3.", 16 | "dpl_log_2": "Błąd – Błędny parametr „$1”: „$2”! Pomoc: $1= full pagename.", 17 | "dpl_log_3": "Błąd – zbyt wiele kategorii! Maksymalnie $1. Pomoc: zwiększ wartość $wgDplSettings['maxCategoryCount'] aby określić więcej kategorii lub ustaw $wgDplSettings['allowUnlimitedCategories'] = true; w celu wyłączeniu limitu (ustaw zmienną w pliku konfiguracyjnym LocalSettings.php wiki).", 18 | "dpl_log_4": "Błąd – zbyt mało kategorii! Minimalnie $1. Pomoc: zmniejsz wartość decrease $wgDplSettings['minCategoryCount'] aby określić mniej kategorii (ustaw zmienną w pliku konfiguracyjnym LocalSettings.php wiki).", 19 | "dpl_log_5": "Błąd – nie odnaleziono kryteriów wyboru! Musisz użyć przynajmniej jednego z poniższych parametrów: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby lub ich wariantów „not”.", 20 | "dpl_log_6": "Błąd – musisz wybrać przynajmniej jedną kategorię aby użyć „addfirstcategorydate=true” lub „ordermethod=categoryadd”.", 21 | "dpl_log_7": "Błąd – nie możesz użyć „addfirstcategorydate=true” lub „ordermethod=categoryadd” jeśli podasz więcej niż jedną kategorię.", 22 | "dpl_log_8": "Błąd – można dodać tylko jeden typ daty na raz.", 23 | "dpl_log_9": "Błąd – parametr „$1” musi być używany wraz z „ordermethod=[ $2 ]”.", 24 | "dpl_log_10": "Błąd – indeksem dominującej sekcji musi być liczba pomiędzy 1 a liczbą argumentów parametru „includepage” ($0 w tym przypadku).", 25 | "dpl_log_11": "Błąd – nie można wykonywać logicznych operacji na nieskategoryzowanych stronach (np. z parametrem „category”), ponieważ podgląd $0 nie istnieje w bazie danych! Pomoc: administrator bazy danych musi wykonać to zapytanie: $1.", 26 | "dpl_log_12": "Błąd – podawanie parametru „openreferences” jest niekompatybilne z inną podaną opcją. Usuń proszę tę inną opcję lub „openreferences”. Zobacz poradnik aby dowiedzieć się więcej.", 27 | "dpl_log_13": "Ostrzeżenie – nieznany parametr „$1” został zignorowany. Pomoc: dostępne parametry – $2.", 28 | "dpl_log_14": "Ostrzeżenie – pominięto złą opcję „$2” dla parametru „$1”.", 29 | "dpl_log_15": "Ostrzeżenie – zły parametr „$1”: „$2”! Użyto domyślnego – „$3” (brak limitu). Pomoc: $1= empty string (no limit) | n z n jako liczbą dodatnią.", 30 | "dpl_log_16": "Ostrzeżenie – brak wyników.", 31 | "dpl_log_17": "Ostrzeżenie – podane parametry („adduser”, „addeditdate”, itd.) oraz „includepage” nie przyniosą zamierzonego efektu wraz z „mode=category”. W tym trybie widać tylko tytuł oraz przestrzeń nazw strony.", 32 | "dpl_log_18": "Ostrzeżenie – „headingmode=$1” nie przyniesie zamierzonego efektu z „ordermethod” na pojedynczym komponencie. Użyto „$2”. Pomoc: możesz użyć wartości innych niż $2 dla „headingmode” na wielu komponentach. Pierwszy komponent jest używany w nagłówkach. Np. „ordermethod=category,comp” (gdzie comp jest kolejnym komponentem) dla nagłówków kategorii.", 33 | "dpl_log_19": "Ostrzeżenie – „debug=$1” nie jest w pierwszej pozycji w elemencie DPL. Nowe ustawienia debugowania nie są aplikowane przed sprawdzeniem i sparsowaniem wszystkich poprzednich parametrów.", 34 | "dpl_log_20": "Ostrzeżenie – strona „$0” tworzy nieskończoną pętlę transkluzji.", 35 | "dpl_log_21": "Zapytanie – $0", 36 | "dpl_log_22": "Ostrzeżenie – nie podano opcji parametru dla „$1” (brakujący znak „=”).", 37 | "dpl_articlecount": "W tym nagłówku {{PLURAL:$1|znajduje się jeden artykuł|znajdują się $1 artykuły|znajduje się $1 artykułów}}.", 38 | "dpl_description": "Wysoce elastyczny generator raportów w MediaWiki. Zobacz http://semeb.com/dpldemo po poradnik i przykłady", 39 | "action-dpl_param_update_rules": "używania parametru „updaterules”", 40 | "action-dpl_param_delete_rules": "używania parametru „deleterules”", 41 | "dpl_query_error": "Rozszerzenie DPL (wersja $1) wyprodukowało wyrażenie SQL które doprowadziło do błędu bazy danych.
Powodem może być wewnętrzny błąd DPL lub problem spowodowany przez Ciebie; szczególnie podczas używania takich parametrów jak „categoryregexp” lub „titleregexp”. Używanie wzorców dopasowywania takich jak *? nie jest wspierane.
Komunikat błędu:
$2", 42 | "dpl-tag-tracking-category": "Strony używające znacznika parsera DynamicPageList", 43 | "dpl-intersection-tracking-category": "Strony używające znacznika parsera DynamicPageList Intersection", 44 | "dpl-parserfunc-tracking-category": "Strony używające funkcji parsera DynamicPageList", 45 | "dplnum-parserfunc-tracking-category": "Strony używające funkcji parsera DynamicPageList dplnum", 46 | "dplvar-parserfunc-tracking-category": "Strony używające funkcji parsera DynamicPageList dplvar", 47 | "dplreplace-parserfunc-tracking-category": "Strony używające funkcji parsera DynamicPageList dplreplace", 48 | "dplchapter-parserfunc-tracking-category": "Strony używające funkcji parsera DynamicPageList dplchapter", 49 | "dplmatrix-parserfunc-tracking-category": "Strony używające funkcji parsera DynamicPageList dplmatrix", 50 | "right-dpl_param_delete_rules": "Masowe usuwanie stron używających DPL", 51 | "right-dpl_param_update_rules": "Masowe aktualizowanie stron używających DPL" 52 | } -------------------------------------------------------------------------------- /classes/heading/Heading.php: -------------------------------------------------------------------------------- 1 | 27 | * 28 | * @var string 29 | */ 30 | public $listStart = ''; 31 | 32 | /** 33 | * List(Section) End 34 | * 35 | * @var string 36 | */ 37 | public $listEnd = ''; 38 | 39 | /** 40 | * Item Start 41 | * Use %s for attribute placement. Example: 42 | * 43 | * @var string 44 | */ 45 | public $itemStart = ''; 46 | 47 | /** 48 | * Item End 49 | * 50 | * @var string 51 | */ 52 | public $itemEnd = ''; 53 | 54 | /** 55 | * Extra list HTML attributes. 56 | * 57 | * @var array 58 | */ 59 | public $listAttributes = ''; 60 | 61 | /** 62 | * Extra item HTML attributes. 63 | * 64 | * @var array 65 | */ 66 | public $itemAttributes = ''; 67 | 68 | /** 69 | * If the article count per heading should be shown. 70 | * 71 | * @var boolean 72 | */ 73 | protected $showHeadingCount = false; 74 | 75 | /** 76 | * \DPL\Parameters 77 | * 78 | * @var object 79 | */ 80 | protected $parameters = null; 81 | 82 | /** 83 | * Main Constructor 84 | * 85 | * @access public 86 | * @param object \DPL\Parameters 87 | * @return void 88 | */ 89 | public function __construct(Parameters $parameters) { 90 | $this->setListAttributes($parameters->getParameter('hlistattr')); 91 | $this->setItemAttributes($parameters->getParameter('hitemattr')); 92 | $this->setShowHeadingCount($parameters->getParameter('headingcount')); 93 | $this->parameters = $parameters; 94 | } 95 | 96 | /** 97 | * Get a new List subclass based on user selection. 98 | * 99 | * @access public 100 | * @param string Heading style. 101 | * @param object \DPL\Parameters 102 | * @param object MediaWiki \Parser 103 | * @return mixed Heading subclass or null for a bad style. 104 | */ 105 | public static function newFromStyle($style, \DPL\Parameters $parameters) { 106 | $style = strtolower($style); 107 | switch ($style) { 108 | case 'definition': 109 | $class = 'DefinitionHeading'; 110 | break; 111 | case 'h1': 112 | case 'h2': 113 | case 'h3': 114 | case 'h4': 115 | case 'h5': 116 | case 'h6': 117 | case 'header': 118 | $class = 'TieredHeading'; 119 | break; 120 | case 'ordered': 121 | $class = 'OrderedHeading'; 122 | break; 123 | case 'unordered': 124 | $class = 'UnorderedHeading'; 125 | break; 126 | default: 127 | return null; 128 | break; 129 | } 130 | $class = '\DPL\Heading\\' . $class; 131 | 132 | return new $class($parameters); 133 | } 134 | 135 | /** 136 | * Get the \DPL\Parameters object this object was constructed with. 137 | * 138 | * @access public 139 | * @return object \DPL\Parameters 140 | */ 141 | public function getParameters() { 142 | return $this->parameters; 143 | } 144 | 145 | /** 146 | * Set extra list attributes. 147 | * 148 | * @access public 149 | * @param string Tag soup attributes, example: this="that" thing="no" 150 | * @return void 151 | */ 152 | public function setListAttributes($attributes) { 153 | $this->listAttributes = \Sanitizer::fixTagAttributes($attributes, 'ul'); 154 | } 155 | 156 | /** 157 | * Set extra item attributes. 158 | * 159 | * @access public 160 | * @param string Tag soup attributes, example: this="that" thing="no" 161 | * @return void 162 | */ 163 | public function setItemAttributes($attributes) { 164 | $this->itemAttributes = \Sanitizer::fixTagAttributes($attributes, 'li'); 165 | } 166 | 167 | /** 168 | * Set if the article count per heading should be shown. 169 | * 170 | * @access public 171 | * @param boolean [Optional] Show Heading Count 172 | * @return void 173 | */ 174 | public function setShowHeadingCount($show = false) { 175 | $this->showHeadingCount = boolval($show); 176 | } 177 | 178 | /** 179 | * Return the list style. 180 | * 181 | * @access public 182 | * @return integer List style constant. 183 | */ 184 | public function getStyle() { 185 | return $this->style; 186 | } 187 | 188 | /** 189 | * Format a list of articles into all lists with headings as needed. 190 | * 191 | * @access public 192 | * @param array List of \DPL\Article 193 | * @param object List of \DPL\Lister\Lister 194 | * @return string Formatted list. 195 | */ 196 | public function format($articles, Lister $lister) { 197 | $columns = $this->getParameters()->getParameter('columns'); 198 | $rows = $this->getParameters()->getParameter('rows'); 199 | $rowSize = $this->getParameters()->getParameter('rowsize'); 200 | $rowColFormat = $this->getParameters()->getParameter('rowcolformat'); 201 | 202 | $start = 0; 203 | $count = 0; 204 | 205 | $headings = Article::getHeadings(); 206 | $output = ''; 207 | if (!empty($headings)) { 208 | if ($columns != 1 || $rows != 1) { 209 | $hspace = 2; // the extra space for headings 210 | // repeat outer tags for each of the specified columns / rows in the output 211 | // we assume that a heading roughly takes the space of two articles 212 | $count = count($articles) + $hspace * count($headings); 213 | if ($columns != 1) { 214 | $iGroup = $columns; 215 | } else { 216 | $iGroup = $rows; 217 | } 218 | $nsize = floor($count / $iGroup); 219 | $rest = $count - (floor($nsize) * floor($iGroup)); 220 | if ($rest > 0) { 221 | $nsize += 1; 222 | } 223 | $output .= "{|" . $rowColFormat . "\n|\n"; 224 | if ($nsize < $hspace + 1) { 225 | $nsize = $hspace + 1; // correction for result sets with one entry 226 | } 227 | $output .= $this->getListStart(); 228 | $nstart = 0; 229 | $greml = $nsize; // remaining lines in current group 230 | $g = 0; 231 | $offset = 0; 232 | foreach ($headings as $headingCount) { 233 | $headingStart = $nstart - $offset; 234 | $headingLink = $articles[$headingStart]->mParentHLink; 235 | $output .= $this->getItemStart() . $headingLink . $this->getItemEnd(); 236 | if ($this->showHeadingCount) { 237 | $output .= $this->articleCountMessage($headingCount); 238 | } 239 | $offset += $hspace; 240 | $nstart += $hspace; 241 | $portion = $headingCount; 242 | $greml -= $hspace; 243 | $listOutput = ''; 244 | do { 245 | $greml -= $portion; 246 | // $output .= "nsize=$nsize, portion=$portion, greml=$greml"; 247 | if ($greml > 0) { 248 | $output .= $lister->formatList($articles, $nstart - $offset, $portion); 249 | $nstart += $portion; 250 | $portion = 0; 251 | break; 252 | } else { 253 | $output .= $lister->formatList($articles, $nstart - $offset, $portion + $greml); 254 | $nstart += ($portion + $greml); 255 | $portion = (-$greml); 256 | if ($columns != 1) { 257 | $output .= "\n|valign=top|\n"; 258 | } else { 259 | $output .= "\n|-\n|\n"; 260 | } 261 | ++$g; 262 | // if ($rest != 0 && $g==$rest) $nsize -= 1; 263 | if ($nstart + $nsize > $count) { 264 | $nsize = $count - $nstart; 265 | } 266 | $greml = $nsize; 267 | if ($greml <= 0) { 268 | break; 269 | } 270 | } 271 | } while ($portion > 0); 272 | $output .= $this->getItemEnd(); 273 | } 274 | $output .= $this->listEnd; 275 | $output .= "\n|}\n"; 276 | } else { 277 | $output .= $this->getListStart(); 278 | $headingStart = 0; 279 | foreach ($headings as $headingCount) { 280 | $headingLink = $articles[$headingStart]->mParentHLink; 281 | $output .= $this->formatItem($headingStart, $headingCount, $headingLink, $articles, $lister); 282 | $headingStart += $headingCount; 283 | } 284 | $output .= $this->listEnd; 285 | } 286 | } elseif ($columns != 1 || $rows != 1) { 287 | // repeat outer tags for each of the specified columns / rows in the output 288 | $nstart = 0; 289 | $count = count($articles); 290 | if ($columns != 1) { 291 | $iGroup = $columns; 292 | } else { 293 | $iGroup = $rows; 294 | } 295 | $nsize = floor($count / $iGroup); 296 | $rest = $count - (floor($nsize) * floor($iGroup)); 297 | if ($rest > 0) { 298 | $nsize += 1; 299 | } 300 | $output .= "{|" . $rowColFormat . "\n|\n"; 301 | for ($g = 0; $g < $iGroup; $g++) { 302 | $output .= $lister->formatList($articles, $nstart, $nsize); 303 | if ($columns != 1) { 304 | $output .= "\n|valign=top|\n"; 305 | } else { 306 | $output .= "\n|-\n|\n"; 307 | } 308 | $nstart = $nstart + $nsize; 309 | // if ($rest != 0 && $g+1==$rest) $nsize -= 1; 310 | if ($nstart + $nsize > $count) { 311 | $nsize = $count - $nstart; 312 | } 313 | } 314 | $output .= "\n|}\n"; 315 | } elseif ($rowSize > 0) { 316 | // repeat row header after n lines of output 317 | $nstart = 0; 318 | $nsize = $rowSize; 319 | $count = count($articles); 320 | $output .= '{|' . $rowColFormat . "\n|\n"; 321 | do { 322 | if ($nstart + $nsize > $count) { 323 | $nsize = $count - $nstart; 324 | } 325 | $output .= $lister->formatList($articles, $nstart, $nsize); 326 | $output .= "\n|-\n|\n"; 327 | $nstart = $nstart + $nsize; 328 | if ($nstart >= $count) { 329 | break; 330 | } 331 | } while (true); 332 | $output .= "\n|}\n"; 333 | } else { 334 | //Even though the headingmode is not none there were no headings, but still results. Output them anyway. 335 | $output .= $lister->formatList($articles, 0, count($articles)); 336 | } 337 | 338 | return $output; 339 | } 340 | 341 | /** 342 | * Format a heading group. 343 | * 344 | * @access public 345 | * @param integer Article start index for this heading. 346 | * @param integer Article count for this heading. 347 | * @param string Heading link/text display. 348 | * @param array List of \DPL\Article. 349 | * @param object List of \DPL\Lister\Lister 350 | * @return string Heading HTML 351 | */ 352 | public function formatItem($headingStart, $headingCount, $headingLink, $articles, Lister $lister) { 353 | $item = ''; 354 | 355 | $item .= $this->getItemStart() . $headingLink; 356 | if ($this->showHeadingCount) { 357 | $item .= $this->articleCountMessage($headingCount); 358 | } 359 | $item .= $lister->formatList($articles, $headingStart, $headingCount); 360 | $item .= $this->getItemEnd(); 361 | 362 | return $item; 363 | } 364 | 365 | /** 366 | * Return $this->listStart with attributes replaced. 367 | * 368 | * @access public 369 | * @return string List Start 370 | */ 371 | public function getListStart() { 372 | return sprintf($this->listStart, $this->listAttributes); 373 | } 374 | 375 | /** 376 | * Return $this->itemStart with attributes replaced. 377 | * 378 | * @access public 379 | * @return string Item Start 380 | */ 381 | public function getItemStart() { 382 | return sprintf($this->itemStart, $this->itemAttributes); 383 | } 384 | 385 | /** 386 | * Return $this->itemEnd with attributes replaced. 387 | * 388 | * @access public 389 | * @return string Item End 390 | */ 391 | public function getItemEnd() { 392 | return $this->itemEnd; 393 | } 394 | 395 | /** 396 | * Get the article count message appropriate for this list. 397 | * 398 | * @access public 399 | * @param integer Count 400 | * @return string Message 401 | */ 402 | protected function articleCountMessage($count) { 403 | $orderMethods = $this->getParameters()->getParameter('ordermethods'); 404 | if (isset($orderMethods[0]) && $orderMethods[0] === 'category') { 405 | $message = 'categoryarticlecount'; 406 | } else { 407 | $message = 'dpl_articlecount'; 408 | } 409 | return '

' . wfMessage($message, $count)->escaped() . '

'; 410 | } 411 | } 412 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DynamicPageList3 2 | 3 | The **DynamicPageList3** extension is a reporting tool for MediaWiki, listing category members and intersections with various formats and details. For full documentation, see the [manual](https://help.gamepedia.com/Extension:DPL3/Manual). 4 | 5 | When invoked with a basic set of selection parameters DPL displays a list of pages in one or more categories. Selections may also be based on factors such as author, namespace, date, name pattern, usage of templates, or references to other articles. Output takes a variety of forms, some of which incorporate elements of selected articles. 6 | 7 | This extension is invoked with the parser function {{#dpl: .... }} or parser tag . A [Wikimedia](https://www.mediawiki.org/wiki/Extension:DynamicPageList_(Wikimedia))-compatible implementation of certain features can be invoked with <DynamicPageList>. 8 | 9 | Complex look ups can result in computationally expensive database queries. However, by default all output is cached for a period of one hour to reduce the need to rerun the query every page load. The [DPL:Parameters: Other Parameters](https://help.gamepedia.com/Extension:DPL3/Parameters:_Other_parameters#cacheperiod) manual page contains information on parameters that can be used to disable the cache and allow instant updates. 10 | 11 | * Manual and Complete Documentation: [Documentation at Gamepedia Help Wiki](https://help.gamepedia.com/Extension:DPL3/Manual) 12 | * Source Code: [Source code at Gitlab](https://gitlab.com/hydrawiki/extensions/DynamicPageList) 13 | * Bugs and Feature Requests: [Issues at Gitlab](https://gitlab.com/hydrawiki/extensions/DynamicPageList/issues) 14 | * Licensing: DynamicPageList3 is released under [GNU General Public License, version 2](https://opensource.org/licenses/GPL-2.0). 15 | 16 | 17 | ## Installation 18 | Please see the [releases page](https://gitlab.com/hydrawiki/extensions/DynamicPageList/releases) for the latest releases. 19 | 20 | ## Configuration 21 | These are DPL's configuration settings and along with their default values. To change them make sure they are defined before including the extension on the wiki. More configuration information is available on the **[MediaWiki extension page](https://www.mediawiki.org/wiki/Extension:DynamicPageList3#Configuration)**. 22 | 23 | **Note:** In release 3.0.4 the configuration variable name was changed from $dplSettings to $wgDplSettings. This was to faciliate compatibility with Mediawiki 1.25's extension registration change. 24 | 25 | | Setting | Default | Description | 26 | |:--------------------------------------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 27 | | $wgDplSettings['allowedNamespaces'] | null | By default all existing namespaces are used when DPL initializes. Customize this setting with an array of namespace constants to restrict DPL to work only in those namespaces. | 28 | | $wgDplSettings['allowUnlimitedCategories'] | false | Set this to true to ignore 'maxCategoryCount' and allow unlimited categories. Please note that large amounts of categories in a query can slow down or crash servers. | 29 | | $wgDplSettings['allowUnlimitedResults'] | false | Set this to true to ignore 'maxResultCount' and allow unlimited results. Please note that large result sets may result in slow or failed page loads. | 30 | | $wgDplSettings['behavingLikeIntersection'] | false | Set DPL to always behave like Extension:Intersection. | 31 | | $wgDplSettings['categoryStyleListCutoff'] | 6 | Maximum number of items in a category list before being cut off. | 32 | | $wgDplSettings['fixedCategories'] | [] | This does something with preventing DPL from "looking" at these categories. | 33 | | $wgDplSettings['functionalRichness'] | 3 | Set the level of parameters available to end users. | 34 | | $wgDplSettings['maxCategoryCount'] | 4 | Maximum number of categories to allow in queries. | 35 | | $wgDplSettings['minCategoryCount'] | 0 | Minimum number of categories to allow in queries. | 36 | | $wgDplSettings['maxResultCount'] | 500 | Maximum number of results to return from a query. | 37 | | $wgDplSettings['recursiveTagParse'] | false | Do recursive tag parsing on parser tags converting tags and functions such as magic words like {{PAGENAME}}. This is similar to the {{#dpl}} parser function call, but may not work exactly the same in all cases. | 38 | | $wgDplSettings['runFromProtectedPagesOnly'] | false | Set this to true to allow DPL to run from protected pages only. This is recommend if wiki administrators are having issues with malicious users creating computationally intensive queries. | 39 | | $wgDplSettings['handleSectionTag'] | false | Set this to true to have DPL handle
tags outside of DPL parser tags. | 40 | 41 | The global variable {{manual|$wgNonincludableNamespaces}} is automatically respected by DPL. It will prevent the contents of the listed namespaces from appearing in DPL's output. 42 | 43 | **Note: $wgDplSettings['maxResultCount'] is a LIMIT *on the SQL query itself*. Some DPL query parameters like includematch are applied *after* the SQL query, however, so results here may easily be misleading.** 44 | 45 | ### Functional Richness 46 | 47 | DynamicPageList has many features which are unlocked based on the maximum functional richness level. There are some that can cause high CPU or database load and should be used sparingly. 48 | 49 | * $wgDplSettings['functionalRichness'] = 0 is equivalent to Wikimedia's [[Extension:DynamicPageList (Wikimedia)|Wikimedia]] 50 | * $wgDplSettings['functionalRichness'] = 1 adds additional formatting parameters 51 | * $wgDplSettings['functionalRichness'] = 2 adds performance equivalent features for templates and pagelinks 52 | * $wgDplSettings['functionalRichness'] = 3 allows more-expensive page inclusion features and regular expression queries. 53 | * $wgDplSettings['functionalRichness'] = 4 permits exotic and potentially dangerous batch update and delete operations; not recommended for public websites. Includes debugging parameters for testing and development. 54 | 55 | 56 | ## Usage 57 | ### Extended DPL Functionality 58 | Extended DPL is invoked by using the parser function {{#dpl: .... }}, or the parser extension tag .... . 59 | 60 | *See [Manual - **General Usage and Invocation Syntax**](https://help.gamepedia.com/Extension:DPL3/General_usage_and_invocation_syntax) and [DPL:Parameters: **Criteria for Page Selection**](https://help.gamepedia.com/Extension:DPL3/Parameters:_Criteria_for_page_selection)* 61 | 62 | ### Backwards Compatibility 63 | Functionality compatible with Wikimedia's DPL extension can be invoked with <DynamicPageList> .... </DynamicPageList>. Further information can be found on the [Compatibility manual page](https://help.gamepedia.com/Extension:DPL3/Compatibility). 64 | 65 | ## Usage Philosophy and Overview 66 | With the assumption there are some articles writtne about *countries* those articles will typically have three things in common: 67 | * They will belong to a common category 68 | * They will have a similar chapter structure, i.e. they will contain paragraphs named 'Religion' or 'History' 69 | * They will use a template which is used to present highly structured short data items ('Capital', 'Inhabitants', ..) in a nice way (e.g. as a wikitable) 70 | 71 | ### Generate a Report Based on **countries** 72 | If there was a need to assemble a report of what countries practice a certain religion this could be easily done with the **category** and **linksto** parameters. 73 |

 74 | {{#dpl:
 75 | category=countries
 76 | |linksto=Pastafarianism
 77 | }}
 78 | 
79 | 80 | With DPL one could: 81 | * Generate a list of all those articles (or a random sample) 82 | * Show metadata of the articles (popularity, date of last update, ..) 83 | * Show one or more chapters of the articles ('transclude' content) 84 | * Show parameter values which are passed to the common template 85 | * Order articles appropriately 86 | * Present the result in a sortable table (e.g.) 87 | * Generate multiple column output 88 | 89 | ### Which steps are necessary? 90 | **Find the articles you want to list:** 91 | * Select by a logical combination (AND,OR,NOT) of categories 92 | * Specify a range for the number of categories the article must be assigned to 93 | * Select by a logical combination (AND,OR,NOT) of namespaces 94 | * Define a pattern which must match the article's name 95 | * Name a page to which the article must or must not link 96 | * Name a template which the article must or must not use 97 | * Name a text pattern which must occur within external links from a page 98 | * Exclude or include redirections 99 | * Restrict your search to stable pages or quality pages ("flagged revisions") 100 | * Use other criteria for selection like author, date of last change etc. 101 | * Define regular expressions to match the contents of pages you want to include 102 | 103 | **Order the result list of articles according to** 104 | * Article Name 105 | * Article Size 106 | * Date of last change 107 | * Last User to Make an Edit 108 | 109 | **Define attributes you want to see** 110 | * Article Name 111 | * Article Namespace 112 | * Article Size 113 | * Date of Last Change 114 | * Date of Last Access 115 | * Last User to Make an Edit 116 | 117 | **Define contents you want to show** 118 | * Whole Article 119 | * Contents of Certain Sections (Identified by headings) 120 | * Text Portions (Defined by special marker tags in the article) 121 | * Values of template calls 122 | * Use a custom template to show output 123 | 124 | **Define the output format** 125 | * Specify header and footer for the default output 126 | * Use ordered list, unordered list 127 | * Use tables 128 | * Format table fields individually by applying templates to their content 129 | * Use category style listing 130 | * Truncate title or contents to a certain maximum length 131 | * Add a link to the article or to one or more of its sections 132 | 133 | ## Considerations 134 | ### Performance 135 | DPL's code execution and database access is typically fast for typical category and article look ups. However, using loose LIKE and REGEXP match parameters and/or requesting large data sets can result in long database access times. Parser time should also be kept in consideration. For example, having the query of image results go into a template that displays them will result in a parser media transform for each one. This can quickly eat up 2MBs of RAM per media transform. 136 | 137 | ## See Also 138 | ### Further Reading 139 | DPL can do much more than we can explain here. A complete **[manual](https://help.gamepedia.com/Extension:DPL3/Manual)** is available with full parameter documentation. -------------------------------------------------------------------------------- /README.mediawiki: -------------------------------------------------------------------------------- 1 | {{TNT|Extension 2 | |name = DynamicPageList3 3 | |status = stable 4 | |type1 = tag 5 | |type2 = parser function 6 | |author = '''[[User:Alexia_E._Smith|Alexia E. Smith]]''', [[User:Algorithmix|Algorithmix]], [[meta:User:Dangerman|Dangerville]], [[w:en:User:IlyaHaykinson|IlyaHaykinson]], [[User:Theaitetos|Theaitetos]], [[w:de:Benutzer:Unendlich|Unendlich]] 7 | |image = 8 | |version = 3.3.3 9 | |update = 2010-04-03 10 | |mediawiki = 1.27+ 11 | |php = 5.6+ 12 | |download = {{TNT|GitlabDownload|HydraWiki/Extensions|DynamicPageList}} 13 | |hook1 = ParserFirstCallInit 14 | |description = '''Create lists''' of other articles based on their ''category, namespace, title, references'' or ''template usage'' and '''include contents''' or arguments of template calls of those articles into your page. 15 | |license = GPL-2.0+ 16 | |example = [http://help.gamepedia.com/DPL:Manual DPL:Manual - Gamepedia Help Wiki] 17 | }} 18 | 19 | :{{note}} ''This is a continuation and fork of [[Extension:DynamicPageList (third-party)|DynamicPageList (third-party)]]. It is a fully reworked object oriented code base, significant code and database speed improvements, and is fully backwards compatible with previous versions.'' 20 | 21 | The '''DynamicPageList3''' extension is a reporting tool for MediaWiki, listing category members and intersections with various formats and details. For full documentation, see the [http://help.gamepedia.com/DPL:Manual manual]. 22 | 23 | When invoked with a basic set of selection parameters DPL displays a list of pages in one or more categories. Selections may also be based on factors such as author, namespace, date, name pattern, usage of templates, or references to other articles. Output takes a variety of forms, some of which incorporate elements of selected articles. 24 | 25 | This extension is invoked with the parser function {{#dpl: .... }} or parser tag . A [[Extension:DynamicPageList (Wikimedia)|Wikimedia]]-compatible implementation of certain features can be invoked with <DynamicPageList>. 26 | 27 | Complex look ups can result in computationally expensive database queries. However, by default all output is cached for a period of one hour to reduce the need to rerun the query every page load. The [http://help.gamepedia.com/DPL:Parameters:_Other_Parameters#cacheperiod DPL:Parameters: Other Parameters] manual page contains information on parameters that can be used to disable the cache and allow instant updates. 28 | 29 | ;Manual and Complete Documentation: [http://help.gamepedia.com/DPL:Manual Documentation at Gamepedia Help Wiki] 30 | ;Source Code: [https://gitlab.com/hydrawiki/extensions/DynamicPageList Source code at Gitlab] 31 | ;Bugs and Feature Requests: [https://gitlab.com/hydrawiki/extensions/DynamicPageList/issues Issues at Gitlab] 32 | ;Licensing: DynamicPageList3 is released under [https://opensource.org/licenses/GPL-2.0 GNU General Public License, version 2]. 33 | 34 | 35 | == Installation == 36 | {{TNT|ExtensionInstall 37 | |DynamicPageList 38 | |download-link=[https://gitlab.com/hydrawiki/extensions/DynamicPageList/-/archive/3.3.3/DynamicPageList-3.3.3.tar.bz2 Download, extract] 39 | |custom-steps=* [[#Configuration|If necessary configure as required.]] 40 | |registration=required 41 | }} 42 | 43 | == Configuration == 44 | These are DPL's configuration settings and along with their default values. To change them make sure they are defined before including the extension on the wiki. More configuration information is available on the '''[http://help.gamepedia.com/DPL:Source_and_Installation#Configuration Source and Installation]''' manual page. 45 | 46 | '''Note:''' In release 3.0.4 the configuration variable name was changed from $dplSettings to $wgDplSettings. This was to faciliate compatibility with Mediawiki 1.25's extension registration change. 47 | 48 | {|class = "wikitable" 49 | !Setting 50 | !Default 51 | !Description 52 | |- 53 | |$wgDplSettings['allowedNamespaces'] || null || By default all existing namespaces are used when DPL initializes. Customize this setting with an array of namespace constants to restrict DPL to work only in those namespaces. 54 | |- 55 | |$wgDplSettings['allowUnlimitedCategories'] || false || Set this to true to ignore 'maxCategoryCount' and allow unlimited categories. Please note that large amounts of categories in a query can slow down or crash servers. 56 | |- 57 | |$wgDplSettings['allowUnlimitedResults'] || false || Set this to true to ignore 'maxResultCount' and allow unlimited results. Please note that large result sets may result in slow or failed page loads. 58 | |- 59 | |$wgDplSettings['behavingLikeIntersection'] || false || Set DPL to always behave like Extension:Intersection. 60 | |- 61 | |$wgDplSettings['categoryStyleListCutoff'] || 6 || Maximum number of items in a category list before being cut off. 62 | |- 63 | |$wgDplSettings['fixedCategories'] || empty array || This does something with preventing DPL from "looking" at these categories. 64 | |- 65 | |$wgDplSettings['functionalRichness'] || 3, 0 if $dplMigrationTesting is set to true || Set the level of parameters available to end users. 66 | |- 67 | |$wgDplSettings['maxCategoryCount'] || 4 || Maximum number of categories to allow in queries. 68 | |- 69 | |$wgDplSettings['minCategoryCount'] || 0 || Minimum number of categories to allow in queries. 70 | |- 71 | |$wgDplSettings['maxResultCount'] || 500 || Maximum number of results to return from a query. 72 | |- 73 | |$wgDplSettings['recursiveTagParse'] || false || Do recursive tag parsing on parser tags converting tags and functions such as magic words like {{PAGENAME}}. This is similar to the {{#dpl}} parser function call, but may not work exactly the same in all cases. 74 | |- 75 | |$wgDplSettings['runFromProtectedPagesOnly'] || false || Set this to true to allow DPL to run from protected pages only. This is recommend if wiki administrators are having issues with malicious users creating computationally intensive queries. 76 | |- 77 | |$wgDplSettings['handleSectionTag'] || false || Set this to true to have DPL handle
tags outside of DPL parser tags. 78 | |} 79 | 80 | The global variable {{manual|$wgNonincludableNamespaces}} is automatically respected by DPL. It will prevent the contents of the listed namespaces from appearing in DPL's output. 81 | 82 | '''Note: $wgDplSettings['maxResultCount'] is a LIMIT ''on the SQL query itself''. Some DPL query parameters like includematch are applied ''after'' the SQL query, however, so results here may easily be misleading.''' 83 | 84 | === Functional Richness === 85 | 86 | DynamicPageList has many features which are unlocked based on the maximum functional richness level. There are some that can cause high CPU or database load and should be used sparingly. 87 | 88 | * $wgDplSettings['functionalRichness'] = 0 is equivalent to Wikimedia's [[Extension:DynamicPageList (Wikimedia)|Wikimedia]] 89 | * $wgDplSettings['functionalRichness'] = 1 adds additional formatting parameters 90 | * $wgDplSettings['functionalRichness'] = 2 adds performance equivalent features for templates and pagelinks 91 | * $wgDplSettings['functionalRichness'] = 3 allows more-expensive page inclusion features and regular expression queries. 92 | * $wgDplSettings['functionalRichness'] = 4 permits exotic and potentially dangerous batch update and delete operations; not recommended for public websites. Includes debugging parameters for testing and development. 93 | 94 | 95 | == Usage == 96 | ===Extended DPL Functionality=== 97 | Extended DPL is invoked by using the parser function {{#dpl: .... }}, or the parser extension tag .... . 98 | 99 | :''See: [http://help.gamepedia.com/DPL:General_Usage_and_Invocation_Syntax Manual - '''General Usage and Invocation Syntax'''] and [http://help.gamepedia.com/DPL:Parameters:_Criteria_for_Page_Selection DPL:Parameters: '''Criteria for Page Selection''']'' 100 | 101 | === Backwards Compatibility === 102 | Functionality compatible with Wikimedia's DPL extension can be invoked with <DynamicPageList> .... </DynamicPageList>. Further information can be found on the [http://help.gamepedia.com/DPL:Compatibility Compatibility manual page]. 103 | 104 | ==Usage Philosophy and Overview== 105 | With the assumption there are some articles written about ''countries'' those articles will typically have three things in common: 106 | * They will belong to a common category 107 | * They will have a similar chapter structure, i.e. they will contain paragraphs named 'Religion' or 'History' 108 | * They will use a template which is used to present highly structured short data items ('Capital', 'Inhabitants', ..) in a nice way (e.g. as a wikitable) 109 | 110 | ===Generate a Report Based on '''countries'''=== 111 | If there was a need to assemble a report of what countries practice a certain religion this could be easily done with the '''category''' and '''linksto''' parameters. 112 |

113 | {{#dpl:
114 | category=countries
115 | |linksto=Pastafarianism
116 | }}
117 | 
118 | 119 | With DPL one could: 120 | * Generate a list of all those articles (or a random sample) 121 | * Show metadata of the articles (popularity, date of last update, ..) 122 | * Show one or more chapters of the articles ('transclude' content) 123 | * Show parameter values which are passed to the common template 124 | * Order articles appropriately 125 | * Present the result in a sortable table (e.g.) 126 | * Generate multiple column output 127 | 128 | ===Which steps are necessary?=== 129 | '''Find the articles you want to list:''' 130 | * Select by a logical combination (AND,OR,NOT) of categories 131 | * Specify a range for the number of categories the article must be assigned to 132 | * Select by a logical combination (AND,OR,NOT) of namespaces 133 | * Define a pattern which must match the article's name 134 | * Name a page to which the article must or must not link 135 | * Name a template which the article must or must not use 136 | * Name a text pattern which must occur within external links from a page 137 | * Exclude or include redirections 138 | * Restrict your search to stable pages or quality pages ("flagged revisions") 139 | * Use other criteria for selection like author, date of last change etc. 140 | * Define regular expressions to match the contents of pages you want to include 141 | 142 | '''Order the result list of articles according to''' 143 | * Article Name 144 | * Article Size 145 | * Date of last change 146 | * Last User to Make an Edit 147 | 148 | '''Define attributes you want to see''' 149 | * Article Name 150 | * Article Namespace 151 | * Article Size 152 | * Date of Last Change 153 | * Date of Last Access 154 | * Last User to Make an Edit 155 | 156 | '''Define contents you want to show''' 157 | * Whole Article 158 | * Contents of Certain Sections (Identified by headings) 159 | * Text Portions (Defined by special marker tags in the article) 160 | * Values of template calls 161 | * Use a custom template to show output 162 | 163 | '''Define the output format''' 164 | * Specify header and footer for the default output 165 | * Use ordered list, unordered list 166 | * Use tables 167 | * Format table fields individually by applying templates to their content 168 | * Use category style listing 169 | * Truncate title or contents to a certain maximum length 170 | * Add a link to the article or to one or more of its sections 171 | 172 | ==Considerations== 173 | ===Performance=== 174 | DPL's code execution and database access is typically fast for typical category and article look ups. However, using loose LIKE and REGEXP match parameters and/or requesting large data sets can result in long database access times. Parser time should also be kept in consideration. For example, having the query of image results go into a template that displays them will result in a parser media transform for each one. This can quickly eat up 2MBs of RAM per media transform. 175 | 176 | ==See Also== 177 | ===Further Reading=== 178 | DPL can do much more than we can explain here. A complete '''[http://help.gamepedia.com/DPL:Manual manual]''' is available with full parameter documentation. 179 | 180 | [[Category:Category extensions{{#translation:}}]] 181 | [[Category:List extensions{{#translation:}}]] 182 | [[Category:Namespace extensions{{#translation:}}]] 183 | [[Category:Special page extensions{{#translation:}}]] 184 | [[Category:Table extensions{{#translation:}}]] 185 | [[Category:Page content extensions{{#translation:}}]] 186 | [[Category:Tag cloud extensions{{#translation:}}]] 187 | [[Category:Category intersection extensions{{#translation:}}]] -------------------------------------------------------------------------------- /classes/Article.php: -------------------------------------------------------------------------------- 1 | mTitle = $title; 194 | $this->mNamespace = $namespace; 195 | } 196 | 197 | /** 198 | * Initialize a new instance from a database row. 199 | * 200 | * @access public 201 | * @param array Database Row 202 | * @param object \DPL\Parameters Object 203 | * @param object Mediawiki Title Object 204 | * @param integer Page Namespace ID 205 | * @param string Page Title as Selected from Query 206 | * @return object \DPL\Article Object 207 | */ 208 | public static function newFromRow($row, Parameters $parameters, \Title $title, $pageNamespace, $pageTitle) { 209 | global $wgLang, $wgContLang; 210 | 211 | $article = new Article($title, $pageNamespace); 212 | 213 | $titleText = $title->getText(); 214 | if ($parameters->getParameter('shownamespace') === true) { 215 | $titleText = $title->getPrefixedText(); 216 | } 217 | $replaceInTitle = $parameters->getParameter('replaceintitle'); 218 | if (is_array($replaceInTitle) && count($replaceInTitle) === 2) { 219 | $titleText = preg_replace($replaceInTitle[0], $replaceInTitle[1], $titleText); 220 | } 221 | 222 | //Chop off title if longer than the 'titlemaxlen' parameter. 223 | if ($parameters->getParameter('titlemaxlen') !== null && strlen($titleText) > $parameters->getParameter('titlemaxlen')) { 224 | $titleText = substr($titleText, 0, $parameters->getParameter('titlemaxlen')) . '...'; 225 | } 226 | if ($parameters->getParameter('showcurid') === true && isset($row['page_id'])) { 227 | $articleLink = '[' . $title->getLinkURL(['curid' => $row['page_id']]) . ' ' . htmlspecialchars($titleText) . ']'; 228 | } else { 229 | $articleLink = '[[' . ($parameters->getParameter('escapelinks') && ($pageNamespace == NS_CATEGORY || $pageNamespace == NS_FILE) ? ':' : '') . $title->getFullText() . '|' . htmlspecialchars($titleText) . ']]'; 230 | } 231 | 232 | $article->mLink = $articleLink; 233 | 234 | //get first char used for category-style output 235 | if (isset($row['sortkey'])) { 236 | $article->mStartChar = $wgContLang->convert($wgContLang->firstChar($row['sortkey'])); 237 | } else { 238 | $article->mStartChar = $wgContLang->convert($wgContLang->firstChar($pageTitle)); 239 | } 240 | 241 | $article->mID = intval($row['page_id']); 242 | 243 | //External link 244 | if (isset($row['el_to'])) { 245 | $article->mExternalLink = $row['el_to']; 246 | } 247 | 248 | //SHOW PAGE_COUNTER 249 | if (isset($row['page_counter'])) { 250 | $article->mCounter = intval($row['page_counter']); 251 | } 252 | 253 | //SHOW PAGE_SIZE 254 | if (isset($row['page_len'])) { 255 | $article->mSize = intval($row['page_len']); 256 | } 257 | //STORE initially selected PAGE 258 | if (is_array($parameters->getParameter('linksto')) && (count($parameters->getParameter('linksto')) || count($parameters->getParameter('linksfrom')))) { 259 | if (!isset($row['sel_title'])) { 260 | $article->mSelTitle = 'unknown page'; 261 | $article->mSelNamespace = 0; 262 | } else { 263 | $article->mSelTitle = $row['sel_title']; 264 | $article->mSelNamespace = $row['sel_ns']; 265 | } 266 | } 267 | 268 | //STORE selected image 269 | if (is_array($parameters->getParameter('imageused')) && count($parameters->getParameter('imageused')) > 0) { 270 | if (!isset($row['image_sel_title'])) { 271 | $article->mImageSelTitle = 'unknown image'; 272 | } else { 273 | $article->mImageSelTitle = $row['image_sel_title']; 274 | } 275 | } 276 | 277 | if ($parameters->getParameter('goal') != 'categories') { 278 | //REVISION SPECIFIED 279 | if ($parameters->getParameter('lastrevisionbefore') || $parameters->getParameter('allrevisionsbefore') || $parameters->getParameter('firstrevisionsince') || $parameters->getParameter('allrevisionssince')) { 280 | $article->mRevision = $row['rev_id']; 281 | $article->mUser = $row['rev_user_text']; 282 | $article->mDate = $row['rev_timestamp']; 283 | $article->mComment = $row['rev_comment']; 284 | } 285 | 286 | //SHOW "PAGE_TOUCHED" DATE, "FIRSTCATEGORYDATE" OR (FIRST/LAST) EDIT DATE 287 | if ($parameters->getParameter('addpagetoucheddate')) { 288 | $article->mDate = $row['page_touched']; 289 | } elseif ($parameters->getParameter('addfirstcategorydate')) { 290 | $article->mDate = $row['cl_timestamp']; 291 | } elseif ($parameters->getParameter('addeditdate') && isset($row['rev_timestamp'])) { 292 | $article->mDate = $row['rev_timestamp']; 293 | } elseif ($parameters->getParameter('addeditdate') && isset($row['page_touched'])) { 294 | $article->mDate = $row['page_touched']; 295 | } 296 | 297 | //Time zone adjustment 298 | if ($article->mDate) { 299 | $article->mDate = $wgLang->userAdjust($article->mDate); 300 | } 301 | 302 | if ($article->mDate && $parameters->getParameter('userdateformat')) { 303 | //Apply the userdateformat 304 | $article->myDate = gmdate($parameters->getParameter('userdateformat'), wfTimeStamp(TS_UNIX, $article->mDate)); 305 | } 306 | // CONTRIBUTION, CONTRIBUTOR 307 | if ($parameters->getParameter('addcontribution')) { 308 | $article->mContribution = $row['contribution']; 309 | // This is the wrong check since the ActorMigration may be in progress 310 | // https://www.mediawiki.org/wiki/Actor_migration 311 | if ( class_exists( 'ActorMigration' ) ) { 312 | $article->mContributor = User::newFromActorId( $row['contributor'] )->getName(); 313 | } else { 314 | $article->mContributor = $row['contributor']; 315 | } 316 | $article->mContrib = substr('*****************', 0, (int) round(log($row['contribution']))); 317 | } 318 | 319 | //USER/AUTHOR(S) 320 | // because we are going to do a recursive parse at the end of the output phase 321 | // we have to generate wiki syntax for linking to a user´s homepage 322 | if ($parameters->getParameter('adduser') || $parameters->getParameter('addauthor') || $parameters->getParameter('addlasteditor')) { 323 | $article->mUserLink = '[[User:' . $row['rev_user_text'] . '|' . $row['rev_user_text'] . ']]'; 324 | $article->mUser = $row['rev_user_text']; 325 | } 326 | 327 | //CATEGORY LINKS FROM CURRENT PAGE 328 | if ($parameters->getParameter('addcategories') && ($row['cats'])) { 329 | $artCatNames = explode(' | ', $row['cats']); 330 | foreach ($artCatNames as $artCatName) { 331 | $article->mCategoryLinks[] = '[[:Category:' . $artCatName . '|' . str_replace('_', ' ', $artCatName) . ']]'; 332 | $article->mCategoryTexts[] = str_replace('_', ' ', $artCatName); 333 | } 334 | } 335 | // PARENT HEADING (category of the page, editor (user) of the page, etc. Depends on ordermethod param) 336 | if ($parameters->getParameter('headingmode') != 'none') { 337 | switch ($parameters->getParameter('ordermethod')[0]) { 338 | case 'category': 339 | //Count one more page in this heading 340 | self::$headings[$row['cl_to']] = (isset(self::$headings[$row['cl_to']]) ? self::$headings[$row['cl_to']] + 1 : 1); 341 | if ($row['cl_to'] == '') { 342 | //uncategorized page (used if ordermethod=category,...) 343 | $article->mParentHLink = '[[:Special:Uncategorizedpages|' . wfMessage('uncategorizedpages') . ']]'; 344 | } else { 345 | $article->mParentHLink = '[[:Category:' . $row['cl_to'] . '|' . str_replace('_', ' ', $row['cl_to']) . ']]'; 346 | } 347 | break; 348 | case 'user': 349 | self::$headings[$row['rev_user_text']] = (isset(self::$headings[$row['rev_user_text']]) ? self::$headings[$row['rev_user_text']] + 1 : 1); 350 | if ($row['rev_user'] == 0) { //anonymous user 351 | $article->mParentHLink = '[[User:' . $row['rev_user_text'] . '|' . $row['rev_user_text'] . ']]'; 352 | } else { 353 | $article->mParentHLink = '[[User:' . $row['rev_user_text'] . '|' . $row['rev_user_text'] . ']]'; 354 | } 355 | break; 356 | } 357 | } 358 | } 359 | 360 | return $article; 361 | } 362 | 363 | /** 364 | * Returns all heading information processed from all newly instantiated article objects. 365 | * 366 | * @access public 367 | * @return array Headings 368 | */ 369 | public static function getHeadings() { 370 | return self::$headings; 371 | } 372 | 373 | /** 374 | * Reset the headings to their initial state. 375 | * Ideally this Article class should not exist and be handled by the built in MediaWiki class. 376 | * Bug: https://jira/browse/HYD-913 377 | * 378 | * @access public 379 | * @return void 380 | */ 381 | public static function resetHeadings() { 382 | self::$headings = []; 383 | } 384 | 385 | /** 386 | * Get the formatted date for this article if available. 387 | * 388 | * @access public 389 | * @return mixed Formatted string or null for none set. 390 | */ 391 | public function getDate() { 392 | global $wgLang; 393 | if ($this->myDate !== null) { 394 | return $this->myDate; 395 | } elseif ($this->mDate !== null) { 396 | return $wgLang->timeanddate($article->mDate, true); 397 | } 398 | return null; 399 | } 400 | } 401 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The GNU General Public License, Version 2, June 1991 (GPLv2) 2 | ============================================================ 3 | 4 | > Copyright (C) 1989, 1991 Free Software Foundation, Inc. 5 | > 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 6 | 7 | Everyone is permitted to copy and distribute verbatim copies of this license 8 | document, but changing it is not allowed. 9 | 10 | 11 | Preamble 12 | -------- 13 | 14 | The licenses for most software are designed to take away your freedom to share 15 | and change it. By contrast, the GNU General Public License is intended to 16 | guarantee your freedom to share and change free software--to make sure the 17 | software is free for all its users. This General Public License applies to most 18 | of the Free Software Foundation's software and to any other program whose 19 | authors commit to using it. (Some other Free Software Foundation software is 20 | covered by the GNU Lesser General Public License instead.) You can apply it to 21 | your programs, too. 22 | 23 | When we speak of free software, we are referring to freedom, not price. Our 24 | General Public Licenses are designed to make sure that you have the freedom to 25 | distribute copies of free software (and charge for this service if you wish), 26 | that you receive source code or can get it if you want it, that you can change 27 | the software or use pieces of it in new free programs; and that you know you can 28 | do these things. 29 | 30 | To protect your rights, we need to make restrictions that forbid anyone to deny 31 | you these rights or to ask you to surrender the rights. These restrictions 32 | translate to certain responsibilities for you if you distribute copies of the 33 | software, or if you modify it. 34 | 35 | For example, if you distribute copies of such a program, whether gratis or for a 36 | fee, you must give the recipients all the rights that you have. You must make 37 | sure that they, too, receive or can get the source code. And you must show them 38 | these terms so they know their rights. 39 | 40 | We protect your rights with two steps: (1) copyright the software, and (2) offer 41 | you this license which gives you legal permission to copy, distribute and/or 42 | modify the software. 43 | 44 | Also, for each author's protection and ours, we want to make certain that 45 | everyone understands that there is no warranty for this free software. If the 46 | software is modified by someone else and passed on, we want its recipients to 47 | know that what they have is not the original, so that any problems introduced by 48 | others will not reflect on the original authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software patents. We wish 51 | to avoid the danger that redistributors of a free program will individually 52 | obtain patent licenses, in effect making the program proprietary. To prevent 53 | this, we have made it clear that any patent must be licensed for everyone's free 54 | use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and modification 57 | follow. 58 | 59 | 60 | Terms And Conditions For Copying, Distribution And Modification 61 | --------------------------------------------------------------- 62 | 63 | **0.** This License applies to any program or other work which contains a notice 64 | placed by the copyright holder saying it may be distributed under the terms of 65 | this General Public License. The "Program", below, refers to any such program or 66 | work, and a "work based on the Program" means either the Program or any 67 | derivative work under copyright law: that is to say, a work containing the 68 | Program or a portion of it, either verbatim or with modifications and/or 69 | translated into another language. (Hereinafter, translation is included without 70 | limitation in the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not covered by 73 | this License; they are outside its scope. The act of running the Program is not 74 | restricted, and the output from the Program is covered only if its contents 75 | constitute a work based on the Program (independent of having been made by 76 | running the Program). Whether that is true depends on what the Program does. 77 | 78 | **1.** You may copy and distribute verbatim copies of the Program's source code 79 | as you receive it, in any medium, provided that you conspicuously and 80 | appropriately publish on each copy an appropriate copyright notice and 81 | disclaimer of warranty; keep intact all the notices that refer to this License 82 | and to the absence of any warranty; and give any other recipients of the Program 83 | a copy of this License along with the Program. 84 | 85 | You may charge a fee for the physical act of transferring a copy, and you may at 86 | your option offer warranty protection in exchange for a fee. 87 | 88 | **2.** You may modify your copy or copies of the Program or any portion of it, 89 | thus forming a work based on the Program, and copy and distribute such 90 | modifications or work under the terms of Section 1 above, provided that you also 91 | meet all of these conditions: 92 | 93 | * **a)** You must cause the modified files to carry prominent notices stating 94 | that you changed the files and the date of any change. 95 | 96 | * **b)** You must cause any work that you distribute or publish, that in whole 97 | or in part contains or is derived from the Program or any part thereof, to 98 | be licensed as a whole at no charge to all third parties under the terms of 99 | this License. 100 | 101 | * **c)** If the modified program normally reads commands interactively when 102 | run, you must cause it, when started running for such interactive use in the 103 | most ordinary way, to print or display an announcement including an 104 | appropriate copyright notice and a notice that there is no warranty (or 105 | else, saying that you provide a warranty) and that users may redistribute 106 | the program under these conditions, and telling the user how to view a copy 107 | of this License. (Exception: if the Program itself is interactive but does 108 | not normally print such an announcement, your work based on the Program is 109 | not required to print an announcement.) 110 | 111 | These requirements apply to the modified work as a whole. If identifiable 112 | sections of that work are not derived from the Program, and can be reasonably 113 | considered independent and separate works in themselves, then this License, and 114 | its terms, do not apply to those sections when you distribute them as separate 115 | works. But when you distribute the same sections as part of a whole which is a 116 | work based on the Program, the distribution of the whole must be on the terms of 117 | this License, whose permissions for other licensees extend to the entire whole, 118 | and thus to each and every part regardless of who wrote it. 119 | 120 | Thus, it is not the intent of this section to claim rights or contest your 121 | rights to work written entirely by you; rather, the intent is to exercise the 122 | right to control the distribution of derivative or collective works based on the 123 | Program. 124 | 125 | In addition, mere aggregation of another work not based on the Program with the 126 | Program (or with a work based on the Program) on a volume of a storage or 127 | distribution medium does not bring the other work under the scope of this 128 | License. 129 | 130 | **3.** You may copy and distribute the Program (or a work based on it, under 131 | Section 2) in object code or executable form under the terms of Sections 1 and 2 132 | above provided that you also do one of the following: 133 | 134 | * **a)** Accompany it with the complete corresponding machine-readable source 135 | code, which must be distributed under the terms of Sections 1 and 2 above on 136 | a medium customarily used for software interchange; or, 137 | 138 | * **b)** Accompany it with a written offer, valid for at least three years, to 139 | give any third party, for a charge no more than your cost of physically 140 | performing source distribution, a complete machine-readable copy of the 141 | corresponding source code, to be distributed under the terms of Sections 1 142 | and 2 above on a medium customarily used for software interchange; or, 143 | 144 | * **c)** Accompany it with the information you received as to the offer to 145 | distribute corresponding source code. (This alternative is allowed only for 146 | noncommercial distribution and only if you received the program in object 147 | code or executable form with such an offer, in accord with Subsection b 148 | above.) 149 | 150 | The source code for a work means the preferred form of the work for making 151 | modifications to it. For an executable work, complete source code means all the 152 | source code for all modules it contains, plus any associated interface 153 | definition files, plus the scripts used to control compilation and installation 154 | of the executable. However, as a special exception, the source code distributed 155 | need not include anything that is normally distributed (in either source or 156 | binary form) with the major components (compiler, kernel, and so on) of the 157 | operating system on which the executable runs, unless that component itself 158 | accompanies the executable. 159 | 160 | If distribution of executable or object code is made by offering access to copy 161 | from a designated place, then offering equivalent access to copy the source code 162 | from the same place counts as distribution of the source code, even though third 163 | parties are not compelled to copy the source along with the object code. 164 | 165 | **4.** You may not copy, modify, sublicense, or distribute the Program except as 166 | expressly provided under this License. Any attempt otherwise to copy, modify, 167 | sublicense or distribute the Program is void, and will automatically terminate 168 | your rights under this License. However, parties who have received copies, or 169 | rights, from you under this License will not have their licenses terminated so 170 | long as such parties remain in full compliance. 171 | 172 | **5.** You are not required to accept this License, since you have not signed 173 | it. However, nothing else grants you permission to modify or distribute the 174 | Program or its derivative works. These actions are prohibited by law if you do 175 | not accept this License. Therefore, by modifying or distributing the Program (or 176 | any work based on the Program), you indicate your acceptance of this License to 177 | do so, and all its terms and conditions for copying, distributing or modifying 178 | the Program or works based on it. 179 | 180 | **6.** Each time you redistribute the Program (or any work based on the 181 | Program), the recipient automatically receives a license from the original 182 | licensor to copy, distribute or modify the Program subject to these terms and 183 | conditions. You may not impose any further restrictions on the recipients' 184 | exercise of the rights granted herein. You are not responsible for enforcing 185 | compliance by third parties to this License. 186 | 187 | **7.** If, as a consequence of a court judgment or allegation of patent 188 | infringement or for any other reason (not limited to patent issues), conditions 189 | are imposed on you (whether by court order, agreement or otherwise) that 190 | contradict the conditions of this License, they do not excuse you from the 191 | conditions of this License. If you cannot distribute so as to satisfy 192 | simultaneously your obligations under this License and any other pertinent 193 | obligations, then as a consequence you may not distribute the Program at all. 194 | For example, if a patent license would not permit royalty-free redistribution of 195 | the Program by all those who receive copies directly or indirectly through you, 196 | then the only way you could satisfy both it and this License would be to refrain 197 | entirely from distribution of the Program. 198 | 199 | If any portion of this section is held invalid or unenforceable under any 200 | particular circumstance, the balance of the section is intended to apply and the 201 | section as a whole is intended to apply in other circumstances. 202 | 203 | It is not the purpose of this section to induce you to infringe any patents or 204 | other property right claims or to contest validity of any such claims; this 205 | section has the sole purpose of protecting the integrity of the free software 206 | distribution system, which is implemented by public license practices. Many 207 | people have made generous contributions to the wide range of software 208 | distributed through that system in reliance on consistent application of that 209 | system; it is up to the author/donor to decide if he or she is willing to 210 | distribute software through any other system and a licensee cannot impose that 211 | choice. 212 | 213 | This section is intended to make thoroughly clear what is believed to be a 214 | consequence of the rest of this License. 215 | 216 | **8.** If the distribution and/or use of the Program is restricted in certain 217 | countries either by patents or by copyrighted interfaces, the original copyright 218 | holder who places the Program under this License may add an explicit 219 | geographical distribution limitation excluding those countries, so that 220 | distribution is permitted only in or among countries not thus excluded. In such 221 | case, this License incorporates the limitation as if written in the body of this 222 | License. 223 | 224 | **9.** The Free Software Foundation may publish revised and/or new versions of 225 | the General Public License from time to time. Such new versions will be similar 226 | in spirit to the present version, but may differ in detail to address new 227 | problems or concerns. 228 | 229 | Each version is given a distinguishing version number. If the Program specifies 230 | a version number of this License which applies to it and "any later version", 231 | you have the option of following the terms and conditions either of that version 232 | or of any later version published by the Free Software Foundation. If the 233 | Program does not specify a version number of this License, you may choose any 234 | version ever published by the Free Software Foundation. 235 | 236 | **10.** If you wish to incorporate parts of the Program into other free programs 237 | whose distribution conditions are different, write to the author to ask for 238 | permission. For software which is copyrighted by the Free Software Foundation, 239 | write to the Free Software Foundation; we sometimes make exceptions for this. 240 | Our decision will be guided by the two goals of preserving the free status of 241 | all derivatives of our free software and of promoting the sharing and reuse of 242 | software generally. 243 | 244 | 245 | No Warranty 246 | ----------- 247 | 248 | **11.** BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR 249 | THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE 250 | STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM 251 | "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, 252 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 253 | PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 254 | PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 255 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 256 | 257 | **12.** IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 258 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 259 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 260 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 261 | INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 262 | BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 263 | FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER 264 | OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. --------------------------------------------------------------------------------