Ejemplo n.º 1
0
            } else {
                $k[$rev_temp_list[$j + 1]][$value] = $k[$value];
            }
            $j++;
        }
    }
}
//Constructing the Roledetails array
$role_det = getAllRoleDetails();
$query = "select * from vtiger_role";
$result = $adb->pquery($query, array());
$num_rows = $adb->num_rows($result);
$mask_roleid = array();
$del_roleid = vtlib_purify($_REQUEST['maskid']);
if ($del_roleid != '' && strlen($del_roleid) > 0) {
    $mask_roleid = getRoleAndSubordinatesRoleIds($del_roleid);
}
$roleout = '';
$roleout .= indent($hrarray, $roleout, $role_det, $mask_roleid);
/** recursive function to construct the role tree ui 
 * @param $hrarray -- Hierarchial role tree array with only the roleid:: Type array
 * @param $roleout -- html string ouput of the constucted role tree ui:: Type varchar 
 * @param $role_det -- Roledetails array got from calling getAllRoleDetails():: Type array
 * @param $mask_roleid -- role id to be masked from selecting in the tree:: Type integer 
 * @returns $role_out -- html string ouput of the constucted role tree ui:: Type string
 *
 */
function indent($hrarray, $roleout, $role_det, $mask_roleid = '')
{
    global $theme, $app_strings, $default_charset;
    $theme_path = "themes/" . $theme . "/";
/** Gives an array which contains the information for what all roles, groups and user data is to be shared with the spcified user for the specified module 
 * @param $module -- module name:: Type varchar
 * @param $userid -- user id:: Type integer
 * @param $def_org_share -- default organization sharing permission array:: Type array
 * @param $current_user_roles -- roleid:: Type varchar
 * @param $parent_roles -- parent roles:: Type varchar
 * @param $current_user_groups -- user id:: Type integer
 * @returns $mod_share_permission -- array which contains the id of roles,group and users data shared with specifed user for the specified module
 */
function getUserModuleSharingObjects($module, $userid, $def_org_share, $current_user_roles, $parent_roles, $current_user_groups)
{
    global $adb;
    $mod_tabid = getTabid($module);
    $mod_share_permission;
    $mod_share_read_permission = array();
    $mod_share_write_permission = array();
    $mod_share_read_permission['ROLE'] = array();
    $mod_share_write_permission['ROLE'] = array();
    $mod_share_read_permission['GROUP'] = array();
    $mod_share_write_permission['GROUP'] = array();
    $share_id_members = array();
    $share_id_groupmembers = array();
    //If Sharing of leads is Private
    if ($def_org_share[$mod_tabid] == 3 || $def_org_share[$mod_tabid] == 0) {
        $role_read_per = array();
        $role_write_per = array();
        $rs_read_per = array();
        $rs_write_per = array();
        $grp_read_per = array();
        $grp_write_per = array();
        //Retreiving from vtiger_role to vtiger_role
        $query = "select vtiger_datashare_role2role.* from vtiger_datashare_role2role inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_role2role.shareid where vtiger_datashare_module_rel.tabid=? and vtiger_datashare_role2role.to_roleid=?";
        $result = $adb->pquery($query, array($mod_tabid, $current_user_roles));
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_roleid = $adb->query_result($result, $i, 'share_roleid');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_role_members = array();
            $share_id_roles = array();
            $share_id_roles[] = $share_roleid;
            $share_id_role_members['ROLE'] = $share_id_roles;
            $share_id_members[$shareid] = $share_id_role_members;
            $share_permission = $adb->query_result($result, $i, 'permission');
            if ($share_permission == 1) {
                if ($def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_roleid, $role_read_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_read_per[$share_roleid] = $share_role_users;
                    }
                }
                if (!array_key_exists($share_roleid, $role_write_per)) {
                    $share_role_users = getRoleUserIds($share_roleid);
                    $role_write_per[$share_roleid] = $share_role_users;
                }
            } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                if (!array_key_exists($share_roleid, $role_read_per)) {
                    $share_role_users = getRoleUserIds($share_roleid);
                    $role_read_per[$share_roleid] = $share_role_users;
                }
            }
        }
        //Retreiving from role to rs
        $parRoleList = array();
        foreach ($parent_roles as $par_role_id) {
            array_push($parRoleList, $par_role_id);
        }
        array_push($parRoleList, $current_user_roles);
        $query = "select vtiger_datashare_role2rs.* from vtiger_datashare_role2rs inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_role2rs.shareid where vtiger_datashare_module_rel.tabid=? and vtiger_datashare_role2rs.to_roleandsubid in (" . generateQuestionMarks($parRoleList) . ")";
        $result = $adb->pquery($query, array($mod_tabid, $parRoleList));
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_roleid = $adb->query_result($result, $i, 'share_roleid');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_role_members = array();
            $share_id_roles = array();
            $share_id_roles[] = $share_roleid;
            $share_id_role_members['ROLE'] = $share_id_roles;
            $share_id_members[$shareid] = $share_id_role_members;
            $share_permission = $adb->query_result($result, $i, 'permission');
            if ($share_permission == 1) {
                if ($def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_roleid, $role_read_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_read_per[$share_roleid] = $share_role_users;
                    }
                }
                if (!array_key_exists($share_roleid, $role_write_per)) {
                    $share_role_users = getRoleUserIds($share_roleid);
                    $role_write_per[$share_roleid] = $share_role_users;
                }
            } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                if (!array_key_exists($share_roleid, $role_read_per)) {
                    $share_role_users = getRoleUserIds($share_roleid);
                    $role_read_per[$share_roleid] = $share_role_users;
                }
            }
        }
        //Get roles from Role2Grp
        $grpIterator = false;
        $groupList = $current_user_groups;
        if (empty($groupList)) {
            $groupList = array(0);
        }
        if (!empty($groupList)) {
            $query = "select vtiger_datashare_role2group.* from vtiger_datashare_role2group inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_role2group.shareid where vtiger_datashare_module_rel.tabid=?";
            $qparams = array($mod_tabid);
            if (count($groupList) > 0) {
                $query .= " and vtiger_datashare_role2group.to_groupid in (" . generateQuestionMarks($groupList) . ")";
                array_push($qparams, $groupList);
            }
            $result = $adb->pquery($query, $qparams);
            $num_rows = $adb->num_rows($result);
            for ($i = 0; $i < $num_rows; $i++) {
                $share_roleid = $adb->query_result($result, $i, 'share_roleid');
                $shareid = $adb->query_result($result, $i, 'shareid');
                $share_id_role_members = array();
                $share_id_roles = array();
                $share_id_roles[] = $share_roleid;
                $share_id_role_members['ROLE'] = $share_id_roles;
                $share_id_members[$shareid] = $share_id_role_members;
                $share_permission = $adb->query_result($result, $i, 'permission');
                if ($share_permission == 1) {
                    if ($def_org_share[$mod_tabid] == 3) {
                        if (!array_key_exists($share_roleid, $role_read_per)) {
                            $share_role_users = getRoleUserIds($share_roleid);
                            $role_read_per[$share_roleid] = $share_role_users;
                        }
                    }
                    if (!array_key_exists($share_roleid, $role_write_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_write_per[$share_roleid] = $share_role_users;
                    }
                } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_roleid, $role_read_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_read_per[$share_roleid] = $share_role_users;
                    }
                }
            }
        }
        //Retreiving from rs to vtiger_role
        $query = "select vtiger_datashare_rs2role.* from vtiger_datashare_rs2role inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_rs2role.shareid where vtiger_datashare_module_rel.tabid=? and vtiger_datashare_rs2role.to_roleid=?";
        $result = $adb->pquery($query, array($mod_tabid, $current_user_roles));
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_rsid = $adb->query_result($result, $i, 'share_roleandsubid');
            $share_roleids = getRoleAndSubordinatesRoleIds($share_rsid);
            $share_permission = $adb->query_result($result, $i, 'permission');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_role_members = array();
            $share_id_roles = array();
            foreach ($share_roleids as $share_roleid) {
                $share_id_roles[] = $share_roleid;
                if ($share_permission == 1) {
                    if ($def_org_share[$mod_tabid] == 3) {
                        if (!array_key_exists($share_roleid, $role_read_per)) {
                            $share_role_users = getRoleUserIds($share_roleid);
                            $role_read_per[$share_roleid] = $share_role_users;
                        }
                    }
                    if (!array_key_exists($share_roleid, $role_write_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_write_per[$share_roleid] = $share_role_users;
                    }
                } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_roleid, $role_read_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_read_per[$share_roleid] = $share_role_users;
                    }
                }
            }
            $share_id_role_members['ROLE'] = $share_id_roles;
            $share_id_members[$shareid] = $share_id_role_members;
        }
        //Retreiving from rs to rs
        $parRoleList = array();
        foreach ($parent_roles as $par_role_id) {
            array_push($parRoleList, $par_role_id);
        }
        array_push($parRoleList, $current_user_roles);
        $query = "select vtiger_datashare_rs2rs.* from vtiger_datashare_rs2rs inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_rs2rs.shareid where vtiger_datashare_module_rel.tabid=? and vtiger_datashare_rs2rs.to_roleandsubid in (" . generateQuestionMarks($parRoleList) . ")";
        $result = $adb->pquery($query, array($mod_tabid, $parRoleList));
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_rsid = $adb->query_result($result, $i, 'share_roleandsubid');
            $share_roleids = getRoleAndSubordinatesRoleIds($share_rsid);
            $share_permission = $adb->query_result($result, $i, 'permission');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_role_members = array();
            $share_id_roles = array();
            foreach ($share_roleids as $share_roleid) {
                $share_id_roles[] = $share_roleid;
                if ($share_permission == 1) {
                    if ($def_org_share[$mod_tabid] == 3) {
                        if (!array_key_exists($share_roleid, $role_read_per)) {
                            $share_role_users = getRoleUserIds($share_roleid);
                            $role_read_per[$share_roleid] = $share_role_users;
                        }
                    }
                    if (!array_key_exists($share_roleid, $role_write_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_write_per[$share_roleid] = $share_role_users;
                    }
                } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_roleid, $role_read_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_read_per[$share_roleid] = $share_role_users;
                    }
                }
            }
            $share_id_role_members['ROLE'] = $share_id_roles;
            $share_id_members[$shareid] = $share_id_role_members;
        }
        //Get roles from Rs2Grp
        $query = "select vtiger_datashare_rs2grp.* from vtiger_datashare_rs2grp inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_rs2grp.shareid where vtiger_datashare_module_rel.tabid=?";
        $qparams = array($mod_tabid);
        if (count($groupList) > 0) {
            $query .= " and vtiger_datashare_rs2grp.to_groupid in (" . generateQuestionMarks($groupList) . ")";
            array_push($qparams, $groupList);
        }
        $result = $adb->pquery($query, $qparams);
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_rsid = $adb->query_result($result, $i, 'share_roleandsubid');
            $share_roleids = getRoleAndSubordinatesRoleIds($share_rsid);
            $share_permission = $adb->query_result($result, $i, 'permission');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_role_members = array();
            $share_id_roles = array();
            foreach ($share_roleids as $share_roleid) {
                $share_id_roles[] = $share_roleid;
                if ($share_permission == 1) {
                    if ($def_org_share[$mod_tabid] == 3) {
                        if (!array_key_exists($share_roleid, $role_read_per)) {
                            $share_role_users = getRoleUserIds($share_roleid);
                            $role_read_per[$share_roleid] = $share_role_users;
                        }
                    }
                    if (!array_key_exists($share_roleid, $role_write_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_write_per[$share_roleid] = $share_role_users;
                    }
                } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_roleid, $role_read_per)) {
                        $share_role_users = getRoleUserIds($share_roleid);
                        $role_read_per[$share_roleid] = $share_role_users;
                    }
                }
            }
            $share_id_role_members['ROLE'] = $share_id_roles;
            $share_id_members[$shareid] = $share_id_role_members;
        }
        $mod_share_read_permission['ROLE'] = $role_read_per;
        $mod_share_write_permission['ROLE'] = $role_write_per;
        //Retreiving from the grp2role sharing
        $query = "select vtiger_datashare_grp2role.* from vtiger_datashare_grp2role inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_grp2role.shareid where vtiger_datashare_module_rel.tabid=? and vtiger_datashare_grp2role.to_roleid=?";
        $result = $adb->pquery($query, array($mod_tabid, $current_user_roles));
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_grpid = $adb->query_result($result, $i, 'share_groupid');
            $share_permission = $adb->query_result($result, $i, 'permission');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_grp_members = array();
            $share_id_grps = array();
            $share_id_grps[] = $share_grpid;
            if ($share_permission == 1) {
                if ($def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_grpid, $grp_read_per)) {
                        $focusGrpUsers = new GetGroupUsers();
                        $focusGrpUsers->getAllUsersInGroup($share_grpid);
                        $share_grp_users = $focusGrpUsers->group_users;
                        $share_grp_subgroups = $focusGrpUsers->group_subgroups;
                        $grp_read_per[$share_grpid] = $share_grp_users;
                        foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                            if (!array_key_exists($subgrpid, $grp_read_per)) {
                                $grp_read_per[$subgrpid] = $subgrpusers;
                            }
                            if (!in_array($subgrpid, $share_id_grps)) {
                                $share_id_grps[] = $subgrpid;
                            }
                        }
                    }
                }
                if (!array_key_exists($share_grpid, $grp_write_per)) {
                    $focusGrpUsers = new GetGroupUsers();
                    $focusGrpUsers->getAllUsersInGroup($share_grpid);
                    $share_grp_users = $focusGrpUsers->group_users;
                    $grp_write_per[$share_grpid] = $share_grp_users;
                    foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                        if (!array_key_exists($subgrpid, $grp_write_per)) {
                            $grp_write_per[$subgrpid] = $subgrpusers;
                        }
                        if (!in_array($subgrpid, $share_id_grps)) {
                            $share_id_grps[] = $subgrpid;
                        }
                    }
                }
            } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                if (!array_key_exists($share_grpid, $grp_read_per)) {
                    $focusGrpUsers = new GetGroupUsers();
                    $focusGrpUsers->getAllUsersInGroup($share_grpid);
                    $share_grp_users = $focusGrpUsers->group_users;
                    $grp_read_per[$share_grpid] = $share_grp_users;
                    foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                        if (!array_key_exists($subgrpid, $grp_read_per)) {
                            $grp_read_per[$subgrpid] = $subgrpusers;
                        }
                        if (!in_array($subgrpid, $share_id_grps)) {
                            $share_id_grps[] = $subgrpid;
                        }
                    }
                }
            }
            $share_id_grp_members['GROUP'] = $share_id_grps;
            $share_id_members[$shareid] = $share_id_grp_members;
        }
        //Retreiving from the grp2rs sharing
        $query = "select vtiger_datashare_grp2rs.* from vtiger_datashare_grp2rs inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_grp2rs.shareid where vtiger_datashare_module_rel.tabid=? and vtiger_datashare_grp2rs.to_roleandsubid in (" . generateQuestionMarks($parRoleList) . ")";
        $result = $adb->pquery($query, array($mod_tabid, $parRoleList));
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_grpid = $adb->query_result($result, $i, 'share_groupid');
            $share_permission = $adb->query_result($result, $i, 'permission');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_grp_members = array();
            $share_id_grps = array();
            $share_id_grps[] = $share_grpid;
            if ($share_permission == 1) {
                if ($def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_grpid, $grp_read_per)) {
                        $focusGrpUsers = new GetGroupUsers();
                        $focusGrpUsers->getAllUsersInGroup($share_grpid);
                        $share_grp_users = $focusGrpUsers->group_users;
                        $grp_read_per[$share_grpid] = $share_grp_users;
                        foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                            if (!array_key_exists($subgrpid, $grp_read_per)) {
                                $grp_read_per[$subgrpid] = $subgrpusers;
                            }
                            if (!in_array($subgrpid, $share_id_grps)) {
                                $share_id_grps[] = $subgrpid;
                            }
                        }
                    }
                }
                if (!array_key_exists($share_grpid, $grp_write_per)) {
                    $focusGrpUsers = new GetGroupUsers();
                    $focusGrpUsers->getAllUsersInGroup($share_grpid);
                    $share_grp_users = $focusGrpUsers->group_users;
                    $grp_write_per[$share_grpid] = $share_grp_users;
                    foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                        if (!array_key_exists($subgrpid, $grp_write_per)) {
                            $grp_write_per[$subgrpid] = $subgrpusers;
                        }
                        if (!in_array($subgrpid, $share_id_grps)) {
                            $share_id_grps[] = $subgrpid;
                        }
                    }
                }
            } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                if (!array_key_exists($share_grpid, $grp_read_per)) {
                    $focusGrpUsers = new GetGroupUsers();
                    $focusGrpUsers->getAllUsersInGroup($share_grpid);
                    $share_grp_users = $focusGrpUsers->group_users;
                    $grp_read_per[$share_grpid] = $share_grp_users;
                    foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                        if (!array_key_exists($subgrpid, $grp_read_per)) {
                            $grp_read_per[$subgrpid] = $subgrpusers;
                        }
                        if (!in_array($subgrpid, $share_id_grps)) {
                            $share_id_grps[] = $subgrpid;
                        }
                    }
                }
            }
            $share_id_grp_members['GROUP'] = $share_id_grps;
            $share_id_members[$shareid] = $share_id_grp_members;
        }
        //Retreiving from the grp2grp sharing
        $query = "select vtiger_datashare_grp2grp.* from vtiger_datashare_grp2grp inner join vtiger_datashare_module_rel on vtiger_datashare_module_rel.shareid=vtiger_datashare_grp2grp.shareid where vtiger_datashare_module_rel.tabid=?";
        $qparams = array($mod_tabid);
        if (count($groupList) > 0) {
            $query .= " and vtiger_datashare_grp2grp.to_groupid in (" . generateQuestionMarks($groupList) . ")";
            array_push($qparams, $groupList);
        }
        $result = $adb->pquery($query, $qparams);
        $num_rows = $adb->num_rows($result);
        for ($i = 0; $i < $num_rows; $i++) {
            $share_grpid = $adb->query_result($result, $i, 'share_groupid');
            $share_permission = $adb->query_result($result, $i, 'permission');
            $shareid = $adb->query_result($result, $i, 'shareid');
            $share_id_grp_members = array();
            $share_id_grps = array();
            $share_id_grps[] = $share_grpid;
            if ($share_permission == 1) {
                if ($def_org_share[$mod_tabid] == 3) {
                    if (!array_key_exists($share_grpid, $grp_read_per)) {
                        $focusGrpUsers = new GetGroupUsers();
                        $focusGrpUsers->getAllUsersInGroup($share_grpid);
                        $share_grp_users = $focusGrpUsers->group_users;
                        $grp_read_per[$share_grpid] = $share_grp_users;
                        foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                            if (!array_key_exists($subgrpid, $grp_read_per)) {
                                $grp_read_per[$subgrpid] = $subgrpusers;
                            }
                            if (!in_array($subgrpid, $share_id_grps)) {
                                $share_id_grps[] = $subgrpid;
                            }
                        }
                    }
                }
                if (!array_key_exists($share_grpid, $grp_write_per)) {
                    $focusGrpUsers = new GetGroupUsers();
                    $focusGrpUsers->getAllUsersInGroup($share_grpid);
                    $share_grp_users = $focusGrpUsers->group_users;
                    $grp_write_per[$share_grpid] = $share_grp_users;
                    foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                        if (!array_key_exists($subgrpid, $grp_write_per)) {
                            $grp_write_per[$subgrpid] = $subgrpusers;
                        }
                        if (!in_array($subgrpid, $share_id_grps)) {
                            $share_id_grps[] = $subgrpid;
                        }
                    }
                }
            } elseif ($share_permission == 0 && $def_org_share[$mod_tabid] == 3) {
                if (!array_key_exists($share_grpid, $grp_read_per)) {
                    $focusGrpUsers = new GetGroupUsers();
                    $focusGrpUsers->getAllUsersInGroup($share_grpid);
                    $share_grp_users = $focusGrpUsers->group_users;
                    $grp_read_per[$share_grpid] = $share_grp_users;
                    foreach ($focusGrpUsers->group_subgroups as $subgrpid => $subgrpusers) {
                        if (!array_key_exists($subgrpid, $grp_read_per)) {
                            $grp_read_per[$subgrpid] = $subgrpusers;
                        }
                        if (!in_array($subgrpid, $share_id_grps)) {
                            $share_id_grps[] = $subgrpid;
                        }
                    }
                }
            }
            $share_id_grp_members['GROUP'] = $share_id_grps;
            $share_id_members[$shareid] = $share_id_grp_members;
        }
        $mod_share_read_permission['GROUP'] = $grp_read_per;
        $mod_share_write_permission['GROUP'] = $grp_write_per;
    }
    $mod_share_permission['read'] = $mod_share_read_permission;
    $mod_share_permission['write'] = $mod_share_write_permission;
    $mod_share_permission['sharingrules'] = $share_id_members;
    return $mod_share_permission;
}
Ejemplo n.º 3
0
 public function CheckSharing($reports4youid)
 {
     //  if this template belongs to current user
     $adb = PearDatabase::getInstance();
     $sql = "SELECT owner, sharingtype FROM its4you_reports4you_settings WHERE reportid = ?";
     $result = $adb->pquery($sql, array($reports4youid));
     $row = $adb->fetchByAssoc($result);
     $owner = $row["owner"];
     $sharingtype = $row["sharingtype"];
     $result = false;
     if ($owner == $this->current_user->id || $this->current_user->is_admin == "on") {
         $result = true;
     } else {
         switch ($sharingtype) {
             //available for all
             case "public":
                 $result = true;
                 break;
                 //available only for superordinate users of template owner, so we get list of all subordinate users of the current user and if template
                 //owner is one of them then template is available for current user
             //available only for superordinate users of template owner, so we get list of all subordinate users of the current user and if template
             //owner is one of them then template is available for current user
             case "private":
                 $subordinateUsers = $this->getSubRoleUserIds($this->current_user->roleid);
                 if (!empty($subordinateUsers) && count($subordinateUsers) > 0) {
                     $result = in_array($owner, $subordinateUsers);
                 } else {
                     $result = false;
                 }
                 break;
                 //available only for those that are in share list
             //available only for those that are in share list
             case "share":
                 $subordinateUsers = $this->getSubRoleUserIds($this->current_user->roleid);
                 if (!empty($subordinateUsers) && count($subordinateUsers) > 0 && in_array($owner, $subordinateUsers)) {
                     $result = true;
                 } else {
                     $member_array = $this->GetSharingMemberArray($reports4youid);
                     if (isset($member_array["users"]) && in_array($this->current_user->id, $member_array["users"])) {
                         $result = true;
                     } elseif (isset($member_array["roles"]) && in_array($this->current_user->roleid, $member_array["roles"])) {
                         $result = true;
                     } else {
                         if (isset($member_array["rs"])) {
                             foreach ($member_array["rs"] as $roleid) {
                                 $roleAndsubordinateRoles = getRoleAndSubordinatesRoleIds($roleid);
                                 if (in_array($this->current_user->roleid, $roleAndsubordinateRoles)) {
                                     $result = true;
                                     break;
                                 }
                             }
                         }
                         if ($result == false && isset($member_array["groups"])) {
                             $current_user_groups = explode(",", fetchUserGroupids($this->current_user->id));
                             $res_array = array_intersect($member_array["groups"], $current_user_groups);
                             if (!empty($res_array) && count($res_array) > 0) {
                                 $result = true;
                             } else {
                                 $result = false;
                             }
                         }
                     }
                 }
                 break;
         }
     }
     return $result;
 }