Inherit resource group of last sibling added or if no sibling is present of the current parent
<?php
/*
Inherit resource group of last sibling added
or if no sibling is present of the current parent
*/
$debug = false;
$msg = array();
switch ($modx->event->name) {
case 'OnDocFormSave':
if ($mode == 'new') {// resource created
$msg['mode'] = $mode;
$msg['id'] = $resource->get('id');
if($resource->get('parent')){
// Parent
$parentId = $resource->get('parent');
$msg['parent'] = $parentId;
// Siblings
$c = $modx->newQuery('modResource', array('parent'=> $parentId ));
$c->sortby('menuindex', 'desc');
$siblings = $modx->getCollection('modResource', $c);
if (count($siblings)>0) {
end($siblings);
prev($siblings);
$sibling = prev($siblings);
$inheritId = $sibling->get('id');
}
// No siblings, use parent
else {
$inheritId = $parentId;
}
$msg['inheritId'] = $inheritId;
if($inheritId !== false) {
$childId = $resource->get('id');
$childResourceGroupCollection = $modx->getCollection('modResourceGroupResource', array('document' => $childId));
// Build an array of resource group IDs for this resource
$childResourceGroups = array();
foreach($childResourceGroupCollection as $group) {
$childResourceGroups[] = $group->get('document_group');
}
$msg['childResourceGroups'] = $childResourcceGroups;
$resourceGroups = $modx->getCollection('modResourceGroupResource',array('document' => $inheritId));
$msg['resourceGroups'] = $resourceGroups;
if ($resourceGroups) {
// For each of the inherited resource groups, get the group ID and join the
// new resource to that group.
foreach($resourceGroups as $group) {
$groupId = $group->get('document_group');
// If the resource is not already in the RG, join the group.
if ( ! in_array($groupId, $childResourceGroups)) {
$resource->joinGroup($groupId);
}
}
}
}
}
}
else {
// existing resource was updated mod=='upd'
}
break;
}
if($debug){
$modx->log(modX::LOG_LEVEL_ERROR, '[inheritResourceGroup]' . print_r($msg,true));
}