@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
JavaScript
"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);