Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
N
node_access_rebuild_progressive
Manage
Activity
Members
Labels
Plan
Wiki
Custom issue tracker
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
project
node_access_rebuild_progressive
Commits
318f3bad
Commit
318f3bad
authored
4 years ago
by
Dionisio Fernandez
Browse files
Options
Downloads
Patches
Plain Diff
Issue
#3141220
: port to Drupal 9
parent
ff9942eb
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
node_access_rebuild_progressive.info.yml
+1
-1
1 addition, 1 deletion
node_access_rebuild_progressive.info.yml
node_access_rebuild_progressive.module
+32
-17
32 additions, 17 deletions
node_access_rebuild_progressive.module
with
33 additions
and
18 deletions
node_access_rebuild_progressive.info.yml
+
1
−
1
View file @
318f3bad
name
:
'
Node
Access
Rebuild
Progressive'
description
:
'
Rebuild
node
access
grants
in
chunks'
core
:
8.x
type
:
module
core_version_requirement
:
^8 || ^9
This diff is collapsed.
Click to expand it.
node_access_rebuild_progressive.module
+
32
−
17
View file @
318f3bad
...
...
@@ -5,6 +5,9 @@
* Provides ability to rebuild node access silently.
*/
use
Drush\Drush
;
use
Consolidation\SiteAlias\SiteAliasManager
;
/**
* Implements hook_cron().
*/
...
...
@@ -28,6 +31,7 @@ function node_access_rebuild_progressive_cron() {
* Initiate the full rebuild.
*/
function
node_access_rebuild_progressive_trigger
()
{
$database
=
\Drupal
::
database
();
// Prevents default message/behaviour.
node_access_needs_rebuild
(
FALSE
);
// Add default grants in the unlikely case
...
...
@@ -37,12 +41,13 @@ function node_access_rebuild_progressive_trigger() {
return
node_access_rebuild_progressive_finished
();
}
// Clean up possible mismatches.
db_
query
(
"DELETE FROM
{
node_access
}
WHERE nid NOT IN (SELECT nid FROM
{
node
}
)"
);
$database
->
query
(
"DELETE FROM
{
node_access
}
WHERE nid NOT IN (SELECT nid FROM
{
node
}
)"
);
// We only need the current one, nodes created afterward would get processed
// at save time.
$highest
=
db_
query
(
"SELECT nid FROM
{
node
}
ORDER BY nid DESC LIMIT 0,1"
)
->
fetchField
();
$count
=
db_
query
(
"SELECT count(nid) FROM
{
node
}
"
)
->
fetchField
();
$highest
=
$database
->
query
(
"SELECT nid FROM
{
node
}
ORDER BY nid DESC LIMIT 0,1"
)
->
fetchField
();
$count
=
$database
->
query
(
"SELECT count(nid) FROM
{
node
}
"
)
->
fetchField
();
\Drupal
::
state
()
->
set
(
'node_access_rebuild_progressive.current'
,
$highest
+
1
);
\Drupal
::
state
()
->
set
(
'node_access_rebuild_progressive.processed'
,
0
);
\Drupal
::
logger
(
'node_access_rebuild_progressive'
)
->
info
(
'%count nodes queued for node access rebuild.'
,
[
'%count'
=>
$count
]);
}
...
...
@@ -50,7 +55,7 @@ function node_access_rebuild_progressive_trigger() {
* Reset grants to a clean state.
*/
function
node_access_rebuild_progressive_set_default
()
{
$access_control_handler
=
\Drupal
::
entityM
anager
(
)
->
getAccessControlHandler
(
'node'
);
$access_control_handler
=
\Drupal
::
service
(
'entity_type.m
anager
'
)
->
getAccessControlHandler
(
'node'
);
$access_control_handler
->
deleteGrants
();
$access_control_handler
->
writeDefaultGrant
();
}
...
...
@@ -76,12 +81,14 @@ function node_access_rebuild_progressive_process_cron() {
function
node_access_rebuild_progressive_process_chunk
()
{
$current
=
\Drupal
::
state
()
->
get
(
'node_access_rebuild_progressive.current'
);
$chunk_size
=
\Drupal
::
config
(
'node_access_rebuild_progressive.settings'
)
->
get
(
'chunk'
);
$nids
=
db_query
(
"SELECT nid FROM
{
node
}
WHERE nid < :current ORDER BY nid DESC LIMIT 0,
$chunk_size
"
,
[
':current'
=>
$current
])
->
fetchCol
();
$nids
=
\Drupal
::
database
()
->
query
(
"SELECT nid FROM
{
node
}
WHERE nid < :current ORDER BY nid DESC LIMIT 0,
$chunk_size
"
,
[
':current'
=>
$current
])
->
fetchCol
();
$total
=
count
(
$nids
);
$processed
=
0
;
if
(
$total
)
{
$access_control_handler
=
\Drupal
::
entityM
anager
(
)
->
getAccessControlHandler
(
'node'
);
$node_storage
=
\Drupal
::
entityM
anager
(
)
->
getStorage
(
'node'
);
$access_control_handler
=
\Drupal
::
service
(
"entity_type.m
anager
"
)
->
getAccessControlHandler
(
'node'
);
$node_storage
=
\Drupal
::
service
(
"entity_type.m
anager
"
)
->
getStorage
(
'node'
);
$nodes
=
$node_storage
->
loadMultiple
(
$nids
);
$node_storage
->
resetCache
();
foreach
(
$nodes
as
$node
)
{
...
...
@@ -114,14 +121,20 @@ function node_access_rebuild_progressive_finished() {
*/
function
_drush_node_access_rebuild_progressive_rebuild
()
{
node_access_rebuild_progressive_trigger
();
$self_record
=
new
SiteAliasManager
();
$finished
=
FALSE
;
$total
=
db_query
(
"SELECT count(nid) FROM
{
node
}
"
)
->
fetchField
();
$processed
=
0
;
$total
=
\Drupal
::
database
()
->
query
(
"SELECT count(nid) FROM
{
node
}
"
)
->
fetchField
();
while
(
!
$finished
)
{
$cmd
=
'_drush_node_access_rebuild_progressive_process('
.
$total
.
','
.
$processed
.
');'
;
$data
=
drush_invoke_process
(
'@self'
,
'php-eval'
,
[
$cmd
]);
$processed
=
$data
[
'context'
][
'_drush_node_access_rebuild_progressive_processed'
];
$finished
=
drush_get_error
()
||
!
$data
||
(
isset
(
$data
[
'context'
][
'_drush_node_access_rebuild_progressive_finished'
])
&&
$data
[
'context'
][
'_drush_node_access_rebuild_progressive_finished'
]
===
TRUE
);
$cmd
=
'_drush_node_access_rebuild_progressive_process('
.
$total
.
');'
;
$process
=
Drush
::
drush
(
$self_record
->
getSelf
(),
'php-eval'
,
[
$cmd
],
[
'format'
=>
'json'
]);
// We capture the output to print it here and check if it finished.
$process
->
run
(
$process
->
showRealtime
()
->
hideStdout
());
if
(
!
$process
->
isSuccessful
()
||
empty
(
$process
->
getOutput
()))
{
$finished
=
TRUE
;
}
else
{
\Drupal
::
logger
(
'node_access_rebuild_progressive'
)
->
notice
(
$process
->
getOutput
(),
[]);
}
}
}
...
...
@@ -133,21 +146,23 @@ function _drush_node_access_rebuild_progressive_rebuild() {
* @param int $processed
* Number of nodes processed.
*/
function
_drush_node_access_rebuild_progressive_process
(
int
$total
,
int
$processed
)
{
function
_drush_node_access_rebuild_progressive_process
(
int
$total
)
{
$processed
=
\Drupal
::
state
()
->
get
(
'node_access_rebuild_progressive.processed'
,
0
);
$pass
=
node_access_rebuild_progressive_process_chunk
();
$processed
+=
$pass
[
'processed'
];
drush_set_option
(
'_drush_
node_access_rebuild_progressive
_
processed'
,
$processed
);
\Drupal
::
state
()
->
set
(
'
node_access_rebuild_progressive
.
processed'
,
$processed
);
$figures
=
[
'@pass'
=>
$pass
[
'processed'
],
'@nodes'
=>
$pass
[
'total'
],
'@processed'
=>
$processed
,
'@total'
=>
$total
,
];
if
(
empty
(
$pass
[
'total'
]))
{
drush_set_option
(
'_drush_node_access_rebuild_progressive_finished'
,
TRUE
);
return
;
}
drush_print
(
dt
(
'Processed @pass of @nodes nodes (@processed/@total).'
,
$figures
));
print
dt
(
'Processed @pass of @nodes nodes (@processed/@total).'
,
$figures
);
}
/**
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment