5 use Doctrine\DBAL\ArrayParameterType;
6 use Doctrine\DBAL\Connection;
7 use Doctrine\DBAL\ParameterType;
8 use Doctrine\DBAL\Query\Expression\CompositeExpression;
9 use Doctrine\DBAL\Query\QueryBuilder as DbalQueryBuilder;
10 use Doctrine\DBAL\Result;
46 public function __construct(
protected readonly Connection $backup_connection) {
47 parent::__construct($backup_connection);
58 return $this->backup_connection;
86 $alias = $this->getTableAlias();
89 $expr = $clause->prepare($this, $alias);
90 if ($clause instanceof
WhereClause && ($expr instanceof CompositeExpression || is_string($expr))) {
91 $this->andWhere($expr);
106 if ($prefix ===
'') {
110 if (!str_starts_with(
$table, $prefix)) {
111 return "{$prefix}{$table}";
123 return (string) $this->table_name;
132 return $this->table_alias;
147 $parameters = $this->getParameters();
148 $key =
':qb' . (count($parameters) + 1);
154 $type = ParameterType::INTEGER;
159 $type = ParameterType::INTEGER;
163 $type = ParameterType::INTEGER;
167 $type = ParameterType::INTEGER;
172 $type = ParameterType::STRING;
177 $type = ParameterType::INTEGER;
184 if (count(
$value) === 1) {
187 if (
$type === ParameterType::INTEGER) {
188 $type = ArrayParameterType::INTEGER;
190 $type = ArrayParameterType::STRING;
205 public function execute(
bool $track_query =
true) {
207 if ($this instanceof
Select) {
208 return $this->executeQuery();
210 return $this->executeStatement();
215 if ($this instanceof
Select) {
216 return $this->executeQuery();
218 return $this->executeStatement();
229 return parent::executeStatement();
237 public function from(
string $table, ?
string $alias =
null): self {
238 $this->table_name =
$table;
239 $this->table_alias = $alias;
241 return parent::from($this->prefix(
$table), $alias);
250 $this->table_name =
$table;
252 return parent::insert($this->prefix(
$table));
261 $this->table_name =
$table;
263 return parent::update($this->prefix(
$table));
271 public function delete(
string $table):
self {
272 $this->table_name =
$table;
274 return parent::delete($this->prefix(
$table));
280 public function join(
string $fromAlias,
string $join,
string $alias, ?
string $condition =
null): self {
281 return parent::join($fromAlias, $this->prefix($join), $alias, $condition);
287 public function innerJoin(
string $fromAlias,
string $join,
string $alias, ?
string $condition =
null): self {
288 return parent::innerJoin($fromAlias, $this->prefix($join), $alias, $condition);
294 public function leftJoin(
string $fromAlias,
string $join,
string $alias, ?
string $condition =
null): self {
295 return parent::leftJoin($fromAlias, $this->prefix($join), $alias, $condition);
301 public function rightJoin(
string $fromAlias,
string $join,
string $alias, ?
string $condition =
null): self {
302 return parent::rightJoin($fromAlias, $this->prefix($join), $alias, $condition);
308 public function orderBy(
string $sort, ?
string $order =
null): self {
309 if (isset($order) && !in_array(strtoupper($order), [
'ASC',
'DESC'])) {
310 throw new DomainException(
"'{$order}' is not a valid order by direction");
313 return parent::orderBy($sort, $order);
319 public function addOrderBy(
string $sort, ?
string $order =
null): self {
320 if (isset($order) && !in_array(strtoupper($order), [
'ASC',
'DESC'])) {
321 throw new DomainException(
"'{$order}' is not a valid order by direction");
324 return parent::addOrderBy($sort, $order);
335 public function merge($parts =
null, $boolean =
'AND') {
340 $parts = (array) $parts;
342 $parts = array_filter($parts,
function ($e) {
347 if (!$e instanceof CompositeExpression && !is_string($e)) {
357 if (count($parts) === 1) {
358 return array_shift($parts);
363 $parts = array_values($parts);
364 if (strtoupper($boolean) ===
'OR') {
365 return call_user_func_array([$this->expr(),
'or'], $parts);
368 return call_user_func_array([$this->expr(),
'and'], $parts);
387 public function compare(
string $x,
string $comparison, $y =
null, ?
string $type =
null, ?
bool $case_sensitive =
null) {
401 public function between(
string $x, $lower =
null, $upper =
null, ?
string $type =
null) {
404 $wheres[] = $this->compare($x,
'>=', $lower,
$type);
408 $wheres[] = $this->compare($x,
'<=', $upper,
$type);
411 return $this->merge($wheres);
422 return "qbt{$this->join_index}";
435 public function joinEntitiesTable(
string $from_alias =
'',
string $from_column =
'guid', ?
string $join_type =
'inner', ?
string $joined_alias =
null): string {
436 if (in_array($joined_alias, $this->joins)) {
437 return $joined_alias;
441 $from_column =
"{$from_alias}.{$from_column}";
444 $hash = sha1(serialize([
446 EntityTable::TABLE_NAME,
450 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
451 return $this->joins[$hash];
454 $condition =
function (QueryBuilder
$qb, $joined_alias) use ($from_column) {
455 return $qb->compare(
"{$joined_alias}.guid",
'=', $from_column);
458 $clause =
new JoinClause(EntityTable::TABLE_NAME, $joined_alias, $condition, $join_type);
459 $joined_alias = $clause->prepare($this, $from_alias);
461 $this->joins[$hash] = $joined_alias;
463 return $joined_alias;
477 public function joinMetadataTable(
string $from_alias =
'',
string $from_column =
'guid',
$name =
null, ?
string $join_type =
'inner', ?
string $joined_alias =
null): string {
478 if (in_array($joined_alias, $this->joins)) {
479 return $joined_alias;
483 $from_column =
"{$from_alias}.{$from_column}";
486 $hash = sha1(serialize([
488 MetadataTable::TABLE_NAME,
493 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
494 return $this->joins[$hash];
497 $condition =
function (QueryBuilder
$qb, $joined_alias) use ($from_column,
$name) {
499 $qb->compare(
"{$joined_alias}.entity_guid",
'=', $from_column),
504 $clause =
new JoinClause(MetadataTable::TABLE_NAME, $joined_alias, $condition, $join_type);
506 $joined_alias = $clause->prepare($this, $from_alias);
508 $this->joins[$hash] = $joined_alias;
510 return $joined_alias;
524 public function joinAnnotationTable(
string $from_alias =
'',
string $from_column =
'guid',
$name =
null, ?
string $join_type =
'inner', ?
string $joined_alias =
null): string {
525 if (in_array($joined_alias, $this->joins)) {
526 return $joined_alias;
530 $from_column =
"{$from_alias}.{$from_column}";
533 $hash = sha1(serialize([
535 AnnotationsTable::TABLE_NAME,
540 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
541 return $this->joins[$hash];
544 $condition =
function (QueryBuilder
$qb, $joined_alias) use ($from_column,
$name) {
546 $qb->compare(
"{$joined_alias}.entity_guid",
'=', $from_column),
551 $clause =
new JoinClause(AnnotationsTable::TABLE_NAME, $joined_alias, $condition, $join_type);
553 $joined_alias = $clause->prepare($this, $from_alias);
555 $this->joins[$hash] = $joined_alias;
557 return $joined_alias;
572 public function joinRelationshipTable(
string $from_alias =
'',
string $from_column =
'guid',
$name =
null,
bool $inverse =
false, ?
string $join_type =
'inner', ?
string $joined_alias =
null): string {
573 if (in_array($joined_alias, $this->joins)) {
574 return $joined_alias;
578 $from_column =
"{$from_alias}.{$from_column}";
581 $hash = sha1(serialize([
583 RelationshipsTable::TABLE_NAME,
589 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
590 return $this->joins[$hash];
593 $condition =
function (QueryBuilder
$qb, $joined_alias) use ($from_column,
$name, $inverse) {
596 $parts[] =
$qb->compare(
"{$joined_alias}.guid_one",
'=', $from_column);
598 $parts[] =
$qb->compare(
"{$joined_alias}.guid_two",
'=', $from_column);
602 return $qb->merge($parts);
605 $clause =
new JoinClause(RelationshipsTable::TABLE_NAME, $joined_alias, $condition, $join_type);
607 $joined_alias = $clause->prepare($this, $from_alias);
609 $this->joins[$hash] = $joined_alias;
611 return $joined_alias;
if(! $user||! $user->canDelete()) $name
return[ 'admin/delete_admin_notices'=>['access'=> 'admin'], 'admin/menu/save'=>['access'=> 'admin'], 'admin/plugins/activate'=>['access'=> 'admin'], 'admin/plugins/activate_all'=>['access'=> 'admin'], 'admin/plugins/deactivate'=>['access'=> 'admin'], 'admin/plugins/deactivate_all'=>['access'=> 'admin'], 'admin/plugins/set_priority'=>['access'=> 'admin'], 'admin/security/security_txt'=>['access'=> 'admin'], 'admin/security/settings'=>['access'=> 'admin'], 'admin/security/regenerate_site_secret'=>['access'=> 'admin'], 'admin/site/cache/clear'=>['access'=> 'admin'], 'admin/site/cache/invalidate'=>['access'=> 'admin'], 'admin/site/icons'=>['access'=> 'admin'], 'admin/site/set_maintenance_mode'=>['access'=> 'admin'], 'admin/site/set_robots'=>['access'=> 'admin'], 'admin/site/theme'=>['access'=> 'admin'], 'admin/site/unlock_upgrade'=>['access'=> 'admin'], 'admin/site/settings'=>['access'=> 'admin'], 'admin/upgrade'=>['access'=> 'admin'], 'admin/upgrade/reset'=>['access'=> 'admin'], 'admin/user/ban'=>['access'=> 'admin'], 'admin/user/bulk/ban'=>['access'=> 'admin'], 'admin/user/bulk/delete'=>['access'=> 'admin'], 'admin/user/bulk/unban'=>['access'=> 'admin'], 'admin/user/bulk/validate'=>['access'=> 'admin'], 'admin/user/change_email'=>['access'=> 'admin'], 'admin/user/delete'=>['access'=> 'admin'], 'admin/user/login_as'=>['access'=> 'admin'], 'admin/user/logout_as'=>[], 'admin/user/makeadmin'=>['access'=> 'admin'], 'admin/user/resetpassword'=>['access'=> 'admin'], 'admin/user/removeadmin'=>['access'=> 'admin'], 'admin/user/unban'=>['access'=> 'admin'], 'admin/user/validate'=>['access'=> 'admin'], 'annotation/delete'=>[], 'avatar/upload'=>[], 'comment/save'=>[], 'diagnostics/download'=>['access'=> 'admin', 'controller'=> \Elgg\Diagnostics\DownloadController::class,], 'entity/chooserestoredestination'=>[], 'entity/delete'=>[], 'entity/mute'=>[], 'entity/restore'=>[], 'entity/subscribe'=>[], 'entity/trash'=>[], 'entity/unmute'=>[], 'entity/unsubscribe'=>[], 'login'=>['access'=> 'logged_out'], 'logout'=>[], 'notifications/mute'=>['access'=> 'public'], 'plugins/settings/remove'=>['access'=> 'admin'], 'plugins/settings/save'=>['access'=> 'admin'], 'plugins/usersettings/save'=>[], 'register'=>['access'=> 'logged_out', 'middleware'=>[\Elgg\Router\Middleware\RegistrationAllowedGatekeeper::class,],], 'river/delete'=>[], 'settings/notifications'=>[], 'settings/notifications/subscriptions'=>[], 'user/changepassword'=>['access'=> 'public'], 'user/requestnewpassword'=>['access'=> 'public'], 'useradd'=>['access'=> 'admin'], 'usersettings/save'=>[], 'widgets/add'=>[], 'widgets/delete'=>[], 'widgets/move'=>[], 'widgets/save'=>[],]
Interface that allows resolving statements and/or extending query builder.
Utility class for building composite comparison expression.
Extends QueryBuilder with JOIN clauses.
Builds a clause from closure or composite expression.
Database abstraction query builder.
join(string $fromAlias, string $join, string $alias, ?string $condition=null)
{}
merge($parts=null, $boolean='AND')
Merges multiple composite expressions with a boolean.
joinMetadataTable(string $from_alias='', string $from_column='guid', $name=null, ?string $join_type='inner', ?string $joined_alias=null)
Join metadata table from alias and return joined table alias.
between(string $x, $lower=null, $upper=null, ?string $type=null)
Build a between clause.
getNextJoinAlias()
Get an index of the next available join alias.
joinAnnotationTable(string $from_alias='', string $from_column='guid', $name=null, ?string $join_type='inner', ?string $joined_alias=null)
Join annotations table from alias and return joined table alias.
rightJoin(string $fromAlias, string $join, string $alias, ?string $condition=null)
{}
compare(string $x, string $comparison, $y=null, ?string $type=null, ?bool $case_sensitive=null)
Build value comparison clause.
prefix(string $table)
Prefixes the table name with installation DB prefix.
leftJoin(string $fromAlias, string $join, string $alias, ?string $condition=null)
{}
subquery(string $table, ?string $alias=null)
Creates a new SelectQueryBuilder for join/where sub queries using the DB connection of the primary Qu...
joinEntitiesTable(string $from_alias='', string $from_column='guid', ?string $join_type='inner', ?string $joined_alias=null)
Join entity table from alias and return joined table alias.
param($value, string $type=ELGG_VALUE_STRING, ?string $key=null)
Sets a new parameter assigning it a unique parameter key/name if none provided Returns the name of th...
addOrderBy(string $sort, ?string $order=null)
{}
getConnection()
Returns the connection.
getTableAlias()
Returns the alias of the primary table.
from(string $table, ?string $alias=null)
{}
orderBy(string $sort, ?string $order=null)
{}
innerJoin(string $fromAlias, string $join, string $alias, ?string $condition=null)
{}
execute(bool $track_query=true)
Execute the database query for this QueryBuilder.
addClause(Clause $clause, ?string $alias=null)
Apply clause to this instance.
getTableName()
Returns the name of the primary table.
__construct(protected readonly Connection $backup_connection)
Initializes a new QueryBuilder.
joinRelationshipTable(string $from_alias='', string $from_column='guid', $name=null, bool $inverse=false, ?string $join_type='inner', ?string $joined_alias=null)
Join relationship table from alias and return joined table alias.
Query builder for fetching data from the database.
getConnection(string $type)
Gets (if required, also creates) a DB connection.
Exception thrown if a value does not adhere to a defined valid data domain.
Functions for use as event handlers or other situations where you need a globally accessible callable...
const ELGG_VALUE_TIMESTAMP
const ELGG_VALUE_INTEGER
Value types.
if($item instanceof \ElggEntity) elseif($item instanceof \ElggRiverItem) elseif($item instanceof \ElggRelationship) elseif(is_callable([ $item, 'getType']))
_elgg_services()
Get the global service provider.
if($container instanceof ElggGroup && $container->guid !=elgg_get_page_owner_guid()) $key
if(parse_url(elgg_get_site_url(), PHP_URL_PATH) !=='/') if(file_exists(elgg_get_root_path() . 'robots.txt'))
Set robots.txt.