Coupons
Error
Stack frames (14)
13
Error
/
home
/deploy
/EHungry-2-joel
/Web
/Services
/Account.php
10
12
eHungry
\Services
\Account
getAccountIdString
/
home
/deploy
/EHungry-2-joel
/Web
/accountsettings
/components.php
7
11
AccountSettings
\getUrl
/
home
/deploy
/EHungry-2-joel
/Web
/accountsettings
/coupons.php
324
10
AccountSettings
\CouponRoutes
couponItem
/
home
/deploy
/EHungry-2-joel
/Web
/templates4.0
/customer
/coupons_block.php
24
9
{closure}
/
home
/deploy
/EHungry-2-joel
/Web
/eds
/utils.php
71
8
EDS
\{closure}
[internal]
0
7
array_map
/
home
/deploy
/EHungry-2-joel
/Web
/eds
/utils.php
72
6
EDS
\stringify_children
/
home
/deploy
/EHungry-2-joel
/Web
/eds
/components
/collection.php
57
5
EDS
\Collection
/
home
/deploy
/EHungry-2-joel
/Web
/templates4.0
/customer
/coupons_block.php
31
4
include
/
home
/deploy
/EHungry-2-joel
/Web
/templates4.0
/customer
/coupons.php
5
3
include
/
home
/deploy
/EHungry-2-joel
/Web
/view4.0
/customer
/category.php
5
2
include
/
home
/deploy
/EHungry-2-joel
/Web
/view4.0
/customer
/ordering3.php
14
1
include_once
/
home
/deploy
/EHungry-2-joel
/Web
/controllers
/customer.php
884
0
require
/
home
/deploy
/EHungry-2-joel
/Web
/index.php
30
/
home
/deploy
/EHungry-2-joel
/Web
/Services
/Account.php
<?
namespace eHungry\Services;
class Account {
// Account ID string (e.g. `classicpizza`)
private static $account_id_string = null;
public static function getAccountIdString() {
if (static::$account_id_string === null) {
if (isSpringroll() || isPaymentDomain() || isSsoDomain()) {
static::$account_id_string = '';
} else {
static::$account_id_string = head(array_filter(explode('/', $_SERVER['REQUEST_URI'])));
if (!TEST_ENV) {
$custom_domain = \CustomDomain::getForDomain(HN_Current);
if ($custom_domain) {
$account = new \Account($custom_domain->account_id);
if ($account->hasPermission(WHITELABEL)) {
static::$account_id_string = $account->url_tag;
}
}
}
}
}
return static::$account_id_string;
}
// Account ID (e.g. `1234`)
private static $account_id = null;
public static function getAccountId($null_if_springroll = true) {
if ($null_if_springroll && isSpringroll()) {
return null;
}
$account_id_session_key = false;
foreach (['customer_account_id', 'manager_account_id', 'account_id'] as $key) {
if (isset($_SESSION[$key])) {
$account_id_session_key = $key;
Arguments
"Call to undefined function eHungry\Services\isSsoDomain()"
/
home
/deploy
/EHungry-2-joel
/Web
/accountsettings
/components.php
<?
namespace AccountSettings;
use eHungry\Bitmasks\OrderTemplatePlatforms;
function getUrl(string $url) {
$account_id_string = \eHungry\Services\Account::getAccountIdString();
return $account_id_string ? "/$account_id_string$url" : $url;
}
class Constants {
public const BOX_STYLE = '
border-radius: 0.75rem;
border: 1px solid rgba(152, 141, 120, 0.55);
background-color: white;
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.10);
';
}
// Page
function Page($attrs = [], $children = []) {
$account = \eHungry\Services\Account::getAccount();
$customer = \eHungry\Services\Auth::getCustomer();
$loyaltyProgram = $account ? \eHungry\Loyalty\Program::getActiveForAccount($account->id) : null;
$props = \EDS\defaults($attrs, ['class' => '', 'pending_orders' => null]);
if (!$props['pending_orders']) {
$props['pending_orders'] = \CustomerOrder::getPendingOrders($customer->id, $account ? $account->id : null) ?: [];
}
$number_of_pending_orders = count($props['pending_orders']);
$pending_orders_text = $number_of_pending_orders . ' pending ' . ($number_of_pending_orders === 1 ? 'order' : 'orders');
$pages = array_filter([
// Profile info
!$customer->isGuest()
? ['href' => getUrl('/account-settings/profile-info'), 'icon' => 'user', 'title' => 'Profile info']
: null,
// Orders
[
'href' => getUrl('/account-settings/orders'),
/
home
/deploy
/EHungry-2-joel
/Web
/accountsettings
/coupons.php
$description = $coupon->brief_coupon_description ?: $coupon->description;
$applied = $cart->getCoupon() && $cart->getCoupon()->id === $coupon->id;
$GLOBALS['restaurant'] = $restaurant; // NOTE: Needed for `couponErrors`
$errors = $applied ? $cart->couponErrors() : null;
return \EDS\Coupon::coupon(
\EDS\merge_attrs([
'id' => "coupon-{$coupon->id}",
'class' => 'h-100',
'variant' => $errors ? 'warning' : ($applied ? 'success' : null),
'header' => [
$name,
\EDS\Button([
'class' => 'float-end',
'variant' => 'outline-secondary',
'data-async-on-click' => true,
'data-async-before' => "$('[data-custom-popover]').popover('hide')",
'data-async-method' => 'post',
'data-async-action' => getUrl(
"/account-settings/coupons/$coupon->id" . ($applied ? '/remove?' : '/apply?') . http_build_query(array_merge(\EDS\pick($_REQUEST, ['form']), $attrs))
),
'data-async-target' => '#coupons',
// Reloading the cart on pages where it doesn't exist causes the cart object to be recreated, leading to obscure bugs
'data-async-then' => in_array($_REQUEST['form'], ['home', 'mycoupons']) ? 'initPopovers()' : 'reloadCart({ data: { coupons: true } })',
'data-async-swap' => 'none',
'data-async-recaptcha' => !$customer,
], $applied ? 'Remove' : 'Apply'),
],
'footer' => $errors
? '<div class="d-flex gap-2 justify-content-between">'
.
'Applied with restrictions'
.
\EDS\Coupon::showRestrictionsButton(['class' => 'text-white'], 'Show restrictions', $coupon, $errors)
.
'</div>'
: ($applied
? (($discount = $cart->calculateCouponTotal()) > 0
? 'Applied a discount of ' . intToMoneyString($discount)
: 'Applied'
Arguments
"/account-settings/coupons/96923/apply?form=ordering3"
/
home
/deploy
/EHungry-2-joel
/Web
/templates4.0
/customer
/coupons_block.php
<?=\EDS\Coupon::popoverTemplate()?>
<?=\EDS\Collection(
[
'title' => $_REQUEST['form'] === 'mycoupons'
? '<h1 class="eds-display-text-title-l mb-0">Coupon Box</h1><p class="mb-0">If there are any public coupons or specials for which you are eligible, they are shown in your coupon box.</p>'
: '<h3 class="eds-display-text-title-m mb-0">Coupons</h3>',
'gradient_color' => 'var(--bs-light)',
'scroll_step' => "$(this).find('.coupon-item').width() + 12",
'show_controls' => count($coupons) > 1,
'breakout' => '0.75rem',
],
function () use ($cart, $coupons, $customer, $restaurant) {
ob_start();
?>
<div class="d-flex gap-2p5">
<? foreach ($coupons as $coupon) { ?>
<div class="coupon-item" style="width: 80vw; max-width: 20rem">
<?=AccountSettings\CouponRoutes::couponItem([], $coupon, $cart, $customer, $restaurant)?>
</div>
<? } ?>
</div>
<?
return ob_get_clean();
}
)?>
Arguments
[]
Coupon {}Cart {}nullRestaurant {}
/
home
/deploy
/EHungry-2-joel
/Web
/eds
/utils.php
function stringify_attrs($attrs = []) {
$stringified_attrs = '';
foreach ($attrs as $key => $value) {
if (is_bool($value)) {
if ($value === true) {
$stringified_attrs .= ' ' . $key;
}
} else if (!is_null($value)) {
$stringified_value = $key === 'class' ? classes($value) : $value;
$stringified_attrs .= ' ' . $key . '="' . htmlentities($stringified_value) . '"';
}
}
return trim($stringified_attrs);
}
function stringify_children($children = []) {
return trim(join(' ', array_map(function ($child) {
return is_callable($child) && !is_string($child) ? $child() : $child;
}, is_array($children) ? $children : [$children])));
}
function to_event_objects($events) {
$event_objects = [];
foreach ($events as $declaration => $handler) {
$parts = explode(':', $declaration);
$name = reset($parts);
$modifiers = array_slice($parts, 1); // Inspired by https://vuejs.org/guide/essentials/event-handling
// Handlers
$handler_lines = array_filter([
'event.stopPropagation()' => in_array('stop', $modifiers),
'event.preventDefault()' => in_array('prevent', $modifiers),
$handler,
]);
// Options
$options = array_filter([
'once' => in_array('once', $modifiers),
[internal]
Arguments
Closure { : { : Cart { …} : array:3 [ 0 => Coupon {} 1 => Coupon {} 2 => Coupon {} ] : null : Restaurant { …} } }
/
home
/deploy
/EHungry-2-joel
/Web
/eds
/utils.php
$stringified_attrs = '';
foreach ($attrs as $key => $value) {
if (is_bool($value)) {
if ($value === true) {
$stringified_attrs .= ' ' . $key;
}
} else if (!is_null($value)) {
$stringified_value = $key === 'class' ? classes($value) : $value;
$stringified_attrs .= ' ' . $key . '="' . htmlentities($stringified_value) . '"';
}
}
return trim($stringified_attrs);
}
function stringify_children($children = []) {
return trim(join(' ', array_map(function ($child) {
return is_callable($child) && !is_string($child) ? $child() : $child;
}, is_array($children) ? $children : [$children])));
}
function to_event_objects($events) {
$event_objects = [];
foreach ($events as $declaration => $handler) {
$parts = explode(':', $declaration);
$name = reset($parts);
$modifiers = array_slice($parts, 1); // Inspired by https://vuejs.org/guide/essentials/event-handling
// Handlers
$handler_lines = array_filter([
'event.stopPropagation()' => in_array('stop', $modifiers),
'event.preventDefault()' => in_array('prevent', $modifiers),
$handler,
]);
// Options
$options = array_filter([
'once' => in_array('once', $modifiers),
'passive' => in_array('passive', $modifiers),
Arguments
Closure { : { : {} } }
array:1 [ 0 => Closure { : { : Cart { …} : array:3 [ 0 => Coupon {} 1 => Coupon {} 2 => Coupon {} ] : null : Restaurant { …} } } ]
/
home
/deploy
/EHungry-2-joel
/Web
/eds
/components
/collection.php
['style' => 'padding-top: 2px; padding-right: 2px', 'variant' => 'outline-secondary', 'size' => 'small', 'shape' => 'circle', 'onclick' => "app.event.emit('scroll_to_previous_$id')", 'aria-label' => 'Scroll left'],
\EDS\Icon(['icon' => 'chevron-left'])
)?>
<?=\EDS\Button(
['style' => 'padding-top: 2px; padding-left: 2px', 'variant' => 'outline-secondary', 'size' => 'small', 'shape' => 'circle', 'onclick' => "app.event.emit('scroll_to_next_$id')", 'aria-label' => 'Scroll right'],
\EDS\Icon(['icon' => 'chevron-right'])
)?>
<? } ?>
</div>
<div class="position-relative">
<div
class="css-scroll-hidden overflow-auto d-flex gap-3 py-2 <?=$props['padding']?>"
style="<?=$props['breakout'] != null ? "max-width: 100vw; padding: 0 {$props['breakout']}" : 'max-width: calc(100vw - 2rem)'?>; scroll-behavior: smooth"
data-event-on:scroll_to_previous_<?=$id?>="this.scrollLeft = (Math.ceil(this.scrollLeft / <?=$scroll_width?>) - 1) * <?=$scroll_width?>"
data-event-on:scroll_to_next_<?=$id?>="this.scrollLeft = (Math.floor(this.scrollLeft / <?=$scroll_width?>) + 1) * <?=$scroll_width?>"
data-event-on:document_ready="app.event.emit('scroll_<?=$id?>', this.scrollLeft / (this.scrollWidth - this.clientWidth))"
onscroll="app.event.emit('scroll_<?=$id?>', this.scrollLeft / (this.scrollWidth - this.clientWidth))"
>
<?=\EDS\stringify_children($children)?>
</div>
<div
class="eds_collection-fade position-absolute top-0 bottom-0 start-0 "
style="background: linear-gradient(to right, <?=$props['gradient_color']?>, transparent);"
data-event-on:scroll_<?=$id?>="(scrollRatio) => this.style.opacity = 10 * scrollRatio"
></div>
<div
class="eds_collection-fade position-absolute top-0 bottom-0 end-0"
style="background: linear-gradient(to left, <?=$props['gradient_color']?>, transparent);"
data-event-on:scroll_<?=$id?>="(scrollRatio) => this.style.opacity = 10 * (1 - scrollRatio)"
></div>
</div>
</div>
<?
return ob_get_clean();
}
Arguments
Closure { : { : Cart { …} : array:3 [ 0 => Coupon {} 1 => Coupon {} 2 => Coupon {} ] : null : Restaurant { …} } }
/
home
/deploy
/EHungry-2-joel
/Web
/templates4.0
/customer
/coupons_block.php
'gradient_color' => 'var(--bs-light)',
'scroll_step' => "$(this).find('.coupon-item').width() + 12",
'show_controls' => count($coupons) > 1,
'breakout' => '0.75rem',
],
function () use ($cart, $coupons, $customer, $restaurant) {
ob_start();
?>
<div class="d-flex gap-2p5">
<? foreach ($coupons as $coupon) { ?>
<div class="coupon-item" style="width: 80vw; max-width: 20rem">
<?=AccountSettings\CouponRoutes::couponItem([], $coupon, $cart, $customer, $restaurant)?>
</div>
<? } ?>
</div>
<?
return ob_get_clean();
}
)?>
Arguments
array:5 [ "title" => "<h3 class="eds-display-text-title-m mb-0">Coupons</h3>" "gradient_color" => "var(--bs-light)" "scroll_step" => "$(this).find('.coupon-item').width() + 12" "show_controls" => true "breakout" => "0.75rem" ]
Closure { : { : Cart { …} : array:3 [ 0 => Coupon {} 1 => Coupon {} 2 => Coupon {} ] : null : Restaurant { …} } }
/
home
/deploy
/EHungry-2-joel
/Web
/templates4.0
/customer
/coupons.php
<?php
//if coupon box not hidden
if ($_REQUEST['form'] == 'mycoupons' || (!is_object($_REQUEST['_TEMPLATE_SETTINGS']['hide_coupons_box']) || !$_REQUEST['_TEMPLATE_SETTINGS']['hide_coupons_box']->getValue())) {
if ($coupons || $_REQUEST['form'] == 'mycoupons') { ?>
<? include(CORE_PATH. 'templates4.0/customer/coupons_block.php'); ?>
<? }
}
Arguments
"/home/deploy/EHungry-2-joel/Web/templates4.0/customer/coupons_block.php"
/
home
/deploy
/EHungry-2-joel
/Web
/view4.0
/customer
/category.php
<main class="main_content menucategory_page pb-5" id="main">
<div class="container">
<? if (count($coupons) > 0) { ?>
<section class="mb-3 pb-lg-3 mt-1 pt-3">
<? include(CORE_PATH. 'templates4.0/customer/coupons.php'); ?>
</section>
<? } ?>
<div class="row menu_wrapper menu_category_wrapper <?=count($menus) > 1 ? '' : 'menu_wrapper--no-menu-tabs'?>">
<section class="col-xl-4 d-none d-xl-block">
<?
/*
//this code block is for [ch24116] when functionality ready to be added
<div class="category_box filter_category_box">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
<input type="text" id="cart-custom-tip" class="form-control input-cart-custom-tip" name="custom_tip" placeholder="Search the menu...">
</div>
<div class="filters">
<div class="filter-header collapsed" data-toggle="collapse" href="#filterContents" role="button" aria-expanded="false" aria-controls="filterContents">
<span><i class="fa fa-filter filter-icon"></i> Additional filters</span><i class="fal fa-plus filter-toggle fa-lg"></i>
</div>
<div class="filter-content collapse" id="filterContents">
<div class="list-group" role="tablist">
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="all" checked /> <label for="all" class="css-label">All</label></a>
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="new" checked /> <label for="new" class="css-label">New</label><span class="nos"><img src="/web/default4.0/images/icons/item-icon-new.svg" alt="New" checked /></span></a>
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="favorite" checked /> <label for="favorite" class="css-label">Favorite</label><span class="nos"><img src="/web/default4.0/images/icons/item-icon-favorite.svg" alt="Favorite" checked /></span></a>
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="vegatarian" checked /> <label for="vegetarian" class="css-label">Vegetarian</label><span class="nos"><img src="/web/default4.0/images/icons/item-icon-vegetarian.svg" alt="Vegetarian" checked /></span></a>
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="spicy" checked /> <label for="spicy" class="css-label">Spicy</label><span class="nos"><img src="/web/default4.0/images/icons/item-icon-hot.svg" alt="Spicy" checked /></span></a>
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="healthy" checked /> <label for="healthy" class="css-label">Healthy</label><span class="nos"><img src="/web/default4.0/images/icons/item-icon-healthy.svg" alt="Healthy" checked /></span></a>
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="glutenfree" checked /> <label for="glutenfree" class="css-label">Gluten-free</label><span class="nos"><img src="/web/default4.0/images/icons/item-icon-glutenFree.svg" alt="Gluten-Free" checked /></span></a>
<a class="list-group-item list-group-item-action" href="#" role="button"><input type="checkbox" class="css-checkbox" id="raw" checked /> <label for="raw" class="css-label">Raw</label><span class="nos"><img src="/web/default4.0/images/icons/item-icon-raw.svg" alt="Raw" checked /></span></a>
</div>
</div>
</div>
<div class="collapse" id="collapseExample">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
Arguments
"/home/deploy/EHungry-2-joel/Web/templates4.0/customer/coupons.php"
/
home
/deploy
/EHungry-2-joel
/Web
/view4.0
/customer
/ordering3.php
<?
switch ($_REQUEST['ordering_level']) {
case OrderingLevel::NONE:
App::debugbarTime($timerLevel = 'ordering3: locationlist');
include(CORE_PATH . 'templates4.0/customer/locationlist.php');
break;
case OrderingLevel::RESTAURANT:
case OrderingLevel::MENU:
App::debugbarTime($timerLevel = 'ordering3: menu');
include(CORE_PATH . 'view4.0/customer/menu.php');
break;
case OrderingLevel::CATEGORY:
App::debugbarTime($timerLevel = 'ordering3: category');
include(CORE_PATH . 'view4.0/customer/category.php');
break;
case OrderingLevel::ITEM:
case OrderingLevel::PRICE:
App::debugbarTime($timerLevel = 'ordering3: menuitem');
include(CORE_PATH . 'view4.0/customer/category.php');
break;
}
if (isset($timerLevel)) {
App::debugbarTime($timerLevel);
}
Arguments
"/home/deploy/EHungry-2-joel/Web/view4.0/customer/category.php"
/
home
/deploy
/EHungry-2-joel
/Web
/controllers
/customer.php
if (!in_array($_REQUEST['form'], ['checkout', 'nosuchpage', 'validatecallback', 'viewdeliveryzone'])) {
//TODO: probably need to add one more form here that is called ajax, callback seems to reset when it shouldnt
unset($_SESSION['validation_data']);
}
$locs = $account->getActiveRestaurants('position');
$tab = MainNavigationTab::getAllForAccount($account->getId());
include_once(CORE_PATH.'lib/helpers/customer3.0.php');
if (!in_array($_REQUEST['form'], $viewContentOnly)) {
App::debugbarTime('header');
include_once(getLayoutPartPath('header'));
App::debugbarTime('header');
}
App::debugbarTime("view '{$_REQUEST['form']}'");
$path = CORE_PATH.'view' . ($_REQUEST['_VERSION'] == 4 ? 4 : 3) . '.0/customer/'.$_REQUEST['form'].'.php';
if (is_readable($path)) {
include_once($path);
}
App::debugbarTime("view '{$_REQUEST['form']}'");
if (!in_array($_REQUEST['form'], $viewContentOnly)) {
App::debugbarTime('footer');
include_once(getLayoutPartPath('footer'));
App::debugbarTime('footer');
}
function getLayoutPartPath($part) {
if (isset($_REQUEST['_CORDOVA_APP']) && $_REQUEST['_VERSION'] != 4) {
$cart = Cart::getCurrent();
//FIXME: it's technically possible to end up with $template = null
if (!$_REQUEST['contentonly']) {
$template = !isset($_REQUEST["altdoc"])? "app/$part" : "app/alt$part";
}
} else {
$template = !isset($_REQUEST["altdoc"])? "customer/$part" : "customer/alt$part";
}
Arguments
"/home/deploy/EHungry-2-joel/Web/view4.0/customer/ordering3.php"
/
home
/deploy
/EHungry-2-joel
/Web
/index.php
App::startTime();
ErrorHandlers::register();
// Global.php is the core setup file for the application
App::debugbarTime('Global.php');
require(dirname(__DIR__) . '/PHP/Global.php');
App::debugbarTime('Global.php');
/** @var string $controller The main controller - defined at /PHP/Global.php */
App::debugbarTime('Sentry - controller');
ErrorHandlers::sentryInit($controller); //doesn't always do much - not every controller has a Sentry project
App::debugbarTime('Sentry - controller');
App::debugbarTime("controller: $controller");
apache_note('AppController', $controller);
if (file_exists(CORE_PATH."lib/helpers/$controller.php")) {
require CORE_PATH."lib/helpers/$controller.php";
}
require CORE_PATH."controllers/$controller.php";
App::debugbarTime("controller: $controller");
Arguments
"/home/deploy/EHungry-2-joel/Web/controllers/customer.php"
Environment & details:
| Key | Value |
| aid | "order/breakfast/menu"
|
empty
empty
| Key | Value |
| PHPSESSID | "ep0j11f210rubqp6i5992fbto6"
|
| Key | Value |
| loc | "en_US"
|
| customer_account_id | 892
|
| cart | Cart {}
|
| restaurant_id | 18757
|
| menu_id | 18795
|
| app_banner_shown | true
|
| eot | 1781115063
|
| Key | Value |
| UNIQUE_ID | "ailwdq_cMz0xXLYOOe0-lwAAAAY"
|
| SCRIPT_URL | "/order/breakfast/menu"
|
| SCRIPT_URI | "http://ehtest.zineer.com.2.joel.ehungry.net/order/breakfast/menu"
|
| HTTP_HOST | "ehtest.zineer.com.2.joel.ehungry.net"
|
| HTTP_X_REAL_IP | "216.73.217.165"
|
| HTTP_X_CONFKEY | "Main_Domain:8993"
|
| HTTP_SCHEME | "https"
|
| HTTP_EHENV | "TODO"
|
| HTTP_CONNECTION | "close"
|
| HTTP_ACCEPT | "*/*"
|
| HTTP_USER_AGENT | "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
|
| HTTP_ACCEPT_ENCODING | "gzip, br, zstd, deflate"
|
| HTTP_REFERER | "https://ehtest.zineer.com.2.joel.ehungry.net/order"
|
| HTTP_COOKIE | "PHPSESSID=ep0j11f210rubqp6i5992fbto6"
|
| PATH | "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
|
| SERVER_SIGNATURE | "" |
| SERVER_SOFTWARE | "Apache/2.4.62 () mod_wsgi/4.6.5 Python/3.7 PHP/7.2.34"
|
| SERVER_NAME | "ehtest.zineer.com.2.joel.ehungry.net"
|
| SERVER_ADDR | "127.0.0.1"
|
| SERVER_PORT | "80"
|
| REMOTE_ADDR | "216.73.217.165"
|
| DOCUMENT_ROOT | "/home/deploy/EHungry-2-joel/Web"
|
| REQUEST_SCHEME | "http"
|
| CONTEXT_PREFIX | "" |
| CONTEXT_DOCUMENT_ROOT | "/home/deploy/EHungry-2-joel/Web"
|
| SERVER_ADMIN | "root@localhost"
|
| SCRIPT_FILENAME | "/home/deploy/EHungry-2-joel/Web/index.php"
|
| REMOTE_PORT | "44092"
|
| GATEWAY_INTERFACE | "CGI/1.1"
|
| SERVER_PROTOCOL | "HTTP/1.0"
|
| REQUEST_METHOD | "GET"
|
| QUERY_STRING | "aid=joeltest"
|
| REQUEST_URI | "/order/breakfast/menu"
|
| SCRIPT_NAME | "/order/breakfast/menu"
|
| PHP_SELF | "/order/breakfast/menu"
|
| REQUEST_TIME_FLOAT | 1781100662.524
|
| REQUEST_TIME | 1781100662
|
empty
0. Whoops\Handler\PrettyPageHandler