public function CourseObjectBook::save in Course 8.2
Same name and namespace in other branches
- 8.3 modules/course_book/src/Plugin/course/CourseObject/CourseObjectBook.php \Drupal\course_book\Plugin\course\CourseObject\CourseObjectBook::save()
- 3.x modules/course_book/src/Plugin/course/CourseObject/CourseObjectBook.php \Drupal\course_book\Plugin\course\CourseObject\CourseObjectBook::save()
Override of CourseObjectNode::save()
We have to remove the stock "view" content access permissions on Books, if node_access_book is enabled. Otherwise, users outside of the course can still access child book pages of a private book parent.
Overrides CourseObject::save
File
- modules/
course_book/ src/ Plugin/ course/ CourseObject/ CourseObjectBook.php, line 164
Class
- CourseObjectBook
- Plugin annotation @CourseObject( id = "book", label = "Book", handlers = { "fulfillment" = "\Drupal\course_book\Plugin\course\CourseObject\CourseObjectBookFulfillment" } )
Namespace
Drupal\course_book\Plugin\course\CourseObjectCode
public function save() {
// Take care of the parent book page.
parent::save();
if ($this
->hasNodePrivacySupport() && $this
->getOption('private') && Drupal::moduleHandler()
->moduleExists('node_access_book')) {
// Remove "view" permissions on all the child pages.
$flat = array();
$tree = menu_tree_all_data($this
->getNode()->book['menu_name']);
_book_flatten_menu($tree, $flat);
foreach ($flat as $item) {
$nid = str_replace('node/', '', $item['link_path']);
$node = \Drupal\node\Entity\Node::load($nid);
$settings = content_access_get_per_node_settings($node);
$settings['view'] = array();
content_access_save_per_node_settings($node, $settings);
// Resave node to update access.
node_access_acquire_grants($node);
}
}
}