mirror of
https://github.com/wekan/wekan.git
synced 2026-01-04 08:38:49 +01:00
Merge branch 'master' into search-debug
This commit is contained in:
commit
6ef612d04e
11 changed files with 323 additions and 124 deletions
|
|
@ -2,40 +2,47 @@
|
|||
// non-archived boards:
|
||||
// 1. that the user is a member of
|
||||
// 2. the user has starred
|
||||
import Users from "../../models/users";
|
||||
import Org from "../../models/org";
|
||||
import Team from "../../models/team";
|
||||
|
||||
Meteor.publish('boards', function() {
|
||||
const userId = this.userId;
|
||||
// Ensure that the user is connected. If it is not, we need to return an empty
|
||||
// array to tell the client to remove the previously published docs.
|
||||
if (!Match.test(userId, String) || !userId) return [];
|
||||
if (!Match.test(userId, String) || !userId) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// Defensive programming to verify that starredBoards has the expected
|
||||
// format -- since the field is in the `profile` a user can modify it.
|
||||
const { starredBoards = [] } = (Users.findOne(userId) || {}).profile || {};
|
||||
check(starredBoards, [String]);
|
||||
// const { starredBoards = [] } = (Users.findOne(userId) || {}).profile || {};
|
||||
// check(starredBoards, [String]);
|
||||
|
||||
let currUser = Users.findOne(userId);
|
||||
let orgIdsUserBelongs = currUser!== 'undefined' && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
|
||||
let teamIdsUserBelongs = currUser!== 'undefined' && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
|
||||
let orgsIds = [];
|
||||
let teamsIds = [];
|
||||
if(orgIdsUserBelongs && orgIdsUserBelongs != ''){
|
||||
orgsIds = orgIdsUserBelongs.split(',');
|
||||
}
|
||||
if(teamIdsUserBelongs && teamIdsUserBelongs != ''){
|
||||
teamsIds = teamIdsUserBelongs.split(',');
|
||||
}
|
||||
// let currUser = Users.findOne(userId);
|
||||
// let orgIdsUserBelongs = currUser!== 'undefined' && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
|
||||
// let teamIdsUserBelongs = currUser!== 'undefined' && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
|
||||
// let orgsIds = [];
|
||||
// let teamsIds = [];
|
||||
// if(orgIdsUserBelongs && orgIdsUserBelongs != ''){
|
||||
// orgsIds = orgIdsUserBelongs.split(',');
|
||||
// }
|
||||
// if(teamIdsUserBelongs && teamIdsUserBelongs != ''){
|
||||
// teamsIds = teamIdsUserBelongs.split(',');
|
||||
// }
|
||||
return Boards.find(
|
||||
{
|
||||
archived: false,
|
||||
$or: [
|
||||
{
|
||||
// _id: { $in: starredBoards }, // Commented out, to get a list of all public boards
|
||||
permission: 'public',
|
||||
},
|
||||
{ members: { $elemMatch: { userId, isActive: true } } },
|
||||
{'orgs.orgId': {$in : orgsIds}},
|
||||
{'teams.teamId': {$in : teamsIds}},
|
||||
],
|
||||
_id: { $in: Boards.userBoardIds(userId, false) },
|
||||
// $or: [
|
||||
// {
|
||||
// // _id: { $in: starredBoards }, // Commented out, to get a list of all public boards
|
||||
// permission: 'public',
|
||||
// },
|
||||
// { members: { $elemMatch: { userId, isActive: true } } },
|
||||
// {'orgs.orgId': {$in : orgsIds}},
|
||||
// {'teams.teamId': {$in : teamsIds}},
|
||||
// ],
|
||||
},
|
||||
{
|
||||
fields: {
|
||||
|
|
@ -58,19 +65,79 @@ Meteor.publish('boards', function() {
|
|||
);
|
||||
});
|
||||
|
||||
Meteor.publish('boardsReport', function() {
|
||||
const userId = this.userId;
|
||||
// Ensure that the user is connected. If it is not, we need to return an empty
|
||||
// array to tell the client to remove the previously published docs.
|
||||
if (!Match.test(userId, String) || !userId) return [];
|
||||
|
||||
const boards = Boards.find(
|
||||
{
|
||||
_id: { $in: Boards.userBoardIds(userId, null) },
|
||||
},
|
||||
{
|
||||
fields: {
|
||||
_id: 1,
|
||||
boardId: 1,
|
||||
archived: 1,
|
||||
slug: 1,
|
||||
title: 1,
|
||||
description: 1,
|
||||
color: 1,
|
||||
members: 1,
|
||||
orgs: 1,
|
||||
teams: 1,
|
||||
permission: 1,
|
||||
type: 1,
|
||||
sort: 1,
|
||||
},
|
||||
sort: { sort: 1 /* boards default sorting */ },
|
||||
},
|
||||
);
|
||||
|
||||
const userIds = [];
|
||||
const orgIds = [];
|
||||
const teamIds = [];
|
||||
boards.forEach(board => {
|
||||
if (board.members) {
|
||||
board.members.forEach(member => {
|
||||
userIds.push(member.userId);
|
||||
});
|
||||
}
|
||||
if (board.orgs) {
|
||||
board.orgs.forEach(org => {
|
||||
orgIds.push(org.orgId);
|
||||
});
|
||||
}
|
||||
if (board.teams) {
|
||||
board.teams.forEach(team => {
|
||||
teamIds.push(team.teamId);
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
return [
|
||||
boards,
|
||||
Users.find({ _id: { $in: userIds } }, { fields: Users.safeFields }),
|
||||
Team.find({ _id: { $in: teamIds } }),
|
||||
Org.find({ _id: { $in: orgIds } }),
|
||||
]
|
||||
});
|
||||
|
||||
Meteor.publish('archivedBoards', function() {
|
||||
const userId = this.userId;
|
||||
if (!Match.test(userId, String)) return [];
|
||||
|
||||
return Boards.find(
|
||||
{
|
||||
archived: true,
|
||||
members: {
|
||||
$elemMatch: {
|
||||
userId,
|
||||
isAdmin: true,
|
||||
},
|
||||
},
|
||||
_id: { $in: Boards.userBoardIds(userId, true)},
|
||||
// archived: true,
|
||||
// members: {
|
||||
// $elemMatch: {
|
||||
// userId,
|
||||
// isAdmin: true,
|
||||
// },
|
||||
// },
|
||||
},
|
||||
{
|
||||
fields: {
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ import {
|
|||
PREDICATE_SYSTEM,
|
||||
} from '/config/search-const';
|
||||
import { QueryErrors, QueryParams, Query } from '/config/query-classes';
|
||||
import { CARD_TYPES } from '../../config/const';
|
||||
|
||||
const escapeForRegex = require('escape-string-regexp');
|
||||
|
||||
|
|
@ -587,6 +588,7 @@ Meteor.publish('brokenCards', function(sessionId) {
|
|||
{ boardId: { $in: [null, ''] } },
|
||||
{ swimlaneId: { $in: [null, ''] } },
|
||||
{ listId: { $in: [null, ''] } },
|
||||
{ type: { $nin: CARD_TYPES } },
|
||||
];
|
||||
// console.log('brokenCards selector:', query.selector);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue