/** * Helper function to transfer the ownership of a group to a new user * * @param ElggGroup $group the group to transfer * @param ElggUser $new_owner the new owner * * @return bool */ function group_tools_transfer_group_ownership(ElggGroup $group, ElggUser $new_owner) { if (!$group instanceof ElggGroup || !$group->canEdit()) { return false; } if (!$new_owner instanceof ElggUser) { return false; } $loggedin_user = elgg_get_logged_in_user_entity(); // register plugin hook to make sure transfer can complete elgg_register_plugin_hook_handler('permissions_check', 'group', '\\ColdTrick\\GroupTools\\Access::allowGroupOwnerTransfer'); $old_owner = $group->getOwnerEntity(); // transfer ownership $group->owner_guid = $new_owner->getGUID(); $group->container_guid = $new_owner->getGUID(); if (!$group->save()) { return false; } // make sure user is added to the group $group->join($new_owner); // remove existing group administrator role for new owner remove_entity_relationship($new_owner->getGUID(), 'group_admin', $group->getGUID()); // check for group icon if (!empty($group->icontime)) { $prefix = "groups/{$group->getGUID()}"; $sizes = elgg_get_icon_sizes($group->getType()); $ofh = new ElggFile(); $ofh->owner_guid = $old_owner->getGUID(); $nfh = new ElggFile(); $nfh->owner_guid = $group->getOwnerGUID(); foreach ($sizes as $size => $info) { // set correct file to handle $ofh->setFilename("{$prefix}{$size}.jpg"); if (!$ofh->exists()) { // file doesn't exist continue; } $nfh->setFilename("{$prefix}{$size}.jpg"); // open files $ofh->open('read'); $nfh->open('write'); // copy file $nfh->write($ofh->grabFile()); // close file $ofh->close(); $nfh->close(); // cleanup old file $ofh->delete(); } $group->icontime = time(); } // move metadata of the group to the new owner $options = ['guid' => $group->getGUID(), 'limit' => false]; $metadata = elgg_get_metadata($options); if (!empty($metadata)) { foreach ($metadata as $md) { if ($md->owner_guid == $old_owner->getGUID()) { $md->owner_guid = $new_owner->getGUID(); $md->save(); } } } // notify new owner if ($new_owner->getGUID() !== $loggedin_user->getGUID()) { $subject = elgg_echo('group_tools:notify:transfer:subject', [$group->name]); $message = elgg_echo('group_tools:notify:transfer:message', [$new_owner->name, $loggedin_user->name, $group->name, $group->getURL()]); notify_user($new_owner->getGUID(), $group->getGUID(), $subject, $message); } // unregister plugin hook to make sure transfer can complete elgg_unregister_plugin_hook_handler('permissions_check', 'group', '\\ColdTrick\\GroupTools\\Access::allowGroupOwnerTransfer'); return true; }