jFC1 --> actual permission (full regex match) [1] => j --> permission type (j for root levels, "j-" for sub-categories which are also reverse permissions) [2] => FC1 --> the featured collection category branch path (separated by pipes "|" and using the category name) ) Array ( [0] => j-FC1|FC1/1.1|FC1/1.1/1.1.1 [1] => j- [2] => FC1|FC1/1.1|FC1/1.1/1.1.1 ) */ $old_format_perms[] = $matches; } } $update_permissions = false; foreach ($old_format_perms as $j_perm) { $find_fc_by_name = explode("|", $j_perm[2]); $find_fc_by_name = trim(end($find_fc_by_name)); if ($find_fc_by_name == "") { logScript("Unable to determine the leaf node name for Featured Collection Category '{$j_perm[2]}'"); continue; } $found_fc_categ_refs = ps_array( "SELECT DISTINCT c.ref AS `value` FROM collection AS c LEFT JOIN collection AS cc ON c.ref = cc.parent WHERE c.public = 1 AND c.`type`= ? AND c.`name` = ? GROUP BY c.ref HAVING count(DISTINCT cc.ref) > 0", ['i', COLLECTION_TYPE_FEATURED, 's' ,$find_fc_by_name] ); $fc_categ_ref = null; foreach ($found_fc_categ_refs as $found_fc_categ_ref) { // Ensure there were no issues finding the correct featured collection by double checking that the branch paths match $found_branch_path = get_featured_collection_category_branch_by_leaf($found_fc_categ_ref, array()); $branch_path_str = array_reduce($found_branch_path, function ($carry, $item) { return "{$carry}|{$item["name"]}"; }, ""); $branch_path_str = mb_substr($branch_path_str, 1, mb_strlen($branch_path_str)); if ($j_perm[2] != $branch_path_str) { logScript("Found a featured collection category but computed branch path is different! For the old permission this is '{$j_perm[2]}' and for the new one it is '{$branch_path_str}'. ResourceSpace might have found a similar named collection incorrectly! Skipping..."); continue; } $fc_categ_ref = $found_fc_categ_ref; } if (is_null($fc_categ_ref)) { logScript("Unable to find Featured Collection Category named '{$j_perm[2]}'"); continue; } // add the new permission format $new_fc_perm = ($j_perm[1] == "j" ? "" : "-") . "j{$fc_categ_ref}"; $permissions[] = $new_fc_perm; // remove the old permission format $permissions = array_diff($permissions, array("{$j_perm[0]}")); $update_permissions = true; } if ($update_permissions) { $permissions_str = join(",", $permissions); logScript("New format permissions: " . $permissions_str); save_usergroup($ug["ref"], array('permissions' => $permissions_str)); } } set_sysvar(SYSVAR_UPGRADE_PROGRESS_SCRIPT, "Successfully migrated featured collections permissions to the new format!");