Compare commits

...

31 Commits

Author SHA1 Message Date
Guy Sartorelli eacb02c297
Merge branch '2.4' into 2 2023-08-30 10:23:04 +12:00
Guy Sartorelli afe1cc5da0
ENH Update translations (#201) 2023-08-21 13:19:54 +12:00
Guy Sartorelli f2b92e8f83
Merge branch '2.4' into 2 2023-04-26 12:46:00 +12:00
Guy Sartorelli 2b53f5095c
MNT Revert erroneous dependency changes (#198) 2023-03-28 17:02:24 +13:00
Maxime Rainville d27f656e97
Merge pull request #197 from creative-commoners/pulls/2/dispatch-ci
MNT Use gha-dispatch-ci
2023-03-23 14:19:31 +13:00
Steve Boyd b615184c54 MNT Use gha-dispatch-ci 2023-03-21 13:42:53 +13:00
Guy Sartorelli a9a20ab1c0
MNT Update development dependencies 2023-03-10 16:32:47 +13:00
Guy Sartorelli 8ad0537473
MNT Update release dependencies 2023-03-10 16:32:44 +13:00
Guy Sartorelli 02d5a17e1f
MNT Update development dependencies 2023-03-10 12:21:29 +13:00
Guy Sartorelli 53e7646700
Merge pull request #196 from creative-commoners/pulls/2/tx-1678080282
ENH Update translations
2023-03-08 10:32:31 +13:00
Steve Boyd 812f3dc282 ENH Update translations 2023-03-06 18:24:42 +13:00
Steve Boyd 9934adecdb Merge branch '2.3' into 2 2022-08-02 19:02:13 +12:00
Steve Boyd 08cdad1290 Merge branch '2.2' into 2.3 2022-08-02 19:02:09 +12:00
Guy Sartorelli 08554e7882
Merge pull request #192 from creative-commoners/pulls/2.2/standardise-modules
MNT Standardise modules
2022-08-02 15:50:59 +12:00
Steve Boyd 57b1d87577 MNT Standardise modules 2022-08-01 16:23:55 +12:00
Steve Boyd 3fd8120b74 Merge branch '2.3' into 2 2022-07-25 11:50:19 +12:00
Steve Boyd d907c77ed6 Merge branch '2.2' into 2.3 2022-07-25 11:50:15 +12:00
Guy Sartorelli 65ef1bbc50
Merge pull request #191 from creative-commoners/pulls/2.2/module-standards
MNT Use GitHub Actions CI
2022-07-15 11:46:04 +12:00
Steve Boyd d16e4770da MNT Use GitHub Actions CI 2022-07-05 19:10:19 +12:00
Steve Boyd 3685869917 Merge branch '2.3' into 2 2022-05-10 22:11:42 +12:00
Steve Boyd 3d89a29628 Update translations 2022-05-04 13:29:41 +12:00
Guy Sartorelli d78326987c
Merge pull request #189 from creative-commoners/pulls/2/php81
ENH PHP 8.1 compatibility
2022-04-26 17:58:46 +12:00
Steve Boyd 51d29b3d5a ENH PHP 8.1 compatibility 2022-04-13 13:54:56 +12:00
Maxime Rainville 5aca443a7c
Merge pull request #187 from creative-commoners/pulls/2/sapphire-test-nine
API phpunit 9 support
2021-11-10 13:19:21 +13:00
Steve Boyd 2b9536e5ae
DEP Use phpunit ^9.5 2021-11-10 10:47:55 +13:00
Steve Boyd a08aa08f4d API phpunit 9 support 2021-10-21 13:14:57 +13:00
Maxime Rainville 6c2b654f19 Merge branch '2.1' into 2 2021-06-02 15:33:46 +12:00
Maxime Rainville 6e163beb44
Merge pull request #186 from creative-commoners/pulls/2.1/revert-translations
FIX Add namespaces back to translation files
2021-06-01 14:25:13 +12:00
Steve Boyd d4ae7ff9ab FIX Add namespaces back to translation files 2021-05-31 10:57:28 +12:00
Steve Boyd 92f90fbea5 Merge branch '2.1' into 2 2021-05-21 14:32:28 +12:00
Maxime Rainville f759a8b56b Update translations 2021-05-17 15:09:54 +12:00
30 changed files with 230 additions and 118 deletions

11
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,11 @@
name: CI
on:
push:
pull_request:
workflow_dispatch:
jobs:
ci:
name: CI
uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1

16
.github/workflows/dispatch-ci.yml vendored Normal file
View File

@ -0,0 +1,16 @@
name: Dispatch CI
on:
# At 1:00 PM UTC, only on Saturday and Sunday
schedule:
- cron: '0 13 * * 6,0'
jobs:
dispatch-ci:
name: Dispatch CI
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
runs-on: ubuntu-latest
steps:
- name: Dispatch CI
uses: silverstripe/gha-dispatch-ci@v1

17
.github/workflows/keepalive.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: Keepalive
on:
workflow_dispatch:
# The 4th of every month at 10:50am UTC
schedule:
- cron: '50 10 4 * *'
jobs:
keepalive:
name: Keepalive
# Only run cron on the silverstripe account
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
runs-on: ubuntu-latest
steps:
- name: Keepalive
uses: silverstripe/gha-keepalive@v1

View File

@ -1,15 +0,0 @@
inherit: true
build:
nodes:
analysis:
tests:
override: [php-scrutinizer-run]
checks:
php:
code_rating: true
duplication: true
filter:
paths: [src/*, tests/*]

View File

@ -1,4 +0,0 @@
version: ~> 1.0
import:
- silverstripe/silverstripe-travis-shared:config/provision/standard-jobs-range.yml

View File

@ -1,8 +1,9 @@
[main]
host = https://www.transifex.com
[silverstripe-widgets.master]
[o:silverstripe:p:silverstripe-widgets:r:master]
file_filter = lang/<lang>.yml
source_file = lang/en.yml
source_lang = en
type = YML
type = YML

View File

@ -1,9 +1,7 @@
# Widgets Module
[![Build Status](https://api.travis-ci.com/silverstripe/silverstripe-widgets.svg?branch=2)](https://travis-ci.com/silverstripe/silverstripe-widgets)
[![SilverStripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)
[![Code Quality](http://img.shields.io/scrutinizer/g/silverstripe/silverstripe-widgets.svg)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-widgets)
[![Code Coverage](https://img.shields.io/codecov/c/github/silverstripe/silverstripe-widgets.svg)](https://codecov.io/gh/silverstripe/silverstripe-widgets)
[![CI](https://github.com/silverstripe/silverstripe-widgets/actions/workflows/ci.yml/badge.svg)](https://github.com/silverstripe/silverstripe-widgets/actions/workflows/ci.yml)
[![Silverstripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)
## Overview
@ -12,9 +10,9 @@ the sidebar of your website.
## Requirements
* SilverStripe 4.0
* Silverstripe 4.0
**Note:** this version is compatible with SilverStripe 4. For SilverStripe 3, please see [the 1.x release line](https://github.com/silverstripe/silverstripe-widgets/tree/1.3).
**Note:** this version is compatible with Silverstripe 4. For Silverstripe 3, please see [the 1.x release line](https://github.com/silverstripe/silverstripe-widgets/tree/1.3).
### Installation
@ -49,7 +47,7 @@ Here's an example on how to just add widgets to a `MyPage` type, and call it
By following the "Packaging" rules below, widgets are easily installed. This example uses the Blog module which by default has widgets already enabled.
* Install the [blog module](https://github.com/silverstripe/silverstripe-blog/).
* Download the widget and unzip to the main folder of your SilverStripe website, e.g. to `/widget_<widget-name>/`. The folder
* Download the widget and unzip to the main folder of your Silverstripe website, e.g. to `/widget_<widget-name>/`. The folder
will contain a few files, which generally won't need editing or reading.
* Run `http://my-website.com/dev/build`
* Login to the CMS and go to the 'Blog' page. Choose the "widgets" tab and click the new widget to activate it.
@ -204,10 +202,9 @@ class FlickrWidget extends Widget
<% end_control %>
```
## Releasing a widget
Follow the [standard procedures defined for releasing a SilverStripe module](https://docs.silverstripe.org/en/4/developer_guides/extending/how_tos/publish_a_module).
Follow the [standard procedures defined for releasing a Silverstripe module](https://docs.silverstripe.org/en/4/developer_guides/extending/how_tos/publish_a_module).
Here is a composer template you can use.
@ -255,7 +252,7 @@ You need to finish off / change:
To call a single Widget in a page - without adding a widget area in the CMS for you to add / delete the widgets, you can
define a merge variable in the Page Controller and include it in the Page Template.
This example creates an RSSWidget with the SilverStripe blog feed.
This example creates an RSSWidget with the Silverstripe blog feed.
```php
public function SilverStripeFeed()

View File

@ -15,12 +15,12 @@
],
"require": {
"silverstripe/vendor-plugin": "^1.0",
"silverstripe/framework": "^4.0",
"silverstripe/framework": "^4.10",
"silverstripe/cms": "^4.0",
"silverstripe/versioned": "^1.0"
},
"require-dev": {
"sminnee/phpunit": "^5.7",
"phpunit/phpunit": "^9.5",
"squizlabs/php_codesniffer": "^3.0"
},
"extra": {

View File

@ -1,16 +1,16 @@
ar:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: 'تطبيقات مصغرة'
SINGULARNAME: 'تطبيق مصغر'
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'مساحات التطبيقات المصغرة'
SINGULARNAME: 'مساحة التطبيقات المصغرة'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'التطبيقات المصغرة المتاحة'
AVAILWIDGETS: 'اضغط على عنوان تطبيق مصغر بالأسفل لاستخدامه بهذه الصفحة.'
INUSE: 'التطبيقات المصغرة المستخدمة حاليا'
NOAVAIL: 'لا توجد حاليا أية تطبيقات مصغرة متاحة.'
TOSORT: 'لترتيب التطبيقات المصغرة المستخدمة حاليا فى هذه الصفحة, اسحبها لأعلى و لأسفل.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: 'تطبيقات مصغرة'
SINGULARNAME: 'تطبيق مصغر'
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'مساحات التطبيقات المصغرة'
SINGULARNAME: 'مساحة التطبيقات المصغرة'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'اضغط لإضافة هذا التطبيق المصغر'
WidgetEditor_ss:

View File

@ -1,16 +1,16 @@
de:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgets
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: Widgetbereiche
SINGULARNAME: Widgetbereich
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Vorhandene Widgets'
AVAILWIDGETS: 'Klicke den Widget Titel, um es zu benutzen.'
INUSE: 'Benutzte Widgets'
NOAVAIL: 'Es sind derzeit keine Widgets verfügbar.'
TOSORT: 'Um die Widgets auf dieser Seite zu sortieren, ziehe sie nach oben oder unten.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgets
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: Widgetbereiche
SINGULARNAME: Widgetbereich
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Klicke um dieses Widget hinzuzufügen'
WidgetEditor_ss:

View File

@ -1,16 +1,24 @@
eo:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Fenestraĵoj
SINGULARNAME: Fenestraĵo
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Fenestraĵaj zonoj'
SINGULARNAME: 'Fenestraĵa zono'
SilverStripe\Widgets\Extensions\WidgetPageExtension:
INHERITSIDEBAR: 'Heredi flankpanelon el patro'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Disponeblaj fenestraĵoj'
AVAILWIDGETS: 'Alklaku sube titolon de fenestraĵo por uzi ĝin en ĉi tiu paĝo.'
INUSE: 'Fenestraĵoj aktuale uzataj'
NOAVAIL: 'Aktuale mankas disponeblaj fenestraĵoj.'
TOSORT: 'Por ordigi aktuale uzatajn fenestraĵojn en ĉi tiu paĝo, ŝovu ilin supren kaj malsupren.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Fenestraĵoj
PLURALS:
one: 'Unu fenestraĵo'
other: '{count} fenestraĵoj'
SINGULARNAME: Fenestraĵo
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Fenestraĵaj zonoj'
PLURALS:
one: 'Unu fenestraĵa zono'
other: '{count} fenestraĵaj zonoj'
SINGULARNAME: 'Fenestraĵa zono'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Alklaku por aldoni la fenestraĵon'
WidgetEditor_ss:

View File

@ -1,16 +1,16 @@
fa_IR:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: 'ویجت ها'
SINGULARNAME: ویجت
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'محیط ویجت ها'
SINGULARNAME: 'محیط ویجت'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'ویجت های موجود'
AVAILWIDGETS: 'بر روی عنوان یک ویجت در پایین کلیک کنید تا آن را در این صفحه بکار بگیرید.'
INUSE: 'ویجت هایی که در حال حاضر استفاده می شوند'
NOAVAIL: 'در حال حاضر هیچ ویجتی موجود نیست.'
TOSORT: 'برای مرتب سازی ویجت های این صفحه، آنها را بالا و پایین بکشید.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: 'ویجت ها'
SINGULARNAME: ویجت
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'محیط ویجت ها'
SINGULARNAME: 'محیط ویجت'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'برای افزودن این ویجت کلیک کنید'
WidgetEditor_ss:

View File

@ -1,16 +1,16 @@
fi:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Vimpaimet
SINGULARNAME: Vimpain
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Vimpain alueet'
SINGULARNAME: 'Vimpain alue'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Käytettävissä olevat vimpaimet'
AVAILWIDGETS: 'Napsauta vimpaimen otsikkoa alla ottaaksesi se käyttöön tällä sivulla.'
INUSE: 'Käytössä olevat vimpaimet'
NOAVAIL: 'Tällä hetkellä ei vimpaimia tarjolla.'
TOSORT: 'Järjestääksesi käytössä olevat vimpaimet, raahaa ja pudota ne paikoilleen.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Vimpaimet
SINGULARNAME: Vimpain
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Vimpain alueet'
SINGULARNAME: 'Vimpain alue'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Napsauta lisätäksesi tämä vimpain'
WidgetEditor_ss:

17
lang/fi_FI.yml Normal file
View File

@ -0,0 +1,17 @@
fi_FI:
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Käytettävissä olevat vimpaimet'
AVAILWIDGETS: 'Napsauta vimpaimen otsikkoa alla ottaaksesi se käyttöön tällä sivulla.'
INUSE: 'Käytössä olevat vimpaimet'
NOAVAIL: 'Tällä hetkellä ei vimpaimia tarjolla.'
TOSORT: 'Järjestääksesi käytössä olevat vimpaimet, raahaa ja pudota ne paikoilleen.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Vimpaimet
SINGULARNAME: Vimpain
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Vimpain alueet'
SINGULARNAME: 'Vimpain alue'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Napsauta lisätäksesi tämä vimpain'
WidgetEditor_ss:
DELETE: Poista

View File

@ -1,16 +1,16 @@
hr:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgeti
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Zone widgeta'
SINGULARNAME: 'Zona widgeta'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Dostupni widgeti'
AVAILWIDGETS: 'Kliknite na naziv widgeta ispod za korištenje na ovoj stranici'
INUSE: 'Trenutno korišteni widgeti'
NOAVAIL: 'Trenutno nema dostupnih widgeta.'
TOSORT: 'Za sortiranje trenutno korištenih widgeta na ovoj stranici, rasporedite ih povlačeći gore i dolje.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgeti
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Zone widgeta'
SINGULARNAME: 'Zona widgeta'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Klikni za dodavanje ovog widgeta'
WidgetEditor_ss:

5
lang/id_ID.yml Normal file
View File

@ -0,0 +1,5 @@
id_ID:
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Widget Tersedia'
WidgetEditor_ss:
DELETE: Hapus

17
lang/it.yml Normal file
View File

@ -0,0 +1,17 @@
it:
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Widget Disponibili'
AVAILWIDGETS: 'Clickare sul titolo di un widget per usarlo in questa pagina'
INUSE: 'Widget attualmente in uso'
NOAVAIL: 'Attualmente non ci sono widget disponibili'
TOSORT: 'Per riordinare i widget usati in questa pagina, trascinarli in alto o in basso.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widget
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Aree Widget'
SINGULARNAME: 'Area Widget'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Clickare per aggiungere questo widget'
WidgetEditor_ss:
DELETE: Elimina

View File

@ -1,16 +1,16 @@
it_IT:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgets
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Aree Widget'
SINGULARNAME: 'Area Widget'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Widgets disponibili'
AVAILWIDGETS: 'Clicca sul titolo di un widget qui sotto per usarlo in questa pagina'
INUSE: 'Widgets attualmente utilizzati'
NOAVAIL: 'Non ci sono widgets attualmente disponibili.'
TOSORT: 'Per ordinare i widgets utilizzati in questa pagina, trascinali in alto o in basso.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgets
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Aree Widget'
SINGULARNAME: 'Area Widget'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Clicca per aggiungere questo widget'
WidgetEditor_ss:

View File

@ -5,6 +5,12 @@ nl:
INUSE: 'Huidige gebruikte Widgets'
NOAVAIL: 'Er zijn geen widgets beschikbaar.'
TOSORT: 'Om uw widgets te sorteren op deze pagina, rangschik met drag & drop.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgets
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Widget plaatsen'
SINGULARNAME: 'Widget plaats'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Klik om deze widget toe te voegen'
WidgetEditor_ss:

View File

@ -1,16 +1,16 @@
ru:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Виджеты
SINGULARNAME: Виджет
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Области виджетов'
SINGULARNAME: 'Область виджета'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Доступные виджеты'
AVAILWIDGETS: 'Щелкните заголовок виджета ниже, чтобы использовать его на этой странице.'
INUSE: 'Используемые виджеты'
NOAVAIL: 'В данный момент доступных виджетов нет.'
TOSORT: 'Чтобы расположить используемые на странице виджеты в нужном порядке, перетащите их вверх или вниз.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Виджеты
SINGULARNAME: Виджет
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Области виджетов'
SINGULARNAME: 'Область виджета'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Щелкните, чтобы добавить этот виджет'
WidgetEditor_ss:

View File

@ -1,16 +1,16 @@
sk:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgety
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Oblasti widgetu'
SINGULARNAME: 'Oblasť widgetu'
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Dostupné widgety'
AVAILWIDGETS: 'Kliknite na názov widgetu pre jeho použitie na tejto stránke.'
INUSE: 'Momentálne používané widgety.'
NOAVAIL: 'Momentálne nie sú dostupné žiadne widgety.'
TOSORT: 'Pre zotriedenie momentálne používaných widgetov na tejto stránke, potiahnite ich hore alebo dole.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgety
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Oblasti widgetu'
SINGULARNAME: 'Oblasť widgetu'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Kliknite pre pridanie tohto widgetu'
WidgetEditor_ss:

17
lang/sl.yml Normal file
View File

@ -0,0 +1,17 @@
sl:
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Vtičniki, ki so na voljo'
AVAILWIDGETS: 'Spodaj izberite vtičnik, ki ga želite uporabiti na strani.'
INUSE: 'Vtičniki v uporabi'
NOAVAIL: 'Na voljo ni nobenega vtičnika.'
TOSORT: 'Za razvrstitev vtičnikov na strani jih povlecite na ustrezno mesto. '
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Vtičniki
SINGULARNAME: Vtičnik
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 'Prostori za vtičnike'
SINGULARNAME: 'Prostor za vtičnike'
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Kliknite na ta vtičnik, če ga želite dodati'
WidgetEditor_ss:
DELETE: Odstrani

View File

@ -1,16 +1,16 @@
sv:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgets
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: Widgetområden
SINGULARNAME: Widgetområde
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 'Tillgängliga widgets'
AVAILWIDGETS: 'Klicka på en widget nedan för att använda den på sidan.'
INUSE: 'Använda widgets'
NOAVAIL: 'Inga widgets tillängliga.'
TOSORT: 'För att sortera widgetar på denna sida, dra dem uppåt eller nedåt.'
SilverStripe\Widgets\Model\Widget:
PLURALNAME: Widgets
SINGULARNAME: Widget
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: Widgetområden
SINGULARNAME: Widgetområde
WidgetDescription_ss:
CLICKTOADDWIDGET: 'Klicka för att lägga till denna widget'
WidgetEditor_ss:

View File

@ -1,16 +1,16 @@
zh:
SilverStripe\Widgets\Model\Widget:
PLURALNAME: 小工具
SINGULARNAME: 小工具
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 小工具区域
SINGULARNAME: 小工具区域
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 可用的小工具
AVAILWIDGETS: 点击下方的小工具名称即可在此页上使用。
INUSE: 当前使用的小工具
NOAVAIL: 目前没有可用小工具。
TOSORT: 要对本页当前使用的小工具进行排序,请像上下拖拽。
SilverStripe\Widgets\Model\Widget:
PLURALNAME: 小工具
SINGULARNAME: 小工具
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 小工具区域
SINGULARNAME: 小工具区域
WidgetDescription_ss:
CLICKTOADDWIDGET: 点击添加该小工具
WidgetEditor_ss:

17
lang/zh_CN.yml Normal file
View File

@ -0,0 +1,17 @@
zh_CN:
SilverStripe\Widgets\Forms\WidgetAreaEditor_ss:
AVAILABLE: 有效插件
AVAILWIDGETS: 点击一个插件标题应用在当前页面
INUSE: 当前已使用插件
NOAVAIL: 当前无有效插件
TOSORT: 请上下拖动当前页面的对应插件进行排序
SilverStripe\Widgets\Model\Widget:
PLURALNAME: 插件
SINGULARNAME: 插件
SilverStripe\Widgets\Model\WidgetArea:
PLURALNAME: 插件区域
SINGULARNAME: 插件区域
WidgetDescription_ss:
CLICKTOADDWIDGET: 点击增加该插件
WidgetEditor_ss:
DELETE: 删除

View File

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/silverstripe/cms/tests/bootstrap.php" colors="true">
<testsuite name="Default">
<directory>tests</directory>
</testsuite>
<testsuites>
<testsuite name="Default">
<directory>tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src/</directory>

View File

@ -66,7 +66,7 @@ class WidgetAreaEditor extends FormField
$available = Config::inst()->get($class, 'only_available_in');
if (!empty($available) && is_array($available)) {
if (in_array($this->Name, $available)) {
if (in_array($this->Name, $available ?? [])) {
$widgets->push(singleton($class));
}
} else {
@ -168,12 +168,12 @@ class WidgetAreaEditor extends FormField
if (empty($newWidgetData['Type'])) {
$newWidgetData['Type'] = '';
}
$newWidgetData['Type'] = str_replace('_', '\\', $newWidgetData['Type']);
$newWidgetData['Type'] = str_replace('_', '\\', $newWidgetData['Type'] ?? '');
// create a new object
if (!$widget
&& !empty($newWidgetData['Type'])
&& class_exists($newWidgetData['Type'])
&& class_exists($newWidgetData['Type'] ?? '')
&& is_subclass_of($newWidgetData['Type'], Widget::class)
) {
$widget = Injector::inst()->create($newWidgetData['Type']);

View File

@ -191,7 +191,7 @@ class Widget extends DataObject
if ($value) {
$field->setValue($value);
}
$namefiltered = preg_replace("/([A-Za-z0-9\-_]+)/", "Widget[" . $this->FormID . "][\\1]", $name);
$namefiltered = preg_replace("/([A-Za-z0-9\-_]+)/", "Widget[" . $this->FormID . "][\\1]", $name ?? '');
$field->setName($namefiltered);
$outputFields->push($field);
@ -230,14 +230,14 @@ class Widget extends DataObject
return $this->controller;
}
foreach (array_reverse(ClassInfo::ancestry(get_class($this))) as $widgetClass) {
foreach (array_reverse(ClassInfo::ancestry(get_class($this)) ?? []) as $widgetClass) {
$controllerClass = "{$widgetClass}Controller";
if (class_exists($controllerClass)) {
if (class_exists($controllerClass ?? '')) {
break;
}
}
if (!class_exists($controllerClass)) {
if (!class_exists($controllerClass ?? '')) {
throw new Exception('Could not find controller class for ' . static::class);
}
@ -268,7 +268,7 @@ class Widget extends DataObject
//Look for checkbox fields not present in the data
foreach ($fields as $field) {
if ($field instanceof CheckboxField && !array_key_exists($field->getName(), $data)) {
if ($field instanceof CheckboxField && !array_key_exists($field->getName(), $data ?? [])) {
$field->setValue(false);
$field->saveInto($this);
}

View File

@ -106,7 +106,7 @@ class WidgetController extends Controller
*/
public function Content()
{
return $this->renderWith(array_reverse(ClassInfo::ancestry(get_class($this->widget))));
return $this->renderWith(array_reverse(ClassInfo::ancestry(get_class($this->widget)) ?? []));
}
/**
@ -136,8 +136,8 @@ class WidgetController extends Controller
$leftandmain->doInit();
// Decode if fully qualified - @see Widget::ClassName
$className = str_replace('_', '\\', $this->urlParams['ID']);
if (class_exists($className) && is_subclass_of($className, Widget::class)) {
$className = str_replace('_', '\\', $this->urlParams['ID'] ?? '');
if (class_exists($className ?? '') && is_subclass_of($className, Widget::class)) {
$obj = new $className();
return $obj->EditableSegment();
} else {

View File

@ -15,7 +15,7 @@ class WidgetControllerTest extends FunctionalTest
TestWidget::class,
];
protected function setUp()
protected function setUp(): void
{
parent::setUp();
@ -32,7 +32,7 @@ class WidgetControllerTest extends FunctionalTest
$response = $this->get($page->URLSegment);
$formAction = sprintf('%s/widget/%d/%s', $page->URLSegment, $widget->ID, 'Form');
$this->assertContains(
$this->assertStringContainsString(
$formAction,
$response->getBody(),
"Widget forms are rendered through WidgetArea templates"
@ -47,12 +47,12 @@ class WidgetControllerTest extends FunctionalTest
$this->get($page->URLSegment);
$response = $this->submitForm('Form_Form', null, array('TestValue' => 'Updated'));
$this->assertContains(
$this->assertStringContainsString(
'TestValue: Updated',
$response->getBody(),
"Form values are submitted to correct widget form"
);
$this->assertContains(
$this->assertStringContainsString(
sprintf('Widget ID: %d', $widget->ID),
$response->getBody(),
"Widget form acts on correct widget, as identified in the URL"