WikidataBuilder has uploaded a new change for review. https://gerrit.wikimedia.org/r/258431
Change subject: New Wikidata Build - 2015-12-11T10:00:01+0000 ...................................................................... New Wikidata Build - 2015-12-11T10:00:01+0000 Change-Id: I373391fe7aa79896a38f9adda3c9847a14c0841f --- M composer.lock M extensions/Wikibase/README.md M extensions/Wikibase/client/i18n/lki.json M extensions/Wikibase/client/i18n/ru.json M extensions/Wikibase/lib/i18n/lki.json D extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/images/tipsy.png M extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.wbtooltip.css M extensions/Wikibase/repo/config/Wikibase.default.php M extensions/Wikibase/repo/i18n/ckb.json M extensions/Wikibase/repo/i18n/gl.json M extensions/Wikibase/repo/i18n/lki.json A extensions/Wikibase/repo/includes/DispatchingEntityTypeStatementGrouper.php A extensions/Wikibase/repo/includes/StatementGrouperBuilder.php D extensions/Wikibase/repo/includes/StatementGrouperFactory.php M extensions/Wikibase/repo/includes/WikibaseRepo.php A extensions/Wikibase/repo/tests/phpunit/includes/DispatchingEntityTypeStatementGrouperTest.php A extensions/Wikibase/repo/tests/phpunit/includes/StatementGrouperBuilderTest.php M extensions/Wikibase/repo/tests/phpunit/includes/Validators/LabelUniquenessValidatorTest.php M extensions/Wikibase/view/resources/wikibase/wikibase.css M extensions/Wikibase/view/src/EntityViewFactory.php M extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php M vendor/composer/autoload_classmap.php M vendor/composer/installed.json 23 files changed, 573 insertions(+), 88 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata refs/changes/31/258431/1 diff --git a/composer.lock b/composer.lock index 02cfe27..e178d88 100644 --- a/composer.lock +++ b/composer.lock @@ -1448,12 +1448,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "cb21dcb4e8691ee3aa4c3c40b7832e48d2286516" + "reference": "4a50981973f59459fb214cf5c99a216d13d749a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/cb21dcb4e8691ee3aa4c3c40b7832e48d2286516", - "reference": "cb21dcb4e8691ee3aa4c3c40b7832e48d2286516", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/4a50981973f59459fb214cf5c99a216d13d749a8", + "reference": "4a50981973f59459fb214cf5c99a216d13d749a8", "shasum": "" }, "require": { @@ -1524,7 +1524,7 @@ "wikibaserepo", "wikidata" ], - "time": "2015-12-09 22:19:02" + "time": "2015-12-10 22:02:00" }, { "name": "wikibase/wikimedia-badges", diff --git a/extensions/Wikibase/README.md b/extensions/Wikibase/README.md index 52f6679..6a9cf38 100644 --- a/extensions/Wikibase/README.md +++ b/extensions/Wikibase/README.md @@ -18,7 +18,7 @@ in MediaWiki. The repo is the extension for the repository. It allows the creation and maintenance of structured -data. This is being used on [wikidata.org](https://www.wikidata.org) . +data. This is being used on [wikidata.org](https://www.wikidata.org). The client is the extension for the client. It allows several MediaWiki instances to use data provided by a Wikidata instance. Usually, you would not use them in a single wiki. This is being used on the @@ -36,7 +36,7 @@ * WikibaseLib (in the subdirectory lib) * Wikibase Client (in the subdirectory client) -If you are running Wikibase with hhvm, you need to enable [zend compat](http://docs.hhvm.com/manual/en/configuration.zend.compat.php) +If you are running Wikibase with hhvm, you need to enable [zend compat](http://docs.hhvm.com/hhvm/configuration/INI-settings#feature-flags) in your php.ini: ``` @@ -60,6 +60,6 @@ ## The Wikibase software These extensions are part of the [Wikibase software](http://wikiba.se/) created by the Wikidata team -for the [Wikidata project](https://meta.wikimedia.org/wiki/Wikidata). +for the [Wikidata project](https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikidata). -The Wikidata project uses the Wikibase software on its [wikidata.org website](https://www.wikidata.org). +The Wikidata project uses the Wikibase software on [its website](https://www.wikidata.org). \ No newline at end of file diff --git a/extensions/Wikibase/client/i18n/lki.json b/extensions/Wikibase/client/i18n/lki.json index 49d10f4..c85626e 100644 --- a/extensions/Wikibase/client/i18n/lki.json +++ b/extensions/Wikibase/client/i18n/lki.json @@ -1,18 +1,21 @@ { "@metadata": { "authors": [ - "Hosseinblue" + "Hosseinblue", + "Arash71", + "Lakzon" ] }, "tooltip-t-wikibase": "پیوۀند وۀآیتم چۀسبیا/متصل و ژیرۀ/مخزن داده", + "apihelp-query+pageterms-param-terms": "نوع اصطلاحها برای دریافت مانند «توضیحات». اگر مشخص نشده باشد، همهٔ نوعها بازگشت داده میشود.", "wikibase-comment-update": "مورد {{WBREPONAME}} تغییر کرد", "wikibase-dataitem": "{{WBREPONAME}} آیتم", - "wikibase-editlinks": "دۀسکاری پیوۀندۀل", + "wikibase-editlinks": "دةسکاری پیوةندةل", "wikibase-editlinkstitle": "دۀسکاری پیوندۀل میانویکی", "wikibase-rc-hide-wikidata": "$1 {{WBREPONAME}}", "wikibase-rc-hide-wikidata-hide": "ئآشاردن-پنهان کردن", "wikibase-rc-hide-wikidata-show": "نیشان دائن", "wikibase-rc-wikibase-edit-letter": "د", - "wikibase-rc-wikibase-edit-title": "{{WBREPONAME}} دۀسکاری", + "wikibase-rc-wikibase-edit-title": "{{WBREPONAME}} دةسکاری", "wikibase-otherprojects": "پروژۀلئ تر" } diff --git a/extensions/Wikibase/client/i18n/ru.json b/extensions/Wikibase/client/i18n/ru.json index 73ce55e..0156c13 100644 --- a/extensions/Wikibase/client/i18n/ru.json +++ b/extensions/Wikibase/client/i18n/ru.json @@ -18,6 +18,7 @@ "wikibase-client-desc": "Клиент для расширения Wikibase", "tooltip-t-wikibase": "Ссылка на связанный элемент репозитория данных", "apihelp-query+pageterms-example-label-en": "Получить метки и синонимы, связанные с английской страницей «London»", + "apihelp-query+pageterms-example-item": "Получить обозначения и псевдонимы элемента Q84.", "wikibase-after-page-move": "Чтобы исправить на переименованной странице языковые ссылки, вы можете также [$1 обновить] связанный элемент {{grammar:genitive|{{WBREPONAME}}}}.", "wikibase-after-page-move-queued": "Связанный с этой страницей [$1 элемент {{grammar:genitive|{{WBREPONAME}}}}] будет автоматически обновлён. Обратите внимание, что это не может произойти мгновенно.", "wikibase-after-page-delete-queued": "Связанный с этой страницей [$1 элемент {{grammar:genitive|{{WBREPONAME}}}}] будет автоматически обновлён. Обратите внимание, что это не может произойти мгновенно.", @@ -49,6 +50,7 @@ "wikibase-linkitem-not-loggedin-title": "Вы должны авторизоваться", "wikibase-linkitem-not-loggedin": "Чтобы воспользоваться этой функцией, вы должны быть авторизованы в этой вики и в [$1 центральном репозитории данных].", "wikibase-linkitem-success-link": "Страницы были успешно связаны. Элемент, содержащий связи, находится в нашем [$1 центральном хранилище данных].", + "wikibase-limitreport-entities-accessed": "Количество загруженных сущностей Викибазы", "wikibase-property-notfound": "Свойство «$1» не найдено", "wikibase-rc-hide-wikidata": "$1 {{WBREPONAME}}", "wikibase-rc-hide-wikidata-hide": "Скрыть", diff --git a/extensions/Wikibase/lib/i18n/lki.json b/extensions/Wikibase/lib/i18n/lki.json index 0f616c4..bafde11 100644 --- a/extensions/Wikibase/lib/i18n/lki.json +++ b/extensions/Wikibase/lib/i18n/lki.json @@ -1,8 +1,13 @@ { "@metadata": { "authors": [ - "Hosseinblue" + "Hosseinblue", + "Lakzon" ] }, - "wikibase-sitelinks-wikipedia": "ویکی پدیا" + "wikibase-sitelinks-wikipedia": "ویکی پدیا", + "wikibase-entity-summary-wbsetdescription-add": "توضیحات [$2] افزوده شد", + "wikibase-entity-summary-wbsetdescription-set": "تغییر توضیحات [$2]", + "wikibase-entity-summary-wbsetdescription-remove": "حذف توضیحات [$2]", + "wikibase-entity-summary-wbsetlabeldescriptionaliases": "[$2] برچسب، شرح و نامهای مستعار تغییر یافت" } diff --git a/extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/images/tipsy.png b/extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/images/tipsy.png deleted file mode 100644 index 3aa168e..0000000 --- a/extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/images/tipsy.png +++ /dev/null Binary files differ diff --git a/extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.wbtooltip.css b/extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.wbtooltip.css index 47bee02..0b51863 100644 --- a/extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.wbtooltip.css +++ b/extensions/Wikibase/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.wbtooltip.css @@ -5,20 +5,11 @@ * @author H. Snater < mediaw...@snater.com > */ -/* FIXME: We can remove the following two blocks and delete the image 30 days after the outdated -tipsy styles in shared.css are removed and we want to remove the blue color from our tooltips. */ -.wikibase-wbtooltip-tip .tipsy-inner { - background-color: #d6f3ff; - border-color: #5dc9f4; +/* FIXME: Remove when core's jquery.tipsy.css is fixed. */ +.wikibase-wbtooltip-tip.tipsy-nw .tipsy-arrow, +.wikibase-wbtooltip-tip.tipsy-ne .tipsy-arrow { + top: 0; } -.wikibase-wbtooltip-tip .tipsy-arrow { - /* @embed */ - background-image: url(images/tipsy.png); - /* FIXME: Remove 30 days after the outdated tipsy-arrow style in shared.css is removed */ - height: 6px; -} - -/***** ERROR TOOLTIP *****/ .wikibase-wbtooltip-tip.wb-error .tipsy-arrow { /* @embed */ @@ -32,5 +23,3 @@ background: #FFDFC9; border-color: #B27631; } - -/***** /ERROR TOOLTIP *****/ diff --git a/extensions/Wikibase/repo/config/Wikibase.default.php b/extensions/Wikibase/repo/config/Wikibase.default.php index fe30007..9ea5850 100644 --- a/extensions/Wikibase/repo/config/Wikibase.default.php +++ b/extensions/Wikibase/repo/config/Wikibase.default.php @@ -27,6 +27,9 @@ 'entityNamespaces' => array(), + // See StatementGrouperBuilder for an example. + 'statementSections' => array(), + // Define constraints for multilingual terms (such as labels, descriptions and aliases). 'multilang-limits' => array( 'length' => 250, // length constraint diff --git a/extensions/Wikibase/repo/i18n/ckb.json b/extensions/Wikibase/repo/i18n/ckb.json index 08659c7..4339da6 100644 --- a/extensions/Wikibase/repo/i18n/ckb.json +++ b/extensions/Wikibase/repo/i18n/ckb.json @@ -29,8 +29,9 @@ "wikibase-alias-edit-placeholder": "نازناوێک بنووسە", "wikibase-label-input-help-message": "سەردێڕی ئەم دراوەیە بە $1 بنووسە.", "wikibase-description-input-help-message": "شیکردنەوەیەکی کورت بە $1 بنووسە.", - "wikibase-statements": "ئاخاوتەکان", + "wikibase-statementsection-statements": "ئاخاوتەکان", "wikibase-sitelinks": "پێرستی پەڕە بەسراوەکان بەم بەندەوە", + "wikibase-sitelinks-special": "ماڵپەڕەکانی تر", "wikibase-remove": "سڕینەوە", "wikibase-propertyedittool-counter-entrieslabel": "{{PLURAL:$1|نێوانویکی}}", "wikibase-disambiguation-title": "ڕوونکردنەوە بۆ «$1»", diff --git a/extensions/Wikibase/repo/i18n/gl.json b/extensions/Wikibase/repo/i18n/gl.json index fc52864..6134d05 100644 --- a/extensions/Wikibase/repo/i18n/gl.json +++ b/extensions/Wikibase/repo/i18n/gl.json @@ -361,6 +361,8 @@ "apihelp-wbeditentity-example-8": "Crea unha nova afirmación no elemento para a propiedade P56 e o valor de \"ExampleString\" (\"Exemplodecadeadetexto\")", "apihelp-wbeditentity-example-9": "Elimina as afirmación do elemento cos GUIDs Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F e Q42$GH678DSA-01PQ-28XC-HJ90-DDFD9990126X", "apihelp-wbeditentity-example-10": "Fixa a afirmación co GUID ó valor da afirmación", + "apihelp-wbeditentity-example-11": "Engade unha etiqueta sen sobreescribila se xa existe", + "apihelp-wbeditentity-example-12": "Elimina unha etiqueta", "apihelp-wbformatvalue-description": "Formatos de valores de datas.", "apihelp-wbformatvalue-param-generate": "Formato de saída desexado para xenerar.", "apihelp-wbformatvalue-param-datatype": "O tipo de dato do valor. Isto é diferente do tipo do valor", diff --git a/extensions/Wikibase/repo/i18n/lki.json b/extensions/Wikibase/repo/i18n/lki.json index 8585ed5..6136054 100644 --- a/extensions/Wikibase/repo/i18n/lki.json +++ b/extensions/Wikibase/repo/i18n/lki.json @@ -1,15 +1,55 @@ { "@metadata": { "authors": [ - "Hosseinblue" + "Hosseinblue", + "Arash71", + "Lakzon" ] }, - "wikibase-edit": "دۀسکاری", + "wikibase-edit": "دةسکاری", "wikibase-add": "اضافۀکردن", + "wikibase-entitytermsforlanguagelistview-description": "توضیحةل", + "wikibase-entitytermsforlanguagelistview-label": "برچسب", "wikibase-label-empty": "هیچ نام مستعاری تعریف نشده است", "wikibase-description-empty": "توضیحاتی تعریف نشده است.", + "wikibase-description-edit-placeholder": "واردکردن توضیحات", + "wikibase-diffview-label": "برچسب", + "wikibase-description-input-help-message": "توضیحات کوتاهی به $1 برای این موجودیت وارد کنید.", "wikibase-sitelinks-special": "سایتۀلئ تر", "wikibase-aliases-empty": "هیچ نام مستعاری تعریف نشده است", "wikibase-statementview-rank-normal": "رتبه معمولی", - "wikibase-statementview-referencesheading-pendingcountersubject": "{{PLURAL:$1|منبع|منابع}}" + "wikibase-statementview-referencesheading-pendingcountersubject": "{{PLURAL:$1|منبع|منابع}}", + "wikibase-validator-label-with-description-conflict": "آیتم $3 از قبل دارای نام «$1» با توضیحات متنی مشابه مربوط به کد زبان «$2» است", + "wikibase-newproperty-summary": "مطمئن شوید که [[Special:PropertyDisambiguation|خصوصیت مربوطه از قبل وجود دارد]]! <br /> شما باید یک [[Help:Label|برچسب]] و یک [[Help:Description|توضیح]] برای همهٔ خصوصیتهای تازه ایجاد کنید. به همراه نوع داده قابل قبول خصوصیت.", + "wikibase-newitem-summary": "مطمئن شوید که [[Special:ItemByTitle|اگر آیتم مربوطه از قبل وجود داشته باشد]]!<br /> شما باید یک [[Help:Label|برچسب]] و [[Help:Description|توضیح]] برای همهٔ آیتمهای تازه ایجاد کنید.", + "wikibase-newentity-label": "نام:", + "wikibase-newentity-description": ":توضیحۀل", + "wikibase-setlabel-label": "برچسب:", + "wikibase-setlabel-submit": "گذاشتن نام", + "special-setdescription": "ثبت یک توضیح", + "wikibase-setdescription-introfull": "شما در حال ثبت توضیح موجود در $2 برای [[$1]] هستید.", + "wikibase-setdescription-label": ":توضیحۀل", + "wikibase-setdescription-submit": "ثبت توضیحات", + "special-setlabeldescriptionaliases": "تنظیم برچسب، شرح و نامهای مستعار", + "wikibase-setlabeldescriptionaliases-introfull": "شما در حال تنظیم کردن برچسب، توضیحات و نامهای مستعار برای [[$1]] در $2 هستید. چند نام مستعار با نویسههای لولهای (<code>|<code>) جدا شدهاند.", + "wikibase-setlabeldescriptionaliases-intro": "در این فرم میتوانید برچسب، توضیحات و نامهای مستعار مربوط به جوهره مورد نظر را وارد کنید. پیش از هر چیز باید یک شناسه برای جوهره انتخاب کنید (مثل \"Q23\") و کد زبان (مثل \"fa\") را مشخص کنید.", + "wikibase-setlabeldescriptionaliases-description-label": ":توضیحۀل", + "wikibase-setlabeldescriptionaliases-submit": "برچسب، شرح و نامهای مستعار را وارد کنید", + "special-entitieswithoutdescription": "جوهرههای بدون توضیحات", + "wikibase-entitieswithoutdescription-legend": "فهرست جوهرههای بدون توضیحات را دریافت کنید", + "wikibase-listdatatypes-globe-coordinate-body": "داده حروفی برای مکان جغرافیایی یک جرم درخشان آسمانی که به صورت طول جغرافیایی-عرض جغرافیایی بر حسب درجه یا بوسیله سامانههای زئومتریک بیان میشود.\n* عرض جغرافیایی - بخش اول مقدار داده که به صورت یک رشته و بر حسب (شناوری در هوا، درجه-دقیقه-ثانیه، درجه-دقیقه، درجه-درجه) بیان شده و جهت آن با یک حرف مخفف (شمالی/جنوبی) مشخص می شود\n* طول جغرافیایی - بخش دوم مقدار داده که به صورت یک رشته و بر حسب (شناوری در هوا، درجه-دقیقه-ثانیه، درجه-دقیقه، درجه-درجه) بیان شده و جهت آن با یک حرف مخفف (خاوری/باختریی) مشخص می شود\n* ارتفاع(اختیاری) - مقدار مشخص (؟) ارتفاع از سطح مرجع، برای کرهٔ «زمین» که کرهٔ مرجع آن \"WGS84\" است\n* کره(اختیاری) - مقداری مشخص(؟)که بر حسب جسم آسمانی تعیین شده، به صورت پیشفرض کره «زمین» و \"WGS84\" است", + "wikibase-listdatatypes-quantity-body": "زمینه داده های حروفی برای یک کمیت که به یک نوع یکای دقیق مربوط می شود. یکا، در واقع با مقدار وارد شده همراه می آید.\n* مقدار - بخشی نامعلوم از رشته(اندازهگیری شده با پیشوندی نامعلوم)\n* واحد – ضمنی بخشی از رشته که به صورت پیش فرض به \"1\" (نقشه برداری به استاندارد بدن معلوم است)\n * upperbound - مقدار در بالا محدود\n * lowerbound - مقدار در حد پایین", + "apihelp-wbeditentity-param-site": "شناسۀ وبگاهی که صفحه در آن وجود دارد.\nبه همراه «عنوان» استفاده کنید تا تشکیل یک پیونداد کامل دهد.", + "apihelp-wbeditentity-param-clear": "اگر قرار داده شود قبل از جلو رفتن کل جوهره خالی میشود. پیش از آنکه دادهها کامل پر شوند، امکان ذخیزه جوهره وجود نخواهد داشت.", + "apihelp-wbeditentity-example-7": "توضیحاتی برای nb قرار میدهد و در صورتی که قبلا یکی وجود داشته باشد دوباره روی آن مینویسد", + "apihelp-wblinktitles-param-tosite": "شناسۀ وبگاهی که صفحه در آن وجود دارد.\nهمراه با «بهعنوان» استفاده کنید تا تشکیل یک پیونداد کامل دهد.", + "apihelp-wblinktitles-param-totitle": "عنوان صفحه که با آن مطابقت دارد.\nهمراه با «بهوبگاه» استفاده کنید تا تشکیل یک پیونداد کامل دهد.", + "apihelp-wbsetdescription-description": "برای یک جوهره ویکیبیس که منفرد باشد یک توضیحات قرار میدهد", + "apihelp-wbsetdescription-param-title": "عنوان صفحه که با آن مطابقت دارد.\nهمراه با «وبگاه» استفاده کنید تا تشکیل یک پیونداد کامل دهد.", + "apihelp-wbsetdescription-param-language": "زوون توضیحةل", + "apihelp-wbsetdescription-param-value": "مقدار برای تنظیم توضیحات", + "apihelp-wbsetdescription-example-1": "برای صفحهای با شناسۀ Q42 یک توضیحات به زبان انگلیسی به صورت رشته «An encyclopedia that everyone can edit» قرار میدهد", + "apihelp-wbsetdescription-example-2": "برای صفحهای با پیونداد enwiki:Wikipedia یک توضیحات به زبان انگلیسی به صورت رشته «An encyclopedia that everyone can edit» قرار میدهد", + "apihelp-wbsetlabel-param-site": "شناسۀ وبگاهی که صفحه در آن وجود دارد.\nبه همراه «عنوان» استفاده کنید تا تشکیل یک پیونداد کامل دهد.", + "apihelp-wbsetlabel-param-title": "عنوان صفحه که با آن مطابقت دارد.\nهمراه با «وبگاه» استفاده کنید تا تشکیل یک پیونداد کامل دهد." } diff --git a/extensions/Wikibase/repo/includes/DispatchingEntityTypeStatementGrouper.php b/extensions/Wikibase/repo/includes/DispatchingEntityTypeStatementGrouper.php new file mode 100644 index 0000000..5f2562c --- /dev/null +++ b/extensions/Wikibase/repo/includes/DispatchingEntityTypeStatementGrouper.php @@ -0,0 +1,96 @@ +<?php + +namespace Wikibase\Repo; + +use InvalidArgumentException; +use Wikibase\DataModel\Entity\BasicEntityIdParser; +use Wikibase\DataModel\Services\Statement\Grouper\NullStatementGrouper; +use Wikibase\DataModel\Services\Statement\Grouper\StatementGrouper; +use Wikibase\DataModel\Services\Statement\StatementGuidParser; +use Wikibase\DataModel\Services\Statement\StatementGuidParsingException; +use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementList; + +/** + * @since 0.5 + * + * @license GNU GPL v2+ + * @author Thiemo Mättig + */ +class DispatchingEntityTypeStatementGrouper implements StatementGrouper { + + /** + * @var StatementGrouper[] + */ + private $statementGroupers = array(); + + /** + * @var StatementGuidParser + */ + private $guidParser; + + /** + * @param StatementGrouper[] $statementGroupers An associative array, mapping entity types + * (typically "item" and "property") to StatementGrouper objects. + * + * @throws InvalidArgumentException + */ + public function __construct( array $statementGroupers ) { + foreach ( $statementGroupers as $key => $grouper ) { + if ( !is_string( $key ) || !( $grouper instanceof StatementGrouper ) ) { + throw new InvalidArgumentException( + '$statementGroupers must map strings to StatementGroupers' + ); + } + $this->statementGroupers[$key] = $grouper; + } + + // TODO: Inject? + $this->guidParser = new StatementGuidParser( new BasicEntityIdParser() ); + } + + /** + * @param StatementList $statements + * + * @return StatementList[] + */ + public function groupStatements( StatementList $statements ) { + return $this->guessStatementGrouper( $statements )->groupStatements( $statements ); + } + + /** + * @param StatementList $statements + * + * @return StatementGrouper + */ + private function guessStatementGrouper( StatementList $statements ) { + foreach ( $statements->toArray() as $statement ) { + $entityType = $this->getEntityType( $statement ); + + if ( array_key_exists( $entityType, $this->statementGroupers ) ) { + return $this->statementGroupers[$entityType]; + } + + // FIXME: Check all statements and fail if they don't share the same entity type? + } + + return new NullStatementGrouper(); + } + + /** + * @param Statement $statement + * + * @return string|null + */ + private function getEntityType( Statement $statement ) { + try { + $guid = $this->guidParser->parse( $statement->getGuid() ); + } catch ( StatementGuidParsingException $ex ) { + // FIXME: Fail when there is a statement with no GUID? + return null; + } + + return $guid->getEntityId()->getEntityType(); + } + +} diff --git a/extensions/Wikibase/repo/includes/StatementGrouperBuilder.php b/extensions/Wikibase/repo/includes/StatementGrouperBuilder.php new file mode 100644 index 0000000..0b399e4 --- /dev/null +++ b/extensions/Wikibase/repo/includes/StatementGrouperBuilder.php @@ -0,0 +1,136 @@ +<?php + +namespace Wikibase\Repo; + +use InvalidArgumentException; +use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup; +use Wikibase\DataModel\Services\Statement\Filter\DataTypeStatementFilter; +use Wikibase\DataModel\Services\Statement\Filter\NullStatementFilter; +use Wikibase\DataModel\Services\Statement\Filter\PropertySetStatementFilter; +use Wikibase\DataModel\Services\Statement\Grouper\FilteringStatementGrouper; +use Wikibase\DataModel\Services\Statement\Grouper\NullStatementGrouper; +use Wikibase\DataModel\Services\Statement\Grouper\StatementGrouper; +use Wikibase\DataModel\Statement\StatementFilter; + +/** + * Factory for a StatementGrouper. The grouper is instantiated based on a specification array that + * has the following form: + * + * array( + * 'item' => array( + * 'statements' => null, + * 'example' => array( + * 'type' => 'propertySet', + * 'propertyIds' => array( 'P1' ), + * ), + * 'identifiers' => array( + * 'type' => 'dataType', + * 'dataTypes' => array( 'identifier' ), + * ), + * ), + * 'property' => array( + * ), + * ), + * + * @since 0.5 + * + * @license GNU GPL v2+ + * @author Daniel Kinzler + * @author Thiemo Mättig + */ +class StatementGrouperBuilder { + + /** + * @var array[] + */ + private $specifications; + + /** + * @var PropertyDataTypeLookup + */ + private $dataTypeLookup; + + /** + * @param array[] $specifications See the class level documentation for details. + * @param PropertyDataTypeLookup $dataTypeLookup + */ + public function __construct( array $specifications, PropertyDataTypeLookup $dataTypeLookup ) { + $this->specifications = $specifications; + $this->dataTypeLookup = $dataTypeLookup; + } + + /** + * @throws InvalidArgumentException + * @return StatementGrouper + */ + public function getStatementGrouper() { + $groupers = array(); + + foreach ( $this->specifications as $entityType => $filterSpecs ) { + $groupers[$entityType] = $filterSpecs === null + ? new NullStatementGrouper() + : $this->newFilteringStatementGrouper( $filterSpecs ); + } + + return new DispatchingEntityTypeStatementGrouper( $groupers ); + } + + /** + * @param array[] $filterSpecs + * + * @throws InvalidArgumentException + * @return FilteringStatementGrouper + */ + private function newFilteringStatementGrouper( array $filterSpecs ) { + $filters = array(); + + foreach ( $filterSpecs as $groupIdentifier => $spec ) { + $filters[$groupIdentifier] = $spec === null + ? null + : $this->newStatementFilter( $spec ); + } + + return new FilteringStatementGrouper( $filters ); + } + + /** + * @param array $spec + * + * @throws InvalidArgumentException + * @return StatementFilter + */ + private function newStatementFilter( array $spec ) { + $this->requireField( $spec, 'type' ); + + switch ( $spec['type'] ) { + case null: + return new NullStatementFilter(); + case 'dataType': + $this->requireField( $spec, 'dataTypes' ); + return new DataTypeStatementFilter( $this->dataTypeLookup, $spec['dataTypes'] ); + case 'propertySet': + $this->requireField( $spec, 'propertyIds' ); + return new PropertySetStatementFilter( $spec['propertyIds'] ); + // Be aware that this switch statement is a possible violation of the open-closed + // principle. When the number of filters grows, please try to extract this in a way that + // it can be injected. + } + + throw new InvalidArgumentException( 'Unknown filter type: ' . $spec['type'] ); + } + + /** + * @param array $spec + * @param string $field + * + * @throws InvalidArgumentException + */ + private function requireField( array $spec, $field ) { + if ( !array_key_exists( $field, $spec ) ) { + throw new InvalidArgumentException( + "Statement group configuration misses required field '$field'" + ); + } + } + +} diff --git a/extensions/Wikibase/repo/includes/StatementGrouperFactory.php b/extensions/Wikibase/repo/includes/StatementGrouperFactory.php deleted file mode 100644 index 2e614a6..0000000 --- a/extensions/Wikibase/repo/includes/StatementGrouperFactory.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php - -namespace Wikibase\Repo; - -use Wikibase\DataModel\Services\Statement\Grouper\NullStatementGrouper; -use Wikibase\DataModel\Services\Statement\Grouper\StatementGrouper; - -/** - * Factory for StatementGrouper instances for different entity types. - * - * @since 0.5 - * - * @license GNU GPL v2+ - * @author Daniel Kinzler - */ -class StatementGrouperFactory { - - /** - * @param string $entityType - * - * @return StatementGrouper - */ - public function getStatementGrouper( $entityType ) { - // TODO: Group statements into actual sections, including an identifiers section. - return new NullStatementGrouper(); - } - -} diff --git a/extensions/Wikibase/repo/includes/WikibaseRepo.php b/extensions/Wikibase/repo/includes/WikibaseRepo.php index 64ac2bd..90073f1 100644 --- a/extensions/Wikibase/repo/includes/WikibaseRepo.php +++ b/extensions/Wikibase/repo/includes/WikibaseRepo.php @@ -18,6 +18,7 @@ use ValueFormatters\FormatterOptions; use ValueFormatters\ValueFormatter; use Wikibase\DataModel\Entity\PropertyId; +use Wikibase\DataModel\Services\Statement\Grouper\FilteringStatementGrouper; use Wikibase\Lib\DataTypeDefinitions; use Wikibase\ChangeOp\ChangeOpFactoryProvider; use Wikibase\DataModel\DeserializerFactory; @@ -1310,11 +1311,18 @@ */ public function getEntityParserOutputGeneratorFactory() { $templateFactory = TemplateFactory::getDefaultInstance(); + $dataTypeLookup = $this->getPropertyDataTypeLookup(); + + $statementGrouperBuilder = new StatementGrouperBuilder( + $this->settings->getSetting( 'statementSections' ), + $dataTypeLookup + ); + $entityViewFactory = new EntityViewFactory( $this->getEntityIdHtmlLinkFormatterFactory(), new EntityIdLabelFormatterFactory(), $this->getHtmlSnakFormatterFactory(), - new StatementGrouperFactory(), + $statementGrouperBuilder->getStatementGrouper(), $this->getSiteStore(), $this->getDataTypeFactory(), $templateFactory, @@ -1335,7 +1343,7 @@ $this->getLanguageFallbackChainFactory(), $templateFactory, $entityDataFormatProvider, - $this->getPropertyDataTypeLookup(), + $dataTypeLookup, $this->getLocalEntityUriParser(), $this->settings->getSetting( 'preferredGeoDataProperties' ), $this->settings->getSetting( 'preferredPageImagesProperties' ), diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/DispatchingEntityTypeStatementGrouperTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/DispatchingEntityTypeStatementGrouperTest.php new file mode 100644 index 0000000..d4db3ac --- /dev/null +++ b/extensions/Wikibase/repo/tests/phpunit/includes/DispatchingEntityTypeStatementGrouperTest.php @@ -0,0 +1,74 @@ +<?php + +namespace Wikibase\Test; + +use PHPUnit_Framework_TestCase; +use Wikibase\DataModel\Services\Statement\Grouper\StatementGrouper; +use Wikibase\DataModel\Snak\PropertyNoValueSnak; +use Wikibase\DataModel\Statement\StatementList; +use Wikibase\Repo\DispatchingEntityTypeStatementGrouper; + +/** + * @covers Wikibase\Repo\DispatchingEntityTypeStatementGrouper + * + * @group Wikibase + * + * @licence GNU GPL v2+ + * @author Thiemo Mättig + */ +class DispatchingEntityTypeStatementGrouperTest extends PHPUnit_Framework_TestCase { + + /** + * @param int $count + * + * @return StatementGrouper + */ + private function newGrouper( $count ) { + $grouper = $this->getMock( + 'Wikibase\DataModel\Services\Statement\Grouper\StatementGrouper' + ); + + $grouper->expects( $this->exactly( $count ) ) + ->method( 'groupStatements' ); + + return $grouper; + } + + /** + * @dataProvider invalidConstructorArgumentProvider + */ + public function testInvalidConstructorArgument( array $groupers ) { + $this->setExpectedException( 'InvalidArgumentException' ); + new DispatchingEntityTypeStatementGrouper( $groupers ); + } + + public function invalidConstructorArgumentProvider() { + return array( + array( array( $this->newGrouper( 0 ) ) ), + array( array( 'item' => 'invalid' ) ), + ); + } + + public function testFallsBackToNullGrouper() { + $statements = new StatementList(); + $statements->addNewStatement( new PropertyNoValueSnak( 1 ), null, null, 'Q1$' ); + + $grouper = new DispatchingEntityTypeStatementGrouper( array() ); + $groups = $grouper->groupStatements( $statements ); + + $this->assertSame( array( 'statements' => $statements ), $groups ); + } + + public function testUsesFirstStatementsGuid() { + $statements = new StatementList(); + $statements->addNewStatement( new PropertyNoValueSnak( 1 ), null, null, 'Q1$' ); + $statements->addNewStatement( new PropertyNoValueSnak( 1 ), null, null, 'P1$' ); + + $grouper = new DispatchingEntityTypeStatementGrouper( array( + 'item' => $this->newGrouper( 1 ), + 'property' => $this->newGrouper( 0 ), + ) ); + $grouper->groupStatements( $statements ); + } + +} diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/StatementGrouperBuilderTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/StatementGrouperBuilderTest.php new file mode 100644 index 0000000..bfa54f5 --- /dev/null +++ b/extensions/Wikibase/repo/tests/phpunit/includes/StatementGrouperBuilderTest.php @@ -0,0 +1,157 @@ +<?php + +namespace Wikibase\Test; + +use PHPUnit_Framework_TestCase; +use Wikibase\DataModel\Snak\PropertyNoValueSnak; +use Wikibase\DataModel\Statement\StatementList; +use Wikibase\Repo\StatementGrouperBuilder; + +/** + * @covers Wikibase\Repo\StatementGrouperBuilder + * + * @group Wikibase + * + * @licence GNU GPL v2+ + * @author Thiemo Mättig + */ +class StatementGrouperBuilderTest extends PHPUnit_Framework_TestCase { + + /** + * @param array[] $specifications + * + * @return StatementGrouperBuilder + */ + private function newInstance( array $specifications ) { + $lookup = $this->getMock( 'Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup' ); + + $lookup->expects( $this->any() ) + ->method( 'getDataTypeIdForProperty' ) + ->will( $this->returnValue( true ) ); + + return new StatementGrouperBuilder( $specifications, $lookup ); + } + + /** + * @return StatementList + */ + private function newStatementList() { + $statements = new StatementList(); + $statements->addNewStatement( new PropertyNoValueSnak( 1 ), null, null, 'Q1$' ); + return $statements; + } + + public function testAcceptsEmptyArray() { + $builder = $this->newInstance( array() ); + $grouper = $builder->getStatementGrouper(); + $this->assertInstanceOf( 'Wikibase\Repo\DispatchingEntityTypeStatementGrouper', $grouper ); + } + + public function testAcceptsNullGrouper() { + $statements = $this->newStatementList(); + + $builder = $this->newInstance( array( + 'item' => null, + ) ); + $grouper = $builder->getStatementGrouper(); + $groups = $grouper->groupStatements( $statements ); + + $this->assertSame( array( 'statements' => $statements ), $groups ); + } + + public function testAcceptsDefaultFilter() { + $statements = $this->newStatementList(); + + $builder = $this->newInstance( array( + 'item' => array( + 'default' => null, + ) + ) ); + $grouper = $builder->getStatementGrouper(); + $groups = $grouper->groupStatements( $statements ); + + $this->assertEquals( array( 'default' => $statements ), $groups ); + } + + public function testAcceptsNullFilter() { + $statements = $this->newStatementList(); + + $builder = $this->newInstance( array( + 'item' => array( + 'custom' => array( 'type' => null ), + ) + ) ); + $grouper = $builder->getStatementGrouper(); + $groups = $grouper->groupStatements( $statements ); + + $this->assertEquals( array( + 'custom' => $statements, + 'statements' => new StatementList(), + ), $groups ); + } + + public function testIncompleteDataTypeFilter() { + $builder = $this->newInstance( array( + 'item' => array( + 'custom' => array( 'type' => 'dataType' ), + ) + ) ); + $this->setExpectedException( 'InvalidArgumentException' ); + $builder->getStatementGrouper(); + } + + public function testDataTypeFilter() { + $statements = $this->newStatementList(); + + $builder = $this->newInstance( array( + 'item' => array( + 'custom' => array( 'type' => 'dataType', 'dataTypes' => array( 'string' ) ), + ) + ) ); + $grouper = $builder->getStatementGrouper(); + $groups = $grouper->groupStatements( $statements ); + + $this->assertEquals( array( + 'custom' => $statements, + 'statements' => new StatementList(), + ), $groups ); + } + + public function testIncompletePropertySetFilter() { + $builder = $this->newInstance( array( + 'item' => array( + 'custom' => array( 'type' => 'propertySet' ), + ) + ) ); + $this->setExpectedException( 'InvalidArgumentException' ); + $builder->getStatementGrouper(); + } + + public function testPropertySetFilter() { + $statements = $this->newStatementList(); + + $builder = $this->newInstance( array( + 'item' => array( + 'custom' => array( 'type' => 'propertySet', 'propertyIds' => array( 'P1' ) ), + ) + ) ); + $grouper = $builder->getStatementGrouper(); + $groups = $grouper->groupStatements( $statements ); + + $this->assertEquals( array( + 'custom' => $statements, + 'statements' => new StatementList(), + ), $groups ); + } + + public function testInvalidFilterType() { + $builder = $this->newInstance( array( + 'item' => array( + 'custom' => array( 'type' => 'invalid' ), + ) + ) ); + $this->setExpectedException( 'InvalidArgumentException' ); + $builder->getStatementGrouper(); + } + +} diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/Validators/LabelUniquenessValidatorTest.php b/extensions/Wikibase/repo/tests/phpunit/includes/Validators/LabelUniquenessValidatorTest.php index 7c3f2b8..6df210f 100644 --- a/extensions/Wikibase/repo/tests/phpunit/includes/Validators/LabelUniquenessValidatorTest.php +++ b/extensions/Wikibase/repo/tests/phpunit/includes/Validators/LabelUniquenessValidatorTest.php @@ -111,11 +111,11 @@ new AliasGroupList() ); - $dupeAliasFingerprint = new Fingerprint( - new TermList( array( new Term( 'de', 'good' ) ) ), - new TermList(), - new AliasGroupList( array( new AliasGroup( 'de', array( 'DUPE' ) ) ) ) - ); +// $dupeAliasFingerprint = new Fingerprint( +// new TermList( array( new Term( 'de', 'good' ) ) ), +// new TermList(), +// new AliasGroupList( array( new AliasGroup( 'de', array( 'DUPE' ) ) ) ) +// ); return array( 'conflicting label' => array( $dupeLabelFingerprint, 'label-conflict' ), diff --git a/extensions/Wikibase/view/resources/wikibase/wikibase.css b/extensions/Wikibase/view/resources/wikibase/wikibase.css index 54bccd4..01a5753 100644 --- a/extensions/Wikibase/view/resources/wikibase/wikibase.css +++ b/extensions/Wikibase/view/resources/wikibase/wikibase.css @@ -43,10 +43,6 @@ color: inherit; } -.wb-entitypage .wikibase-wbtooltip-tip .tipsy-arrow { - display: none; -} - /* Messages displayed while some action is performed (e.g. an API call) */ .wb-actionmsg { font-style: italic; diff --git a/extensions/Wikibase/view/src/EntityViewFactory.php b/extensions/Wikibase/view/src/EntityViewFactory.php index a78ed1a..12c9d99 100644 --- a/extensions/Wikibase/view/src/EntityViewFactory.php +++ b/extensions/Wikibase/view/src/EntityViewFactory.php @@ -7,10 +7,10 @@ use Language; use SiteStore; use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup; +use Wikibase\DataModel\Services\Statement\Grouper\StatementGrouper; use Wikibase\LanguageFallbackChain; use Wikibase\Lib\LanguageNameLookup; use Wikibase\Lib\SnakFormatter; -use Wikibase\Repo\StatementGrouperFactory; use Wikibase\View\Template\TemplateFactory; /** @@ -38,9 +38,9 @@ private $plainTextIdFormatterFactory; /** - * @var StatementGrouperFactory + * @var StatementGrouper */ - private $statementGrouperFactory; + private $statementGrouper; /** * @var SiteStore @@ -81,7 +81,7 @@ * @param EntityIdFormatterFactory $htmlIdFormatterFactory * @param EntityIdFormatterFactory $plainTextIdFormatterFactory * @param HtmlSnakFormatterFactory $htmlSnakFormatterFactory - * @param StatementGrouperFactory $statementGrouperFactory, + * @param StatementGrouper $statementGrouper * @param SiteStore $siteStore * @param DataTypeFactory $dataTypeFactory * @param TemplateFactory $templateFactory @@ -96,7 +96,7 @@ EntityIdFormatterFactory $htmlIdFormatterFactory, EntityIdFormatterFactory $plainTextIdFormatterFactory, HtmlSnakFormatterFactory $htmlSnakFormatterFactory, - StatementGrouperFactory $statementGrouperFactory, + StatementGrouper $statementGrouper, SiteStore $siteStore, DataTypeFactory $dataTypeFactory, TemplateFactory $templateFactory, @@ -114,7 +114,7 @@ $this->htmlIdFormatterFactory = $htmlIdFormatterFactory; $this->plainTextIdFormatterFactory = $plainTextIdFormatterFactory; $this->htmlSnakFormatterFactory = $htmlSnakFormatterFactory; - $this->statementGrouperFactory = $statementGrouperFactory; + $this->statementGrouper = $statementGrouper; $this->siteStore = $siteStore; $this->dataTypeFactory = $dataTypeFactory; $this->templateFactory = $templateFactory; @@ -165,8 +165,6 @@ ) { $entityTermsView = $this->newEntityTermsView( $languageCode, $editSectionGenerator ); - $statementGrouper = $this->statementGrouperFactory->getStatementGrouper( $entityType ); - $statementSectionsView = $this->newStatementSectionsView( $languageCode, $fallbackChain, @@ -193,7 +191,7 @@ return new ItemView( $this->templateFactory, $entityTermsView, - $statementGrouper, + $this->statementGrouper, $statementSectionsView, $language, $siteLinksView, @@ -203,7 +201,7 @@ return new PropertyView( $this->templateFactory, $entityTermsView, - $statementGrouper, + $this->statementGrouper, $statementSectionsView, $this->dataTypeFactory, $language diff --git a/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php b/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php index cdec272..611eea4 100644 --- a/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php +++ b/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php @@ -5,9 +5,9 @@ use DataTypes\DataTypeFactory; use PHPUnit_Framework_TestCase; use SiteList; +use Wikibase\DataModel\Services\Statement\Grouper\NullStatementGrouper; use Wikibase\LanguageFallbackChain; use Wikibase\Lib\SnakFormatter; -use Wikibase\Repo\StatementGrouperFactory; use Wikibase\View\EntityIdFormatterFactory; use Wikibase\View\EntityViewFactory; use Wikibase\View\Template\TemplateFactory; @@ -53,7 +53,7 @@ $htmlFactory ?: $this->getEntityIdFormatterFactory( SnakFormatter::FORMAT_HTML ), $plainFactory ?: $this->getEntityIdFormatterFactory( SnakFormatter::FORMAT_PLAIN ), $this->getSnakFormatterFactory(), - new StatementGrouperFactory(), + new NullStatementGrouper(), $this->getSiteStore(), new DataTypeFactory( array() ), $templateFactory, diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 0dd9590..66941c9 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -924,6 +924,7 @@ 'Wikibase\\Repo\\Diff\\DifferencesSnakVisualizer' => $baseDir . '/extensions/Wikibase/repo/includes/Diff/DifferencesSnakVisualizer.php', 'Wikibase\\Repo\\Diff\\EntityContentDiffView' => $baseDir . '/extensions/Wikibase/repo/includes/Diff/EntityContentDiffView.php', 'Wikibase\\Repo\\Diff\\EntityDiffVisualizer' => $baseDir . '/extensions/Wikibase/repo/includes/Diff/EntityDiffVisualizer.php', + 'Wikibase\\Repo\\DispatchingEntityTypeStatementGrouper' => $baseDir . '/extensions/Wikibase/repo/includes/DispatchingEntityTypeStatementGrouper.php', 'Wikibase\\Repo\\Disposable' => $baseDir . '/extensions/Wikibase/repo/includes/Disposable.php', 'Wikibase\\Repo\\EntityIdHtmlLinkFormatterFactory' => $baseDir . '/extensions/Wikibase/repo/includes/EntityIdHtmlLinkFormatterFactory.php', 'Wikibase\\Repo\\EntityIdLabelFormatterFactory' => $baseDir . '/extensions/Wikibase/repo/includes/EntityIdLabelFormatterFactory.php', @@ -1020,7 +1021,7 @@ 'Wikibase\\Repo\\Specials\\SpecialWikibasePage' => $baseDir . '/extensions/Wikibase/repo/includes/specials/SpecialWikibasePage.php', 'Wikibase\\Repo\\Specials\\SpecialWikibaseQueryPage' => $baseDir . '/extensions/Wikibase/repo/includes/specials/SpecialWikibaseQueryPage.php', 'Wikibase\\Repo\\Specials\\SpecialWikibaseRepoPage' => $baseDir . '/extensions/Wikibase/repo/includes/specials/SpecialWikibaseRepoPage.php', - 'Wikibase\\Repo\\StatementGrouperFactory' => $baseDir . '/extensions/Wikibase/repo/includes/StatementGrouperFactory.php', + 'Wikibase\\Repo\\StatementGrouperBuilder' => $baseDir . '/extensions/Wikibase/repo/includes/StatementGrouperBuilder.php', 'Wikibase\\Repo\\Store\\ChangeStore' => $baseDir . '/extensions/Wikibase/repo/includes/store/ChangeStore.php', 'Wikibase\\Repo\\Store\\DispatchingEntityStoreWatcher' => $baseDir . '/extensions/Wikibase/repo/includes/store/DispatchingEntityStoreWatcher.php', 'Wikibase\\Repo\\Store\\EntityIdPager' => $baseDir . '/extensions/Wikibase/repo/includes/store/EntityIdPager.php', @@ -1183,6 +1184,7 @@ 'Wikibase\\Test\\DiffOpValueFormatterTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/Diff/DiffOpValueFormatterTest.php', 'Wikibase\\Test\\DiffViewTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/Diff/DiffViewTest.php', 'Wikibase\\Test\\DifferencesSnakVisualizerTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/Diff/DifferencesSnakVisualizerTest.php', + 'Wikibase\\Test\\DispatchingEntityTypeStatementGrouperTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/DispatchingEntityTypeStatementGrouperTest.php', 'Wikibase\\Test\\DispatchingExceptionLocalizerTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/Localizer/DispatchingExceptionLocalizerTest.php', 'Wikibase\\Test\\DualSubscriptionLookupTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/store/DualSubscriptionLookupTest.php', 'Wikibase\\Test\\DumpJsonTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/maintenance/dumpJsonTest.php', @@ -1399,6 +1401,7 @@ 'Wikibase\\Test\\SqlSiteLinkConflictLookupTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/SqlSiteLinkConflictLookupTest.php', 'Wikibase\\Test\\SqlSubscriptionLookupTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/SqlSubscriptionLookupTest.php', 'Wikibase\\Test\\StatementChangeOpFactoryTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/StatementChangeOpFactoryTest.php', + 'Wikibase\\Test\\StatementGrouperBuilderTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/StatementGrouperBuilderTest.php', 'Wikibase\\Test\\StatementRankSerializerTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/StatementRankSerializerTest.php', 'Wikibase\\Test\\StoreTest' => $baseDir . '/extensions/Wikibase/repo/tests/phpunit/includes/store/StoreTest.php', 'Wikibase\\Test\\StringNormalizerTest' => $baseDir . '/extensions/Wikibase/lib/tests/phpunit/StringNormalizerTest.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 2bb0b50..01f383b 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1236,12 +1236,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "cb21dcb4e8691ee3aa4c3c40b7832e48d2286516" + "reference": "4a50981973f59459fb214cf5c99a216d13d749a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/cb21dcb4e8691ee3aa4c3c40b7832e48d2286516", - "reference": "cb21dcb4e8691ee3aa4c3c40b7832e48d2286516", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/4a50981973f59459fb214cf5c99a216d13d749a8", + "reference": "4a50981973f59459fb214cf5c99a216d13d749a8", "shasum": "" }, "require": { @@ -1273,7 +1273,7 @@ "jakub-onderka/php-parallel-lint": "0.9", "mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0" }, - "time": "2015-12-09 22:19:02", + "time": "2015-12-10 22:02:00", "type": "mediawiki-extension", "installation-source": "dist", "autoload": { -- To view, visit https://gerrit.wikimedia.org/r/258431 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I373391fe7aa79896a38f9adda3c9847a14c0841f Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikidata Gerrit-Branch: master Gerrit-Owner: WikidataBuilder <wikidata-servi...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits