mirror of https://github.com/sualko/cloud_bbb
feat: invert access restriction
parent
d6abf23792
commit
0afe8818e5
|
@ -123,7 +123,6 @@ class JoinController extends Controller {
|
||||||
'room' => $room->name,
|
'room' => $room->name,
|
||||||
'url' => $joinUrl,
|
'url' => $joinUrl,
|
||||||
], 'guest');
|
], 'guest');
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getRoom(): ?Room {
|
private function getRoom(): ?Room {
|
||||||
|
|
|
@ -48,9 +48,7 @@ class RestrictionService {
|
||||||
}
|
}
|
||||||
|
|
||||||
$rRoomTypes = \json_decode($r->getRoomTypes());
|
$rRoomTypes = \json_decode($r->getRoomTypes());
|
||||||
if (count($rRoomTypes) > 0) {
|
$roomTypes = array_intersect($roomTypes, $rRoomTypes);
|
||||||
$roomTypes = \array_merge($roomTypes, $rRoomTypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($restriction->getMaxParticipants() > -1 && ($r->getMaxParticipants() === -1 || $restriction->getMaxParticipants() < $r->getMaxParticipants())) {
|
if ($restriction->getMaxParticipants() > -1 && ($r->getMaxParticipants() === -1 || $restriction->getMaxParticipants() < $r->getMaxParticipants())) {
|
||||||
$restriction->setMaxParticipants($r->getMaxParticipants());
|
$restriction->setMaxParticipants($r->getMaxParticipants());
|
||||||
|
@ -63,7 +61,7 @@ class RestrictionService {
|
||||||
|
|
||||||
$restriction->setId(0);
|
$restriction->setId(0);
|
||||||
$restriction->setGroupId('__cumulative');
|
$restriction->setGroupId('__cumulative');
|
||||||
$restriction->setRoomTypes(\json_encode(\array_values(\array_unique($roomTypes))));
|
$restriction->setRoomTypes(\json_encode(\array_values($roomTypes)));
|
||||||
|
|
||||||
return $restriction;
|
return $restriction;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,10 @@ type Props = {
|
||||||
field: string;
|
field: string;
|
||||||
options: {[key: string]: string};
|
options: {[key: string]: string};
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
|
invert?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EditableSelection: React.FC<Props> = ({ setValue, field, values: currentValues, options, placeholder }) => {
|
const EditableSelection: React.FC<Props> = ({ setValue, field, values: currentValues, options, placeholder, invert = false }) => {
|
||||||
const [active, setActive] = useState<boolean>(false);
|
const [active, setActive] = useState<boolean>(false);
|
||||||
|
|
||||||
currentValues = currentValues || [];
|
currentValues = currentValues || [];
|
||||||
|
@ -29,15 +30,23 @@ const EditableSelection: React.FC<Props> = ({ setValue, field, values: currentVa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const selection = !invert ? currentValues : (currentValues.length ? Object.keys(options).filter(option => currentValues?.indexOf(option) < 0) : []);
|
||||||
|
|
||||||
return (<>
|
return (<>
|
||||||
<a className="action-rename" onClick={onClick}>{currentValues?.join(', ') || placeholder}</a>
|
<a className="action-rename" onClick={onClick}>{selection.join(', ') || placeholder}</a>
|
||||||
{active && <ul className="bbb-selection">
|
{active && <ul className="bbb-selection">
|
||||||
{Object.keys(options).map(key => {
|
{Object.keys(options).map(key => {
|
||||||
const label = options[key];
|
const label = options[key];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li key={key}>
|
<li key={key}>
|
||||||
<input type="checkbox" id={key} className="checkbox" checked={currentValues.indexOf(key) > -1} value="1" onChange={(ev) => addOption(key, ev.target.checked)} />
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id={key}
|
||||||
|
className="checkbox"
|
||||||
|
checked={(currentValues.indexOf(key) > -1) !== invert}
|
||||||
|
value="1"
|
||||||
|
onChange={(ev) => addOption(key, ev.target.checked !== invert)} />
|
||||||
<label htmlFor={key}>{label}</label>
|
<label htmlFor={key}>{label}</label>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
|
|
@ -64,7 +64,7 @@ const App: React.FC<Props> = () => {
|
||||||
{t('bbb', 'Max. rooms')}
|
{t('bbb', 'Max. rooms')}
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
{t('bbb', 'Forbidden room types')}
|
{t('bbb', 'Access options')}
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
{t('bbb', 'Max. participants')}
|
{t('bbb', 'Max. participants')}
|
||||||
|
|
|
@ -48,7 +48,13 @@ const RestrictionRoom: React.FC<Props> = (props) => {
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<EditableSelection field="roomTypes" values={restriction.roomTypes} options={AccessOptions} setValue={updateRestriction} placeholder={t('bbb', 'No restriction')} />
|
<EditableSelection
|
||||||
|
field="roomTypes"
|
||||||
|
values={restriction.roomTypes}
|
||||||
|
options={AccessOptions}
|
||||||
|
setValue={updateRestriction}
|
||||||
|
invert={true}
|
||||||
|
placeholder={t('bbb', 'All')} />
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td className="max-participants bbb-shrink">
|
<td className="max-participants bbb-shrink">
|
||||||
|
|
Loading…
Reference in New Issue