-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add admin section to select groups allowed to print
- Loading branch information
Showing
8 changed files
with
309 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
#printer_admin input { | ||
vertical-align: middle; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
let elements = [] | ||
|
||
const selector = '#printer-message'; | ||
|
||
const appConfig = (name, value, callbacks) => { | ||
OCP.AppConfig.setValue('printer', name, value, callbacks) | ||
} | ||
|
||
const saveSettings = (key) => { | ||
const element = elements.get(key) | ||
let value | ||
let name | ||
|
||
if (jQuery(element).is('[data-checkbox]')) { | ||
name = jQuery(element).attr('data-name') | ||
const inputs = jQuery('input[name="' + name + '[]"]:checked') | ||
value = [] | ||
|
||
inputs.each((i, v) => { | ||
value.push(v.value) | ||
}) | ||
|
||
value = JSON.stringify(value) | ||
} else { | ||
name = jQuery(element).attr('name') | ||
value = jQuery(element).val() | ||
} | ||
|
||
const size = elements.length | ||
|
||
if (name === 'cache') { | ||
++value | ||
} | ||
|
||
const callbacks = { | ||
success: () => { | ||
OC.msg.finishedSuccess( | ||
selector, | ||
t('printer', (key + 1) + '/' + size) | ||
) | ||
|
||
if (key < size - 1) { | ||
saveSettings(++key) | ||
} else { | ||
OC.msg.finishedSuccess(selector, t('printer', 'Saved')) | ||
} | ||
}, | ||
error: () => { | ||
OC.msg.finishedError(selector, t('printer', 'Error while saving "' + element + '"')) | ||
} | ||
} | ||
|
||
appConfig(name, value, callbacks) | ||
} | ||
|
||
jQuery(document).ready(() => { | ||
elements = jQuery('.printer-setting') | ||
|
||
jQuery('#printer-save').on('click', (event) => { | ||
event.preventDefault() | ||
OC.msg.startSaving(selector) | ||
|
||
saveSettings(0) | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace OCA\Printer; | ||
|
||
use OCP\AppFramework\Utility\ITimeFactory; | ||
use OCP\IConfig; | ||
use OCP\IGroupManager; | ||
use OCP\IUser; | ||
use OCP\Security\ISecureRandom; | ||
|
||
class Config | ||
{ | ||
/** | ||
* @var IConfig | ||
*/ | ||
protected $config; | ||
|
||
/** | ||
* @var ITimeFactory | ||
*/ | ||
protected $timeFactory; | ||
|
||
/** | ||
* @var IGroupManager | ||
*/ | ||
private $groupManager; | ||
|
||
/** | ||
* @var ISecureRandom | ||
*/ | ||
private $secureRandom; | ||
|
||
public function __construct(IConfig $config, ISecureRandom $secureRandom, IGroupManager $groupManager, ITimeFactory $timeFactory) | ||
{ | ||
$this->config = $config; | ||
$this->secureRandom = $secureRandom; | ||
$this->groupManager = $groupManager; | ||
$this->timeFactory = $timeFactory; | ||
} | ||
|
||
/** | ||
* @return string[] | ||
*/ | ||
public function getAllowedGroupIds(): array | ||
{ | ||
$groups = $this->config->getAppValue('printer', 'allowed_groups', '[]'); | ||
$groups = json_decode($groups, true); | ||
|
||
return \is_array($groups) ? $groups : []; | ||
} | ||
|
||
public function isDisabledForUser(IUser $user): bool | ||
{ | ||
$allowedGroups = $this->getAllowedGroupIds(); | ||
|
||
if (empty($allowedGroups)) { | ||
return false; | ||
} | ||
|
||
$userGroups = $this->groupManager->getUserGroupIds($user); | ||
|
||
return empty(array_intersect($allowedGroups, $userGroups)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace OCA\Printer\Settings\Admin; | ||
|
||
use OCA\Printer\Config; | ||
use OCP\AppFramework\Http\TemplateResponse; | ||
use OCP\IGroupManager; | ||
use OCP\IInitialStateService; | ||
use OCP\Settings\ISettings; | ||
|
||
class AllowedGroups implements ISettings | ||
{ | ||
/** | ||
* @var Config | ||
*/ | ||
private $config; | ||
|
||
/** | ||
* @var IInitialStateService | ||
*/ | ||
private $initialStateService; | ||
|
||
/** | ||
* @var IGroupManager | ||
*/ | ||
private $groupManager; | ||
|
||
public function __construct(Config $config, IInitialStateService $initialStateService, IGroupManager $groupManager) | ||
{ | ||
$this->config = $config; | ||
$this->initialStateService = $initialStateService; | ||
$this->groupManager = $groupManager; | ||
} | ||
|
||
public function getForm(): TemplateResponse | ||
{ | ||
$this->initialStateService->provideInitialState( | ||
'printer', | ||
'allowed_groups', | ||
$this->config->getAllowedGroupIds() | ||
); | ||
|
||
$groups = $this->groupManager->search('', 100); | ||
$allowedGroups = $this->config->getAllowedGroupIds(); | ||
|
||
return new TemplateResponse('printer', 'settings/admin/allowed-groups', [ | ||
'groups' => $groups, | ||
'allowedGroups' => $allowedGroups, | ||
], ''); | ||
} | ||
|
||
public function getSection(): string | ||
{ | ||
return 'printer'; | ||
} | ||
|
||
public function getPriority(): int | ||
{ | ||
return 10; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace OCA\Printer\Settings\Admin; | ||
|
||
use OCP\IL10N; | ||
use OCP\IURLGenerator; | ||
use OCP\Settings\IIconSection; | ||
|
||
class Section implements IIconSection | ||
{ | ||
/** | ||
* @var IL10N | ||
*/ | ||
private $l; | ||
|
||
/** | ||
* @var IURLGenerator | ||
*/ | ||
private $url; | ||
|
||
public function __construct(IURLGenerator $url, IL10N $l) | ||
{ | ||
$this->url = $url; | ||
$this->l = $l; | ||
} | ||
|
||
public function getIcon(): string | ||
{ | ||
return $this->url->imagePath('spreed', 'app-dark.svg'); | ||
} | ||
|
||
public function getID(): string | ||
{ | ||
return 'printer'; | ||
} | ||
|
||
public function getName(): string | ||
{ | ||
return $this->l->t('Printer'); | ||
} | ||
|
||
public function getPriority(): int | ||
{ | ||
return 70; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
<?php | ||
style('printer', 'admin'); | ||
script('printer', 'admin'); | ||
?> | ||
<div id="printer_admin"> | ||
<div class="section"> | ||
<h2><?php p($l->t('Limit to groups')) ?></h2> | ||
<p class="settings-hint"> | ||
<?php p($l->t('When at least one group is selected, only people of the listed groups can print.')); ?> | ||
</p> | ||
|
||
<ul class="printer-setting" data-name="allowed_groups" data-checkbox> | ||
<?php foreach ($_['groups'] as $group): ?> | ||
<li> | ||
<input | ||
type="checkbox" | ||
id="allowed_group_<?php echo $group->getGid() ?>" | ||
name="allowed_groups[]" | ||
value="<?php p($group->getGid()) ?>" | ||
<?php if (in_array($group->getGid(), $_['allowedGroups'])): ?> | ||
checked | ||
<?php endif ?> | ||
> | ||
|
||
<label for="allowed_group_<?php echo $group->getGid() ?>"> | ||
<?php p($group->getDisplayName()) ?> | ||
</label> | ||
</li> | ||
<?php endforeach ?> | ||
</ul> | ||
|
||
<button id="printer-save" class="btn btn-info"> | ||
<?php p($l->t('Save')); ?> | ||
</button> | ||
|
||
<span id="printer-message" class="msg"></span> | ||
</div> | ||
</div> |