Files
api/services/nginx/app/objects/groups_o.php
T
Jeppe Bundgaard af3b0666fb Add import tasks and new parsers to XL Vask module
- Introduced `runImportTasks` method for vehicle, user, and usage log imports.
- Added new product parsers: `ht_b_rstel_s`, `ht_turbo`, and `ikke_b_rster_p_kabinen`.
- Implemented simulation and duplicate detection for usage logs via order objects.
- Updated usage log handling to include default customer checks and user association.
- Enhanced request handling with fast-link functionality for usage orders.
2025-07-21 10:32:56 +02:00

178 lines
5.1 KiB
PHP

<?php
namespace objects;
use classes\db;
use classes\object_property;
use Exception;
use traits\db_object_t;
class groups_o extends db
{
use db_object_t;
public object_property $name;
public object_property $description;
public object_property $created_at;
public function structure(): void
{
self::setTable('groups');
}
/**
* Get the group by name
* @throws Exception If an object is not selected
*/
public function asArray(): array
{
self::requireSelected();
return [
'id' => (int)$this->id,
'name' => (string)$this->name->value(),
'description' => (string)$this->description->value(),
'created_at' => (string)$this->created_at->value(),
'permissions' => $this->getPermissions()
];
}
/**
* Get all permissions for a group
* @return array
* @throws Exception If the group was not selected
*/
public function getPermissions(): array
{
self::requireSelected();
return (new groups_permissions_o())->getGroupPermissions($this->id);
}
/**
* Get department ids, that the group has permission (department_access_:group_id) to access
* @return array An array of department ids e.g. [1, 2, 3]
* @throws Exception If the group was not selected
*/
public function getDepartments(): array
{
self::requireSelected();
$permissions = (new groups_permissions_o())->getGroupPermissionsMatching($this->id, '/^department_access_[0-9]+$/');
$departments = [];
foreach ( $permissions as $value ) {
$tmp = explode('_', $value['permission']);
$departments[] = (int)$tmp[2];
}
return $departments;
}
/**
* Remove a permission from a group
*
* @param string $permission_id
* @return self $this
* @throws Exception If the permission was not removed successfully
*/
public function removePermission(string $permission_id): self
{
self::requireSelected();
(new groups_permissions_o())->remove($this->id, $permission_id);
return $this;
}
/**
* Clone a group with all its permissions
* @param string $name
* @param string $description
* @return void
* @throws Exception
*/
public function clone(string $name, string $description): void
{
self::requireSelected();
$group = new groups_o();
$group->add($name, $description);
$permissions = (new groups_permissions_o())->getGroupPermissions($this->id);
foreach ( $permissions as $permission ) {
$group->addPermission($permission);
}
}
/**
* Add a group
* @param string $name
* @param string $description
* @return void
* @throws Exception If the object was not created successfully
*/
public function add(string $name, string $description): void
{
$tmp_id = self::add_object([
'name' => $name,
'description' => $description
]);
$this->id = $tmp_id;
self::getObjectProperties();
self::objectChanged();
if (!$this->id) {
throw new Exception('The group was not created successfully.');
}
}
public function getObjectProperties(): void
{
$this->name = new object_property($this->table, $this->id, 'name', 'string', false);
$this->description = new object_property($this->table, $this->id, 'description', 'string', false);
$this->created_at = new object_property($this->table, $this->id, 'created_at', 'string', false);
self::objectChanged();
}
public function objectChanged(): void
{
//TODO: Add cache invalidation
}
/**
* Add a permission to a group
*
* @param string $permission_id
* @return self $this
* @throws Exception If the permission was not added successfully
*/
public function addPermission(string $permission_id): self
{
self::requireSelected();
(new groups_permissions_o())->add($this->id, $permission_id);
return $this;
}
public function getDepartmentsScannerNames(): array
{
self::requireSelected();
$departments = $this->getDepartments();
$plate_scanners_o = new plate_scanners_o();
$tmp = $plate_scanners_o->getFieldsWhere(['department_id' => $departments], ['id', 'name']);
return array_map(
function ($scanner) {
return $scanner['name'];
},
$tmp
);
}
public function getDepartmentsScannersHallIds(): array
{
self::requireSelected();
$departments = $this->getDepartments();
$plate_scanners_o = new plate_scanners_o();
$tmp = $plate_scanners_o->getFieldsWhere([
'department_id' => $departments,
'HallId' => '!null'
], ['id', 'HallId']);
return array_map(
function ($scanner) {
return (string)$scanner['HallId'];
},
$tmp
);
}
}