Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
Project
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Jobs
Commits
Open sidebar
Gorodkov Denis
Project
Commits
9bfe1611
Commit
9bfe1611
authored
May 18, 2022
by
Gorodkov Denis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit
parent
1cc430a5
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
174 additions
and
65 deletions
+174
-65
composer.json
app/composer.json
+1
-0
composer.lock
app/composer.lock
+45
-1
mymodule.services.yml
app/docroot/modules/custom/mymodule/mymodule.services.yml
+5
-0
CustomAuth.php
...ustom/mymodule/src/Authentication/Provider/CustomAuth.php
+54
-0
GetPeople.php
...es/custom/mymodule/src/Plugin/rest/resource/GetPeople.php
+34
-62
PostPeople.php
...s/custom/mymodule/src/Plugin/rest/resource/PostPeople.php
+34
-1
local.services.yml
app/docroot/sites/local.services.yml
+1
-1
No files found.
app/composer.json
View file @
9bfe1611
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
"drupal/rabbit_hole"
:
"^1.0@beta"
,
"drupal/rabbit_hole"
:
"^1.0@beta"
,
"drupal/recaptcha"
:
"^3.0"
,
"drupal/recaptcha"
:
"^3.0"
,
"drupal/redirect"
:
"^1.7"
,
"drupal/redirect"
:
"^1.7"
,
"drupal/rest_api_access_token"
:
"^1.6"
,
"drupal/restui"
:
"^1.20"
,
"drupal/restui"
:
"^1.20"
,
"drupal/search_api"
:
"^1.23"
,
"drupal/search_api"
:
"^1.23"
,
"drupal/search_api_autocomplete"
:
"^1.6"
,
"drupal/search_api_autocomplete"
:
"^1.6"
,
...
...
app/composer.lock
View file @
9bfe1611
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
"This file is @generated automatically"
],
],
"content-hash": "
786aa69208b3efb27fa74ecad0d06e91
",
"content-hash": "
3f28a441b2b942ac67dc8e3433c26a0a
",
"packages": [
"packages": [
{
{
"name": "asm89/stack-cors",
"name": "asm89/stack-cors",
...
@@ -4074,6 +4074,50 @@
...
@@ -4074,6 +4074,50 @@
"source": "https://git.drupalcode.org/project/redirect"
"source": "https://git.drupalcode.org/project/redirect"
}
}
},
},
{
"name": "drupal/rest_api_access_token",
"version": "1.6.0",
"source": {
"type": "git",
"url": "https://git.drupalcode.org/project/rest_api_access_token.git",
"reference": "8.x-1.6"
},
"dist": {
"type": "zip",
"url": "https://ftp.drupal.org/files/projects/rest_api_access_token-8.x-1.6.zip",
"reference": "8.x-1.6",
"shasum": "404dd271cba3cd969fc4eaa8035ccf92773ffc18"
},
"require": {
"drupal/core": "^8 || ^9"
},
"type": "drupal-module",
"extra": {
"drupal": {
"version": "8.x-1.6",
"datestamp": "1614004617",
"security-coverage": {
"status": "covered",
"message": "Covered by Drupal's security advisory policy"
}
}
},
"notification-url": "https://packages.drupal.org/8/downloads",
"license": [
"GPL-2.0-or-later"
],
"authors": [
{
"name": "marcinkazmierski",
"homepage": "https://www.drupal.org/user/3616253"
}
],
"description": "REST API Access Token module.",
"homepage": "https://www.drupal.org/project/rest_api_access_token",
"support": {
"source": "https://git.drupalcode.org/project/rest_api_access_token"
}
},
{
{
"name": "drupal/restui",
"name": "drupal/restui",
"version": "1.20.0",
"version": "1.20.0",
...
...
app/docroot/modules/custom/mymodule/mymodule.services.yml
View file @
9bfe1611
...
@@ -6,3 +6,8 @@ services:
...
@@ -6,3 +6,8 @@ services:
class
:
\Drupal\mymodule\Commands\BatchCommands
class
:
\Drupal\mymodule\Commands\BatchCommands
tags
:
tags
:
-
{
name
:
drush.command
}
-
{
name
:
drush.command
}
mymodule.authentication
:
class
:
Drupal\mymodule\Authentication\Provider\CustomAuth
arguments
:
[
'
@entity_type.manager'
]
tags
:
-
{
name
:
authentication_provider
,
provider_id
:
'
x-csrf'
,
priority
:
100
,
global
:
TRUE
}
app/docroot/modules/custom/mymodule/src/Authentication/Provider/CustomAuth.php
0 → 100644
View file @
9bfe1611
<?php
namespace
Drupal\mymodule\Authentication\Provider
;
use
Drupal\Core\Authentication\AuthenticationProviderInterface
;
use
Drupal\Core\Entity\EntityTypeManagerInterface
;
use
Drupal\Core\Session\AccountInterface
;
use
Symfony\Component\HttpFoundation\Request
;
use
Drupal\Core\Access
;
/**
* HTTP Basic authentication provider.
*/
class
CustomAuth
implements
AuthenticationProviderInterface
{
/**
* The entity type manager service.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected
$entityTypeManager
;
/**
* Constructs a HTTP basic authentication provider object.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager service.
*/
public
function
__construct
(
EntityTypeManagerInterface
$entity_type_manager
)
{
$this
->
entityTypeManager
=
$entity_type_manager
;
}
/**
* {@inheritdoc}
*/
public
function
applies
(
Request
$request
)
{
$x_crsf
=
$request
->
headers
->
get
(
'X-CSRF-Token'
);
return
!
empty
(
$x_crsf
);
}
/**
* {@inheritdoc}
*/
public
function
authenticate
(
Request
$request
)
{
$x_crsf
=
$request
->
headers
->
get
(
'X-CSRF-Token'
);
$valid
=
\Drupal
::
csrfToken
()
->
validate
(
$x_crsf
);
$account
=
\Drupal\user\Entity\User
::
load
(
1
);
return
$account
;
return
NULL
;
}
}
app/docroot/modules/custom/mymodule/src/Plugin/rest/resource/GetPeople.php
View file @
9bfe1611
...
@@ -2,7 +2,6 @@
...
@@ -2,7 +2,6 @@
namespace
Drupal\mymodule\Plugin\rest\resource
;
namespace
Drupal\mymodule\Plugin\rest\resource
;
use
Drupal\config_override_integration_test\CacheabilityMetadataConfigOverride
;
use
Drupal\rest\Plugin\ResourceBase
;
use
Drupal\rest\Plugin\ResourceBase
;
use
Drupal\rest\ResourceResponse
;
use
Drupal\rest\ResourceResponse
;
use
Symfony\Component\HttpFoundation\JsonResponse
;
use
Symfony\Component\HttpFoundation\JsonResponse
;
...
@@ -10,6 +9,7 @@ use Symfony\Component\HttpFoundation\Response;
...
@@ -10,6 +9,7 @@ use Symfony\Component\HttpFoundation\Response;
use
\Drupal\node\Entity\Node
;
use
\Drupal\node\Entity\Node
;
use
\Drupal\Core\Cache\CacheableMetadata
;
use
\Drupal\Core\Cache\CacheableMetadata
;
/**
/**
* Provides a resource to get people
* Provides a resource to get people
*
*
...
@@ -26,14 +26,14 @@ class GetPeople extends ResourceBase {
...
@@ -26,14 +26,14 @@ class GetPeople extends ResourceBase {
public
function
get
()
{
public
function
get
()
{
$query
=
\Drupal
::
request
()
->
query
->
get
(
'page'
);
$query
=
\Drupal
::
request
()
->
query
->
get
(
'page'
);
if
(
empty
(
$query
))
{
if
(
empty
(
$query
))
{
$query
=
1
;
$query
=
1
;
}
}
$cache
=
CacheableMetadata
::
createFromRenderArray
([
$cache
=
CacheableMetadata
::
createFromRenderArray
([
'#cache'
=>
[
'#cache'
=>
[
'max-age'
=>
600
,
'max-age'
=>
900
,
'context'
=>
[
'url.query_args'
],
],
],
]);
]);
...
@@ -44,22 +44,22 @@ class GetPeople extends ResourceBase {
...
@@ -44,22 +44,22 @@ class GetPeople extends ResourceBase {
]);
]);
$nodes
=
array_values
(
$nodes
);
$nodes
=
array_values
(
$nodes
);
$count_nodes
=
count
(
$nodes
);
$count_nodes
=
count
(
$nodes
);
$
number_las
t_page
=
(
int
)
ceil
(
$count_nodes
/
10
);
$
limi
t_page
=
(
int
)
ceil
(
$count_nodes
/
10
);
$i
=
0
;
$i
=
0
;
$response
[
'count'
]
=
$count_nodes
;
$response
[
'count'
]
=
$count_nodes
;
$host
=
\Drupal
::
request
()
->
getHost
();
$host
=
\Drupal
::
request
()
->
getHost
();
$host
=
'http://'
.
$host
.
'/api/people?page='
;
$host
=
'http://'
.
$host
.
'/api/people?page='
;
if
(
$query
<=
$
number_las
t_page
)
{
if
(
$query
<=
$
limi
t_page
)
{
if
(
$count_nodes
>
10
and
(
empty
(
$query
)
or
$query
==
1
))
{
if
(
$count_nodes
>
10
and
(
empty
(
$query
)
or
$query
==
1
))
{
$response
[
'next'
]
=
$host
.
'2'
;
$response
[
'next'
]
=
$host
.
'2'
;
$response
[
'previous'
]
=
null
;
$response
[
'previous'
]
=
null
;
}
elseif
(
$query
!=
$
number_las
t_page
)
{
}
elseif
(
$query
!=
$
limi
t_page
)
{
$response
[
'next'
]
=
$host
.
(
$query
+
1
);
$response
[
'next'
]
=
$host
.
(
$query
+
1
);
$response
[
'previous'
]
=
$host
.
(
$query
-
1
);
$response
[
'previous'
]
=
$host
.
(
$query
-
1
);
}
else
{
}
else
{
$response
[
'next'
]
=
null
;
$response
[
'next'
]
=
null
;
$response
[
'previous'
]
=
$host
.
(
$
number_las
t_page
-
1
);
$response
[
'previous'
]
=
$host
.
(
$
limi
t_page
-
1
);
}
}
}
else
{
}
else
{
return
new
ResourceResponse
(
'404 error'
);
return
new
ResourceResponse
(
'404 error'
);
...
@@ -69,7 +69,7 @@ class GetPeople extends ResourceBase {
...
@@ -69,7 +69,7 @@ class GetPeople extends ResourceBase {
$i
=
(
$query
*
10
)
-
10
;
$i
=
(
$query
*
10
)
-
10
;
}
}
if
(
$query
==
$
number_las
t_page
)
{
if
(
$query
==
$
limi
t_page
)
{
$last_index
=
count
(
$nodes
);
$last_index
=
count
(
$nodes
);
}
else
{
}
else
{
$last_index
=
$query
*
10
;
$last_index
=
$query
*
10
;
...
@@ -93,54 +93,11 @@ class GetPeople extends ResourceBase {
...
@@ -93,54 +93,11 @@ class GetPeople extends ResourceBase {
$result
[
'homeworld'
][
'id'
]
=
$node_homeworld
->
id
();
$result
[
'homeworld'
][
'id'
]
=
$node_homeworld
->
id
();
$result
[
'homeworld'
][
'label'
]
=
$node_homeworld
->
label
();
$result
[
'homeworld'
][
'label'
]
=
$node_homeworld
->
label
();
$items
=
$node
->
field_films
->
referencedEntities
();
$result
[
'films'
][]
=
$this
->
fillReference
(
'films'
,
$node
);
foreach
(
$items
as
$item
)
{
$result
[
'species'
][]
=
$this
->
fillReference
(
'species'
,
$node
);
$obj
=
[
$result
[
'vehicles'
][]
=
$this
->
fillReference
(
'vehicles'
,
$node
);
'id'
=>
$item
->
id
(),
$result
[
'starships'
][]
=
$this
->
fillReference
(
'starships'
,
$node
);
'label'
=>
$item
->
label
(),
];
$result
[
'films'
][]
=
$obj
;
}
$items
=
$node
->
field_species
->
referencedEntities
();
if
(
!
empty
(
$items
))
{
foreach
(
$items
as
$item
)
{
$obj
=
[
'id'
=>
$item
->
id
(),
'label'
=>
$item
->
label
(),
];
$result
[
'species'
][]
=
$obj
;
}
}
else
{
$result
[
'species'
][]
=
null
;
}
$items
=
$node
->
field_vehicles
->
referencedEntities
();
if
(
!
empty
(
$items
))
{
foreach
(
$items
as
$item
)
{
$obj
=
[
'id'
=>
$item
->
id
(),
'label'
=>
$item
->
label
(),
];
$result
[
'vehicles'
][]
=
$obj
;
}
}
else
{
$result
[
'vehicles'
][]
=
null
;
}
$items
=
$node
->
field_starships
->
referencedEntities
();
if
(
!
empty
(
$items
))
{
foreach
(
$items
as
$item
)
{
$obj
=
[
'id'
=>
$item
->
id
(),
'label'
=>
$item
->
label
(),
];
$result
[
'starships'
][]
=
$obj
;
}
}
else
{
$result
[
'starships'
][]
=
null
;
}
$created
=
$node
->
get
(
'created'
)
->
getValue
();
$created
=
$node
->
get
(
'created'
)
->
getValue
();
$created
=
date
(
"Y-m-d H:i:s"
,
(
int
)
$created
[
0
][
'value'
]);
$created
=
date
(
"Y-m-d H:i:s"
,
(
int
)
$created
[
0
][
'value'
]);
$result
[
'created'
]
=
$created
;
$result
[
'created'
]
=
$created
;
...
@@ -148,22 +105,20 @@ class GetPeople extends ResourceBase {
...
@@ -148,22 +105,20 @@ class GetPeople extends ResourceBase {
$changed
=
$node
->
get
(
'changed'
)
->
getValue
();
$changed
=
$node
->
get
(
'changed'
)
->
getValue
();
$changed
=
date
(
"Y-m-d H:i:s"
,
(
int
)
$changed
[
0
][
'value'
]);
$changed
=
date
(
"Y-m-d H:i:s"
,
(
int
)
$changed
[
0
][
'value'
]);
$result
[
'changed'
]
=
$changed
;
$result
[
'changed'
]
=
$changed
;
#$name = $node->label();
#$alias = Url::fromRoute('entity.node.canonical', ['node' => $node->id()])->toString();
$alias
=
$node
->
toUrl
()
->
setAbsolute
()
->
toString
();
$result
[
'url'
]
=
$alias
;
$url
=
$node
->
toUrl
()
->
toString
(
TRUE
);
$result
[
'url'
]
=
$url
->
getGeneratedUrl
();
$response
[
'results'
][]
=
$result
;
$response
[
'results'
][]
=
$result
;
$cache
->
addCacheableDependency
(
$node
);
$cache
->
addCacheableDependency
(
$node
);
}
}
}
}
return
(
new
ResourceResponse
(
$response
,
200
))
->
addCacheableDependency
(
$cache
);
return
new
JsonResponse
(
$response
);
}
}
public
function
post
(
$data
)
{
public
function
post
(
$data
)
{
$head
=
\Drupal
::
request
()
->
headers
->
get
(
'X-CSRF-Token'
);
#aNNEGy331SxMmOsiGbCyBGUfQz7EXl7iIcXS-Vh8vSQ
if
(
$data
[
'swapi_id'
])
{
if
(
$data
[
'swapi_id'
])
{
if
(
$this
->
checkNode
(
$data
[
'swapi_id'
]))
{
if
(
$this
->
checkNode
(
$data
[
'swapi_id'
]))
{
return
new
ResourceResponse
([
'Нода с таким swapi_id уже существует!'
]);
return
new
ResourceResponse
([
'Нода с таким swapi_id уже существует!'
]);
...
@@ -194,6 +149,23 @@ class GetPeople extends ResourceBase {
...
@@ -194,6 +149,23 @@ class GetPeople extends ResourceBase {
}
}
}
}
public
function
fillReference
(
$nameAttr
,
$node
)
{
$field_name
=
"field_"
.
$nameAttr
;
$items
=
$node
->
$field_name
->
referencedEntities
();
if
(
!
empty
(
$items
))
{
foreach
(
$items
as
$item
)
{
$obj
=
[
'id'
=>
$item
->
id
(),
'label'
=>
$item
->
label
(),
];
$result
[
$nameAttr
][]
=
$obj
;
}
}
else
{
$result
[
$nameAttr
][]
=
null
;
}
return
$result
[
$nameAttr
];
}
public
function
getFieldValue
(
$field_name
,
$node
)
{
public
function
getFieldValue
(
$field_name
,
$node
)
{
$value
=
$node
->
get
(
$field_name
)
->
getValue
();
$value
=
$node
->
get
(
$field_name
)
->
getValue
();
$value
=
$value
[
0
][
'value'
];
$value
=
$value
[
0
][
'value'
];
...
...
app/docroot/modules/custom/mymodule/src/Plugin/rest/resource/PostPeople.php
View file @
9bfe1611
...
@@ -4,6 +4,7 @@ namespace Drupal\mymodule\Plugin\rest\resource;
...
@@ -4,6 +4,7 @@ namespace Drupal\mymodule\Plugin\rest\resource;
use
Drupal\rest\Plugin\ResourceBase
;
use
Drupal\rest\Plugin\ResourceBase
;
use
Drupal\rest\ResourceResponse
;
use
Drupal\rest\ResourceResponse
;
use
Drupal\Core\Cache\CacheableMetadata
;
/**
/**
* Provides a resource to get people
* Provides a resource to get people
...
@@ -12,10 +13,42 @@ use Drupal\rest\ResourceResponse;
...
@@ -12,10 +13,42 @@ use Drupal\rest\ResourceResponse;
* id = "post_people",
* id = "post_people",
* label = @Translation("Post people"),
* label = @Translation("Post people"),
* uri_paths = {
* uri_paths = {
* "
/create
" = "/post_test",
* "
canonical
" = "/post_test",
* }
* }
* )
* )
*/
*/
class
PostPeople
extends
ResourceBase
{
class
PostPeople
extends
ResourceBase
{
/**
* {@inheritdoc}
*/
public
function
get
()
{
$cache
=
CacheableMetadata
::
createFromRenderArray
([
'#cache'
=>
[
'max-age'
=>
600
,
],
]);
$nodes
=
\Drupal
::
entityTypeManager
()
->
getStorage
(
'node'
)
->
loadByProperties
([
'type'
=>
'people'
,
'field_swapi_id'
=>
1
,
]);
foreach
(
$nodes
as
$item
)
{
$node
=
$item
;
}
$response
=
new
ResourceResponse
(
[
'title'
=>
$node
->
label
(),
'time'
=>
time
(),
]
);
#$cache->addCacheableDependency($node);
$response
->
addCacheableDependency
(
$cache
);
return
$response
;
}
}
}
app/docroot/sites/local.services.yml
View file @
9bfe1611
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
# 'example.settings.local.php' file, which sits next to this file.
# 'example.settings.local.php' file, which sits next to this file.
parameters
:
parameters
:
# Change to true if it really needed
# Change to true if it really needed
http.response.debug_cacheability_headers
:
fals
e
http.response.debug_cacheability_headers
:
tru
e
twig.config
:
twig.config
:
debug
:
true
debug
:
true
auto_reload
:
true
auto_reload
:
true
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment