--- Redmine.pm 2013-12-23 09:48:38.000000000 +0100 +++ Redmine.enhanced.pm 2014-04-18 13:59:49.000000000 +0200 @@ -238,17 +238,37 @@ sub RedmineDSN { my ($self, $parms, $arg) = @_; $self->{RedmineDSN} = $arg; - my $query = "SELECT - users.hashed_password, users.salt, users.auth_source_id, roles.permissions, projects.status - FROM projects, users, roles - WHERE - users.login=? - AND projects.identifier=? - AND users.status=1 + my $query = "SELECT users.hashed_password, users.salt, users.auth_source_id, roles.permissions, projects.status + FROM projects, users, roles, repositories + WHERE + users.login = ? AND ( - roles.id IN (SELECT member_roles.role_id FROM members, member_roles WHERE members.user_id = users.id AND members.project_id = projects.id AND members.id = member_roles.member_id) - OR - (roles.builtin=1 AND cast(projects.is_public as CHAR) IN ('t', '1')) + projects.identifier = ? + OR projects.id + IN ( + + SELECT repositories.project_id + FROM repositories + WHERE repositories.url LIKE ? + ) + ) + AND users.status =1 + AND ( + roles.id + IN ( + SELECT member_roles.role_id + FROM members, member_roles + WHERE members.user_id = users.id + AND members.project_id = projects.id + AND members.id = member_roles.member_id + ) + OR ( + roles.builtin =1 + AND CAST( projects.is_public AS CHAR ) + IN ( + 't', '1' + ) + ) ) AND roles.permissions IS NOT NULL"; $self->{RedmineQuery} = trim($query); @@ -458,7 +478,9 @@ } my $query = $cfg->{RedmineQuery}; my $sth = $dbh->prepare($query); - $sth->execute($redmine_user, $project_id); + + my $repo_url = "%".$project_id.".git"; + $sth->execute($redmine_user, $project_id, $repo_url); my $ret; while (my ($hashed_password, $salt, $auth_source_id, $permissions, $project_status) = $sth->fetchrow_array) {