LimitRepeater by Robin S

Allows limits and restrictions to be placed on selected Repeater fields.

LimitRepeater

Allows restrictions and limits to be placed on Repeater fields.

For any Repeater field you can limit the number of items that may be added and also prevent the use of drag-sorting, toggling of published state, and the trashing of items. There is also an option to hide the clone button when the limit is reached.

Usage


Install the LimitRepeater module.

Since v0.2.0 the module settings are configured at Setup > Fields > [your Repeater field]. The settings are contained within the "Restrictions" fieldset on the "Details" tab.

Module config

Please note that the restrictions limits are applied in Page Edit with CSS/JS so should not be considered tamper-proof.

Setting restrictions via a hook

Besides setting restrictions in the field settings, you can also apply or modify restrictions by hooking LimitRepeater::checkRestrictions. This allows for more focused restrictions, for example, applying restrictions depending on the template of the page being edited or depending on the role of the user.

The checkRestrictions() method receives the following arguments:

  • $field This Repeater field
  • $inputfield This Repeater inputfield
  • $page The page that is open in ProcessPageEdit

The method returns an array of restrictions for the Repeater field. An example of a returned array:

Restrictions

Example hook

Prevent non-superusers from trashing any items in "my_repeater_field":

$wire->addHookAfter('LimitRepeater::checkRestrictions', function(HookEvent $event) {
    $field = $event->arguments('field');
    $restrictions = $event->return;
    if($field->name === 'my_repeater_field' && !$this->user->isSuperuser()) {
        $restrictions['notrash'] = true;
    }
    $event->return = $restrictions;
});

Upgrading from < v0.2.0


There are two major changes to be aware of when upgrading from earlier versions of the module.

  1. The settings are no longer defined on the module config page, but rather in the field settings of each Repeater field: Setup > Fields > [your Repeater field]. If you visit the module config page you'll find shortcuts to the settings for each Repeater field.
  2. In earlier versions you could apply restrictions to a particular role. This is still possible but is now handled by hooking LimitRepeater::checkRestrictions as this is a more flexible and powerful approach. If you were applying restrictions to a particular role or roles you'll need to add hook code to achieve the same effect after you upgrade the module. See the hook information above in this readme.

Install and use modules at your own risk. Always have a site and database backup before installing new modules.

Twitter updates

  • New TinyMCE 6.2.0 Inputfield released for ProcessWire— More
    28 October 2022
  • This week we take a look at a new rich text editor for ProcessWire, why we chose it, some highlights, screenshots, and why we think you’ll like it— More
    21 October 2022
  • This week we have ProcessWire 3.0.206 on the dev branch and a new version of the ProDevTools UserActivity module, which we'll take a closer look at in this post— More
    7 October 2022

Latest news

  • ProcessWire Weekly #447
    In the 447th issue of ProcessWire Weekly we'll share the latest core updates, introduce a new third party module called RockVideoThumbnailGrabber, and more. Read on!
    Weekly.pw / 3 December 2022
  • New rich text editor for ProcessWire
    This week we take a look at a new rich text editor for ProcessWire, why we chose it, some highlights, screenshots, and why we think you’ll like it.
    Blog / 21 October 2022
  • Subscribe to weekly ProcessWire news

“ProcessWire is like a breath of fresh air. So powerful yet simple to build with and customise, and web editors love it too.” —Margaret Chatwin, Web developer