I have a SMF2 forum site, where the gallery is implemented through Gallery2 using Oldiesmann’s SMF + G2 Integration Project.
For 2 years, I’ve had the SMF and Gallery work properly together with linked member groups (a mod option), such that member groups auto-synchronized with ones in Gallery. At some point, either with a Gallery or SMF upgrade, users reported that the Gallery part of the site threw cryptic security warnings for non-admins. I explored the issue and figured users were missing in two required groups “Everybody” and “Registered Users”. I had reported it to Oldiesmann, but he claimed he had no control over those required groups and Gallery was self-managing them.
After about a year, I delved into the code and found that in order to sync the groups that a user had in SMF with the groups that a user had in Gallery, the integration code was removing all groups and adding the shared groups. This of course meant that the user was being removed from the required groups: “Everybody” and “Registered Users”. Users with privileged groups did not see the problem.
Here’s the fix that I’ve also submitted to Oldiesmann. But his forum complains when I added the code, so I had to create this post here. It says it does not allow external links (haha).
My fix will ensure that we do not remove the user from required groups and also add the users back into required groups (if necessary). Please note that the cleanup code is necessary because anyone who has ever visited the buggy gallery will have the groups removed, so there’s a lot of cleanup to do. The code provided below should auto-correct this issue.
commit 97075cd4e20d2807011b38cd293ccc38c728db9a Author: Inderpreet Singh <inderpreet99gmail> Date: Sat Jul 28 10:33:40 2012 -0500 PJ fix for SMF Gallery2 Integration: Avoid g2 required groups: Everybody and Registered Users groups from getting removed Add user to the required groups (cleanup our mess) diff --git a/Sources/Gallery.php b/Sources/Gallery.php index 74652fe..c289678 100755 --- a/Sources/Gallery.php +++ b/Sources/Gallery.php @@ -1348,10 +1348,32 @@ function groupCheck() } else { + + // Avoid g2 required groups: Everybody and Registered Users groups from getting removed! + $groupstoignore = array('Everybody', 'Registered Users'); + $groupstoadd = $groupstoignore; + foreach($galgroups as $gid => $gname) + { + if(in_array($gname, $groupstoignore)) + { + unset($galgroups[$gid]); + $groupstoadd = array_diff($groupstoadd, array($gname)); + } + } + + // Add user to the required groups (cleanup our mess) + foreach($groupstoadd as $gname) { + list($ret, $group) = GalleryCoreApi::fetchGroupByGroupName($gname); + if($ret) + { + fatal_error($ret->getAsText(), 'gallery'); + } + GalleryCoreApi::addUserToGroup($context['user']['g2_uid'], $group->getId()); + } + // array_diff will give us an array of all the values in $galgroups that aren't in $galsmfgroups // $galgroups uses the group IDs as the keys, and the group names as the values. We only want the group IDs... $groupstoremove = array_diff(array_keys($galgroups), $galsmfgroups); - // Remove them from any group(s) they no longer belong to if(count($groupstoremove) > 0) {