HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpmuhibbah/wp-content/plugins/give/src/Framework/QueryBuilder/Concerns/JoinClause.php
<?php

namespace Give\Framework\QueryBuilder\Concerns;

use Closure;
use Give\Framework\Database\DB;
use Give\Framework\QueryBuilder\JoinQueryBuilder;
use Give\Framework\QueryBuilder\Clauses\Join;
use Give\Framework\QueryBuilder\Clauses\RawSQL;

/**
 * @since 2.19.0
 */
trait JoinClause
{

    /**
     * @var Closure[]|RawSQL[]
     */
    protected $joins = [];

    /**
     * Method used to build advanced JOIN queries, Check README.md for more info.
     * If you need to perform only simple JOINs with only one JOIN condition, then you don't need this method.
     *
     * @param  Closure  $callback  The closure will receive a Give\Framework\QueryBuilder\JoinQueryBuilder instance
     *
     * @return $this
     */
    public function join($callback)
    {
        $this->joins[] = $callback;

        return $this;
    }

    /**
     * @param  string|RawSQL  $table
     * @param  string  $column1
     * @param  string  $column2
     * @param  string|null  $alias
     *
     * @return $this
     */
    public function leftJoin($table, $column1, $column2, $alias = null)
    {
        $this->join(
            function (JoinQueryBuilder $builder) use ($table, $column1, $column2, $alias) {
                $builder
                    ->leftJoin($table, $alias)
                    ->on($column1, $column2);
            }
        );

        return $this;
    }

    /**
     * @param  string|RawSQL  $table
     * @param  string  $column1
     * @param  string  $column2
     * @param  string|null  $alias
     *
     * @return $this
     */
    public function innerJoin($table, $column1, $column2, $alias = null)
    {
        $this->join(
            function (JoinQueryBuilder $builder) use ($table, $column1, $column2, $alias) {
                $builder
                    ->innerJoin($table, $alias)
                    ->on($column1, $column2);
            }
        );

        return $this;
    }

    /**
     * @param  string|RawSQL  $table
     * @param  string  $column1
     * @param  string  $column2
     * @param  string|null  $alias
     *
     * @return $this
     */
    public function rightJoin($table, $column1, $column2, $alias = null)
    {
        $this->join(
            function (JoinQueryBuilder $builder) use ($table, $column1, $column2, $alias) {
                $builder
                    ->rightJoin($table, $alias)
                    ->on($column1, $column2);
            }
        );

        return $this;
    }


    /**
     * Add raw SQL JOIN clause
     *
     * @param  string  $sql
     * @param ...$args
     *
     * @return $this;
     */
    public function joinRaw($sql, ...$args)
    {
        $this->joins[] = new RawSQL($sql, $args);

        return $this;
    }


    /**
     * @return string[]
     */
    protected function getJoinSQL()
    {
        return array_map(function ($callback) {
            if ($callback instanceof RawSQL) {
                return $callback->sql;
            }

            $builder = new JoinQueryBuilder();

            call_user_func($callback, $builder);

            $joins = array_map(function ($join) {
                if ($join instanceof RawSQL) {
                    return $join->sql;
                }

                if ($join instanceof Join) {
                    if ($join->alias) {
                        return DB::prepare(
                            '%1s JOIN %2s %3s',
                            $join->joinType,
                            $join->table,
                            $join->alias
                        );
                    }

                    return DB::prepare(
                        '%1s JOIN %2s',
                        $join->joinType,
                        $join->table
                    );
                }

                // JoinCondition
                return DB::prepare(
                    $join->quote
                        ? ' %1s %2s = %s'
                        : ' %1s %2s = %3s',
                    $join->logicalOperator,
                    $join->column1,
                    $join->column2
                );
            }, $builder->getDefinedJoins());

            return implode(' ', $joins);
        }, $this->joins);
    }
}