UNPKG

@rnaga/wp-node

Version:

👉 **[View Full Documentation at rnaga.github.io/wp-node →](https://rnaga.github.io/wp-node/)**

189 lines (188 loc) • 7.33 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var UsersQuery_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.UsersQuery = void 0; const components_1 = require("../core/components"); const roles_1 = require("../core/roles"); const tables_1 = require("../core/tables"); const component_1 = require("../decorators/component"); const alias_1 = require("./alias"); const meta_query_1 = require("./meta.query"); const posts_query_1 = require("./posts.query"); const query_builder_1 = require("./query-builder"); const query_builders_1 = require("./query-builders"); let UsersQuery = UsersQuery_1 = class UsersQuery extends query_builder_1.QueryBuilder { components; roles; alias; builders; builder; table = "users"; #metaJoined = false; constructor(components, roles, alias, builders, builder) { super(alias, builders, builder, UsersQuery_1); this.components = components; this.roles = roles; this.alias = alias; this.builders = builders; this.builder = builder; } get from() { this.builder.table(this.alias.as(this.table)); return this; } get(u) { if (typeof u === "string") { this.where("user_nicename", u) .or.where("user_email", u) .or.where("display_name", u) .or.where("user_login", u); } else { this.whereIn("ID", [u]); } this.builder.first(); return this; } select(columns) { this.builder.select(columns); return this; } withMeta(type = "right") { if (this.#metaJoined) { return this; } const meta = this.builders.get(meta_query_1.MetaQuery, this.builder, this.alias); meta.setPrimaryTable("user").from.joinPrimary(type); this.#metaJoined = true; return this; } withPublishedPosts() { const { column } = this.alias; this.builder.whereIn(column("users", "ID"), (subBuilder) => { this.builders .get(posts_query_1.PostsQuery, subBuilder) .from.select(["post_author"]) .where("post_status", "publish") .where("post_type", "post"); }); return this; } withBlogIds(blogIds) { const tables = this.components.get(tables_1.Tables); const { column } = this.alias; const meta = this.builders.get(meta_query_1.MetaQuery); meta.setPrimaryTable("user").from.joinPrimary("inner"); for (const blogId of blogIds) { tables.index = blogId; meta.builder.or.where("meta_key", `${tables.prefix}capabilities`); } meta.builder.not.whereILike("meta_value", "a:0:{}"); meta.select(["user_id"]); this.builder.whereIn(column("users", "ID"), meta.builder); return this; } // private get metaKeyCapabilities() { // //return `${this.builders.tables.basePrefix}%capabilities`; // return `${this.builders.tables.prefix}capabilities`; // } hasRole() { const { column } = this.alias; const meta = this.builders.get(meta_query_1.MetaQuery); meta.setPrimaryTable("user").from.joinPrimary("inner"); meta.builder .whereILike("meta_key", `${this.builders.tables.basePrefix}%capabilities`, '"') .not.whereILike("meta_value", "a:0:{}"); meta.select(["user_id"]); //if (not) this.builder.whereNotIn(column("users", "ID"), meta.builder); this.builder.whereIn(column("users", "ID"), meta.builder); return this; } hasNoRole() { // this.hasRole(true); // return this; const { column } = this.alias; const meta = this.builders.get(meta_query_1.MetaQuery); meta.setPrimaryTable("user").from.joinPrimary("right"); meta.builder.whereILike("meta_key", `${this.builders.tables.basePrefix}%capabilities`, '"'); meta.andWhere((query) => { query.setPrimaryTable("user"); query.builder.not .where("meta_value", "a:0:{}") .and.not.where("meta_value", ""); }); meta.select(["user_id"]); this.builder.whereNotIn(column("users", "ID"), meta.builder); return this; } withRoles(roleNames, options) { const { column } = this.alias; const blogIds = options?.blogIds ?? [this.builders.tables.index]; const roles = roleNames.map((roleName) => this.roles.get(roleName)); if (0 >= roles.length) return this; const tables = this.components.get(tables_1.Tables); const meta = this.builders.get(meta_query_1.MetaQuery); meta.setPrimaryTable("user").from.joinPrimary("inner"); if (blogIds.length > 0) { meta.builder.andWhere((query) => { for (const blogId of blogIds) { tables.index = blogId; query.orWhere("meta_key", `${tables.prefix}capabilities`); } }); } meta.builder.andWhere((query) => { for (const role of roles) { if (!role?.name) continue; query.orWhereILike("meta_value", `%${role.name.toLowerCase()}%`); } }); meta.select(["user_id"]); this.builder.whereIn(column("users", "ID"), meta.builder); return this; } whereIn(column, values) { this.where(column, values); return this; } where(column, value, op = "=") { const { column: toColumn } = this.alias; if (Array.isArray(value)) { op = "in"; } this.builder.where(toColumn((column == "meta_key" || column == "meta_value" ? "usermeta" : "users"), column), op, value); return this; } whereLike(column, value, options) { const { column: toColumn } = this.alias; if (options?.not === true) { this.builder.not; } this.builder.whereILike(toColumn("users", column), `%${value}%`); return this; } whereNotLike(column, value) { return this.whereLike(column, value, { not: true }); } }; exports.UsersQuery = UsersQuery; exports.UsersQuery = UsersQuery = UsersQuery_1 = __decorate([ (0, component_1.queryBuilder)(), __metadata("design:paramtypes", [components_1.Components, roles_1.Roles, alias_1.Alias, query_builders_1.QueryBuilders, Object]) ], UsersQuery);