2020-05-29 13:41:58 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Controller;
|
|
|
|
|
|
|
|
use App\Controller\AppController;
|
|
|
|
use Cake\Utility\Hash;
|
|
|
|
use Cake\Utility\Text;
|
2020-11-06 10:26:15 +01:00
|
|
|
use Cake\Database\Expression\QueryExpression;
|
2020-06-19 00:37:56 +02:00
|
|
|
use Cake\Http\Exception\NotFoundException;
|
|
|
|
use Cake\Http\Exception\MethodNotAllowedException;
|
|
|
|
use Cake\Http\Exception\ForbiddenException;
|
2020-05-29 13:41:58 +02:00
|
|
|
|
|
|
|
class OrganisationsController extends AppController
|
|
|
|
{
|
2021-03-10 09:43:36 +01:00
|
|
|
|
2021-09-10 11:55:54 +02:00
|
|
|
public $quickFilterFields = [['name' => true], 'uuid', 'nationality', 'sector', 'type', 'url'];
|
|
|
|
public $filterFields = ['name', 'uuid', 'nationality', 'sector', 'type', 'url', 'Alignments.id', 'MetaFields.field', 'MetaFields.value', 'MetaFields.MetaTemplates.name'];
|
|
|
|
public $containFields = ['Alignments' => 'Individuals'];
|
2021-11-17 17:04:39 +01:00
|
|
|
public $statisticsFields = ['nationality', 'sector'];
|
2021-03-10 09:43:36 +01:00
|
|
|
|
2020-05-29 13:41:58 +02:00
|
|
|
public function index()
|
|
|
|
{
|
2020-06-19 00:37:56 +02:00
|
|
|
$this->CRUD->index([
|
2021-09-10 11:55:54 +02:00
|
|
|
'filters' => $this->filterFields,
|
|
|
|
'quickFilters' => $this->quickFilterFields,
|
2022-02-28 10:50:04 +01:00
|
|
|
'quickFilterForMetaField' => ['enabled' => true, 'wildcard_search' => true],
|
2021-02-26 10:36:06 +01:00
|
|
|
'contextFilters' => [
|
|
|
|
'custom' => [
|
|
|
|
[
|
|
|
|
'label' => __('ENISA Accredited'),
|
|
|
|
'filterCondition' => [
|
|
|
|
'MetaFields.field' => 'enisa-tistatus',
|
|
|
|
'MetaFields.value' => 'Accredited',
|
|
|
|
'MetaFields.MetaTemplates.name' => 'ENISA CSIRT Network'
|
|
|
|
]
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'label' => __('ENISA not-Accredited'),
|
|
|
|
'filterCondition' => [
|
|
|
|
'MetaFields.field' => 'enisa-tistatus',
|
|
|
|
'MetaFields.value !=' => 'Accredited',
|
|
|
|
'MetaFields.MetaTemplates.name' => 'ENISA CSIRT Network'
|
|
|
|
]
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'label' => __('ENISA CSIRT Network (GOV)'),
|
|
|
|
'filterConditionFunction' => function($query) {
|
2021-03-10 09:38:41 +01:00
|
|
|
return $this->CRUD->setParentConditionsForMetaFields($query, [
|
2021-02-26 10:36:06 +01:00
|
|
|
'ENISA CSIRT Network' => [
|
|
|
|
[
|
|
|
|
'field' => 'constituency',
|
|
|
|
'value LIKE' => '%Government%',
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'field' => 'csirt-network-status',
|
|
|
|
'value' => 'Member',
|
|
|
|
],
|
|
|
|
]
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
]
|
|
|
|
],
|
|
|
|
],
|
2021-11-17 17:04:39 +01:00
|
|
|
'contain' => $this->containFields,
|
|
|
|
'statisticsFields' => $this->statisticsFields,
|
2020-06-19 00:37:56 +02:00
|
|
|
]);
|
2021-01-11 16:28:07 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-05-29 13:41:58 +02:00
|
|
|
}
|
2020-06-19 00:37:56 +02:00
|
|
|
$this->set('alignmentScope', 'individuals');
|
|
|
|
$this->set('metaGroup', 'ContactDB');
|
2020-05-29 13:41:58 +02:00
|
|
|
}
|
|
|
|
|
2021-03-10 09:43:36 +01:00
|
|
|
public function filtering()
|
|
|
|
{
|
|
|
|
$this->CRUD->filtering();
|
|
|
|
}
|
|
|
|
|
2020-05-29 13:41:58 +02:00
|
|
|
public function add()
|
|
|
|
{
|
2020-06-19 00:37:56 +02:00
|
|
|
$this->CRUD->add();
|
2021-01-11 16:28:07 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-05-29 13:41:58 +02:00
|
|
|
}
|
|
|
|
$this->set('metaGroup', 'ContactDB');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function view($id)
|
|
|
|
{
|
2020-06-19 00:37:56 +02:00
|
|
|
$this->CRUD->view($id, ['contain' => ['Alignments' => 'Individuals']]);
|
2021-01-11 16:28:07 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-05-29 13:41:58 +02:00
|
|
|
}
|
|
|
|
$this->set('metaGroup', 'ContactDB');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function edit($id)
|
|
|
|
{
|
2022-10-31 11:31:38 +01:00
|
|
|
$currentUser = $this->ACL->getUser();
|
|
|
|
if (
|
|
|
|
!($currentUser['Organisation']['id'] == $id && $currentUser['Role']['perm_org_admin']) &&
|
|
|
|
!$currentUser['Role']['perm_admin']
|
|
|
|
) {
|
|
|
|
throw new MethodNotAllowedException(__('You cannot modify that organisation.'));
|
|
|
|
}
|
2020-06-19 00:37:56 +02:00
|
|
|
$this->CRUD->edit($id);
|
2021-01-11 16:28:07 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-05-29 13:41:58 +02:00
|
|
|
}
|
|
|
|
$this->set('metaGroup', 'ContactDB');
|
|
|
|
$this->render('add');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function delete($id)
|
|
|
|
{
|
2020-06-19 00:37:56 +02:00
|
|
|
$this->CRUD->delete($id);
|
2021-01-11 16:28:07 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-05-29 13:41:58 +02:00
|
|
|
}
|
|
|
|
$this->set('metaGroup', 'ContactDB');
|
|
|
|
}
|
2021-08-31 15:21:28 +02:00
|
|
|
|
|
|
|
public function tag($id)
|
|
|
|
{
|
|
|
|
$this->CRUD->tag($id);
|
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function untag($id)
|
|
|
|
{
|
|
|
|
$this->CRUD->untag($id);
|
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function viewTags($id)
|
|
|
|
{
|
|
|
|
$this->CRUD->viewTags($id);
|
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
|
|
|
}
|
|
|
|
}
|
2020-05-29 13:41:58 +02:00
|
|
|
}
|