/** * Search Users and wishLists by username or email * @param string|VulnerableField $searchQuery * @return array */ public function searchWishlists($searchQuery) { if ($searchQuery instanceof VulnerableField) { $searchString = $searchQuery->copy('%' . $searchQuery->raw() . '%'); } else { $searchString = '%' . $searchQuery . '%'; } /** @var User[] $users */ $users = $this->pixie->db->query('select')->fields('id')->table('tbl_users', 'user')->join(['tbl_wish_list', 'wishlists'], ['wishlists.user_id', 'user.id'])->where('wishlists.type', 'public')->where('and', [array('email', 'like', $searchString), array('or', array('username', 'like', $searchString))])->execute()->as_array(true); $userIds = []; foreach ($users as $usr) { $userIds[] = $usr->id; // That's correct, not ->id() } if ($userIds) { $users = $this->pixie->orm->get('User')->where('id', 'IN', $this->pixie->db->expr('(' . implode(',', $userIds) . ')'))->find_all()->as_array(); } else { $users = []; } $userList = array(); $followers = array(); if ($this->pixie->auth->user() !== null) { $userFollowers = $this->pixie->orm->get('WishListFollowers')->where('user_id', $this->pixie->auth->user()->id())->find_all()->as_array(); foreach ($userFollowers as $userFollower) { $followers[] = $userFollower->follower_id; } } $curUser = $this->pixie->auth->user(); foreach ($users as $user) { if ($curUser && $user->id() == $curUser->id()) { continue; } $userList[$user->id()] = $user->as_array(); $userList[$user->id()]['remembered'] = in_array($user->id(), $followers) ? true : false; $userList[$user->id()]['wishLists'] = array(); $publicListExists = false; foreach ($user->lists as $list) { if ($list->type != self::TYPE_PUBLIC) { continue; } $userList[$user->id()]['wishLists'][] = $list->as_array(); $publicListExists = true; } if (!$publicListExists) { unset($userList[$user->id()]); } } return $userList; }