upskill-event-manager/wordpress-dev/vendor/antecedent/patchwork/src/Stack.php
bengizmo cdef12ee80 feat(events): Implement fallback logic and UI for Create/Modify Event page
- Refactored fallback submission logic in `class-event-handler.php` to remove `wp_die`/`exit` calls and use redirects for error handling, enabling proper unit testing.
- Implemented meta-data saving (dates, venue, organizer) in the fallback logic using `update_post_meta`.
- Updated unit tests (`test-event-management.php`) to remove `markTestIncomplete` calls related to handler errors and uncommented meta assertions. Unit tests for fallback logic now pass.
- Added Instructions section and Return to Dashboard button to the event form shortcode (`display_event_form_shortcode`).
- Applied basic theme styling classes (`ast-container`, `notice`, `ast-button`) to the event form.
- Updated `docs/implementation_plan.md` to reflect completion of tasks 4.1-4.5 and set focus to Task 5.

Refs: Task 4.1, 4.2, 4.3, 4.4, 4.5
2025-04-01 11:46:24 -03:00

95 lines
1.9 KiB
PHP

<?php
/**
* @link http://patchwork2.org/
* @author Ignas Rudaitis <ignas.rudaitis@gmail.com>
* @copyright 2010-2018 Ignas Rudaitis
* @license http://www.opensource.org/licenses/mit-license.html
*/
namespace Patchwork\Stack;
use Patchwork\Exceptions;
function push($offset, $calledClass, ?array $argsOverride = null)
{
State::$items[] = [$offset, $calledClass, $argsOverride];
}
function pop()
{
array_pop(State::$items);
}
function pushFor($offset, $calledClass, $callback, ?array $argsOverride = null)
{
push($offset, $calledClass, $argsOverride);
try {
$callback();
} catch (\Exception $e) {
$exception = $e;
}
pop();
if (isset($exception)) {
throw $exception;
}
}
function top($property = null)
{
$all = all();
$frame = reset($all);
$argsOverride = topArgsOverride();
if ($argsOverride !== null) {
$frame["args"] = $argsOverride;
}
if ($property) {
return isset($frame[$property]) ? $frame[$property] : null;
}
return $frame;
}
function topOffset()
{
if (empty(State::$items)) {
throw new Exceptions\StackEmpty;
}
list($offset, $calledClass) = end(State::$items);
return $offset;
}
function topCalledClass()
{
if (empty(State::$items)) {
throw new Exceptions\StackEmpty;
}
list($offset, $calledClass) = end(State::$items);
return $calledClass;
}
function topArgsOverride()
{
if (empty(State::$items)) {
throw new Exceptions\StackEmpty;
}
list($offset, $calledClass, $argsOverride) = end(State::$items);
return $argsOverride;
}
function all()
{
$backtrace = debug_backtrace();
return array_slice($backtrace, count($backtrace) - topOffset());
}
function allCalledClasses()
{
return array_map(function($item) {
list($offset, $calledClass) = $item;
return $calledClass;
}, State::$items);
}
class State
{
static $items = [];
}