*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE) (View: /home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php)"
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
}
*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE)"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
*
* For the full copyright and license information, please view the LICENSE.md
* file that was distributed with this source code.
*
* ------------------------------------------------------------------
*/
declare(strict_types=1);
namespace TOC;
use Cocur\Slugify\Slugify;
use Cocur\Slugify\SlugifyInterface;
/**
* UniqueSlugify creates slugs from text without repeating the same slug twice per instance
*
* @author Casey McLaughlin <caseyamcl@gmail.com>
*/
class UniqueSlugify implements SlugifyInterface
{
/**
* @var SlugifyInterface
*/
private $slugify;
/**
* @var array
*/
private $used;
/**
* Constructor
*
* @param SlugifyInterface|null $slugify
*/
public function __construct(?SlugifyInterface $slugify = null)
{
$this->used = array();
$this->slugify = $slugify ?: new Slugify();
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}
"/home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/vendor/caseyamcl/toc/src/UniqueSlugify.php"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
/**
* @var HTML5
*/
private $htmlParser;
/**
* @var SlugifyInterface
*/
private $slugifier;
/**
* Constructor
*
* @param HTML5|null $htmlParser
* @param SlugifyInterface|null $slugify
*/
public function __construct(?HTML5 $htmlParser = null, ?SlugifyInterface $slugify = null)
{
$this->htmlParser = $htmlParser ?? new HTML5();
$this->slugifier = $slugify ?? new UniqueSlugify();
}
/**
* Fix markup
*
* @param string $markup
* @param int $topLevel
* @param int $depth
* @return string Markup with added IDs
* @throws RuntimeException
*/
public function fix(string $markup, int $topLevel = 1, int $depth = 6): string
{
if (! $this->isFullHtmlDocument($markup)) {
$partialID = uniqid('toc_generator_');
$markup = sprintf("<body id='%s'>%s</body>", $partialID, $markup);
}
$domDocument = $this->htmlParser->loadHTML($markup);
$domDocument->preserveWhiteSpace = true; // do not clobber whitespace
<?php
namespace App\View\Composers;
use DOMDocument;
use Roots\Acorn\View\Composer;
class BlogPost extends Composer
{
protected static $views = [
'partials.content-single',
];
public function override()
{
$fields = get_fields();
$htmlContent = apply_filters( 'the_content', get_the_content() );
$markupFixer = new \TOC\MarkupFixer();
$tocGenerator = new \TOC\TocGenerator();
$htmlContent = $markupFixer->fix($htmlContent);
$fields['toc'] = $tocGenerator->getOrderedHtmlMenu($htmlContent);
$fields['the_content'] = $htmlContent;
$fields['the_category'] = $this->getCategory();
return $fields;
}
public function getCategory() {
$category = null;
if(get_the_terms(get_the_id(), 'category')) {
foreach(get_the_terms(get_the_id(), 'category') as $term) {
if($term->name !== "Blog" && $term->name !== "Events" && $term->name !== "News") {
$category = $term;
return $category;
}
}
}
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function with()
{
return [];
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function override()
{
return static::$views;
}
$view = array_slice(explode('\\', static::class), 3);
$view = array_map([Str::class, 'snake'], $view, array_fill(0, count($view), '-'));
return implode('/', $view);
}
/**
* Compose the view before rendering.
*
* @param \Illuminate\View\View $view
* @return void
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
return $callback;
}
/**
* Build a class based container callback Closure.
*
* @param string $class
* @param string $prefix
* @return \Closure
*/
protected function buildClassEventCallback($class, $prefix)
{
[$class, $method] = $this->parseClassEvent($class, $prefix);
// Once we have the class and method name, we can build the Closure to resolve
// the instance out of the IoC container and call the method on it with the
// given arguments that are passed to the Closure as the composer's data.
return function () use ($class, $method) {
return $this->container->make($class)->{$method}(...func_get_args());
};
}
/**
* Parse a class based composer name.
*
* @param string $class
* @param string $prefix
* @return array
*/
protected function parseClassEvent($class, $prefix)
{
return Str::parseCallback($class, $this->classEventMethodForPrefix($prefix));
}
/**
* Determine the class event method based on the given prefix.
*
* @param string $prefix
* @return string
* @param \Closure|string $listener
* @param bool $wildcard
* @return \Closure
*/
public function makeListener($listener, $wildcard = false)
{
if (is_string($listener)) {
return $this->createClassListener($listener, $wildcard);
}
if (is_array($listener) && isset($listener[0]) && is_string($listener[0])) {
return $this->createClassListener($listener, $wildcard);
}
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return $listener($event, $payload);
}
return $listener(...array_values($payload));
};
}
/**
* Create a class based listener using the IoC container.
*
* @param string $listener
* @param bool $wildcard
* @return \Closure
*/
public function createClassListener($listener, $wildcard = false)
{
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return call_user_func($this->createClassCallable($listener), $event, $payload);
}
$callable = $this->createClassCallable($listener);
return $callable(...array_values($payload));
* @param bool $halt
* @return array|null
*/
public function dispatch($event, $payload = [], $halt = false)
{
// When the given "event" is actually an object we will assume it is an event
// object and use the class as the event name and this event itself as the
// payload to the handler, which makes object based events quite simple.
[$event, $payload] = $this->parseEventAndPayload(
$event, $payload
);
if ($this->shouldBroadcast($payload)) {
$this->broadcastEvent($payload[0]);
}
$responses = [];
foreach ($this->getListeners($event) as $listener) {
$response = $listener($event, $payload);
// If a response is returned from the listener and event halting is enabled
// we will just return this response, and not call the rest of the event
// listeners. Otherwise we will add the response on the response list.
if ($halt && ! is_null($response)) {
return $response;
}
// If a boolean false is returned from a listener, we will stop propagating
// the event to any further listeners down in the chain, else we keep on
// looping through the listeners and firing every one in our sequence.
if ($response === false) {
break;
}
$responses[] = $response;
}
return $halt ? null : $responses;
}
protected function addEventListener($name, $callback)
{
if (Str::contains($name, '*')) {
$callback = function ($name, array $data) use ($callback) {
return $callback($data[0]);
};
}
$this->events->listen($name, $callback);
}
/**
* Call the composer for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callComposer(ViewContract $view)
{
$this->events->dispatch('composing: '.$view->name(), [$view]);
}
/**
* Call the creator for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callCreator(ViewContract $view)
{
$this->events->dispatch('creating: '.$view->name(), [$view]);
}
}
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<?php $__env->startSection('content'); ?>
<?php while(have_posts()): ?> <?php (the_post()); ?>
<?php echo $__env->first(['partials.content-single-' . get_post_type(), 'partials.content-single'], \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>
<?php endwhile; ?>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?><?php /**PATH /home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php ENDPATH**/ ?>
/**
* Get the evaluated contents of the view at the given path.
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
"/home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/storage/framework/views/2bc8d2ea874031e3ddb3a557319b7cad31a2f2d3.php"
*
* @param string $path
* @param array $data
* @return string
*/
public function get($path, array $data = [])
{
$this->lastCompiled[] = $path;
// If this given view has expired, which means it has simply been edited since
// it was last compiled, we will re-compile the views so we can evaluate a
// fresh copy of the view. We'll pass the compiler the path of the view.
if ($this->compiler->isExpired($path)) {
$this->compiler->compile($path);
}
// Once we have the path to the compiled file, we will evaluate the paths with
// typical PHP just like any other templates. We also keep a stack of views
// which have been rendered for right exception messages to be generated.
$results = $this->evaluatePath($this->compiler->getCompiledPath($path), $data);
array_pop($this->lastCompiled);
return $results;
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
$e = new ViewException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);
parent::handleViewException($e, $obLevel);
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
* Get the data bound to the view instance.
*
* @return array
*/
public function gatherData()
{
$data = array_merge($this->factory->getShared(), $this->data);
foreach ($data as $key => $value) {
if ($value instanceof Renderable) {
$data[$key] = $value->render();
}
}
return $data;
}
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<!doctype html>
<html <?php language_attributes(); ?>>
<?php echo \Roots\view(\Roots\app('sage.view'), \Roots\app('sage.data'))->render(); ?>
</html>
}
break;
}
}
if ( ! $template ) {
$template = get_index_template();
}
/**
* Filters the path of the current template before including it.
*
* @since 3.0.0
*
* @param string $template The path of the template to include.
*/
$template = apply_filters( 'template_include', $template );
if ( $template ) {
include $template;
} elseif ( current_user_can( 'switch_themes' ) ) {
$theme = wp_get_theme();
if ( $theme->errors() ) {
wp_die( $theme->errors() );
}
}
return;
}
"/home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/index.php"
<?php
/**
* Loads the WordPress environment and template.
*
* @package WordPress
*/
if ( ! isset( $wp_did_header ) ) {
$wp_did_header = true;
// Load the WordPress library.
require_once __DIR__ . '/wp-load.php';
// Set up the WordPress query.
wp();
// Load the theme template.
require_once ABSPATH . WPINC . '/template-loader.php';
}
"/home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-includes/template-loader.php"
<?php
/**
* WordPress View Bootstrapper
*/
define('WP_USE_THEMES', true);
require __DIR__ . '/wp/wp-blog-header.php';
"/home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-blog-header.php"
Key | Value |
query_vars | array:3 [ "page" => "" "name" => "remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward" "category_name" => "blog" ] |
query_string | "name=remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward&category_name=blog"
|
request | "blog/remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward" "category_name" => "blog" "error" => "" "m" => "" "p" => 0 "post_parent" => "" "subpost" => "" "subpost_id" => "" "attachment" => "" "attachment_id" => 0 "pagename" => "" "page_id" => 0 "second" => "" "minute" => "" "hour" => "" "day" => 0 "monthnum" => 0 "year" => 0 "w" => 0 "tag" => "" "cat" => "" "tag_id" => "" "author" => "" "author_name" => "" "feed" => "" "tb" => "" "paged" => 0 "meta_key" => "" "meta_value" => "" "preview" => "" "s" => "" "sentence" => "" "title" => "" "fields" => "" "menu_order" => "" "embed" => "" "category__in" => [] "category__not_in" => [] "category__and" => [] "post__in" => [] "post__not_in" => [] "post_name__in" => [] "tag__in" => [] "tag__not_in" => [] "tag__and" => [] "tag_slug__in" => [] "tag_slug__and" => [] "post_parent__in" => [] "post_parent__not_in" => [] "author__in" => [] "author__not_in" => [] "search_columns" => [] "ignore_sticky_posts" => false "suppress_filters" => false "cache_results" => true "update_post_term_cache" => true "update_menu_item_cache" => false "lazy_load_term_meta" => true "update_post_meta_cache" => true "post_type" => "" "posts_per_page" => 16 "nopaging" => false "comments_per_page" => "50" "no_found_rows" => false "order" => "DESC" ] |
meta_query | WP_Meta_Query {#2562} |
queried_object | WP_Post {#2563} |
queried_object_id | 26778
|
request | """ SELECT wp_posts.*\n \t\t\t\t\t FROM wp_posts \n \t\t\t\t\t WHERE 1=1 AND wp_posts.post_name = 'remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward' AND wp_posts.post_type = 'post'\n \t\t\t\t\t \n \t\t\t\t\t ORDER BY wp_posts.post_date DESC\n \t\t\t\t\t """ |
post_count | 1
|
in_the_loop | true
|
current_comment | -1
|
found_posts | 1
|
is_single | true
|
is_singular | true
|
Key | Value |
ID | 26778
|
post_author | "43"
|
post_date | "2022-11-10 21:53:34"
|
post_date_gmt | "2022-11-10 21:53:34"
|
post_content | """ [caption id="attachment_26781" align="alignnone" width="670"]<img class="wp-image-26781 size-medium" src="https://uat.tfs.staging.poundandgrain.ca/app/uploads/2023/03/YU_TFS_AnthonyArmstrong_RemembranceDay_1110-670x458-1.jpg" alt="Anthony Armstrong is pictured here at a 2010 Remembrance Day ceremony at Hamilton's Gore Park cenotaph " width="670" height="458" /> Anthony Armstrong is pictured here at a 2010 Remembrance Day ceremony at Hamilton's Gore Park cenotaph[/caption]\n \n \n <p class="xxmsonormal">Every year on Remembrance Day, Toronto Film School alumnus <span lang="EN-US"><a href="https://linktr.ee/bonez9oh5" target="_blank" rel="noopener noreferrer">Anthony Armstrong</a> </span>takes time out to remember all his fellow soldiers, many of whom made the ultimate sacrifice both on and off the battlefield.</p>\n <p class="xxmsonormal"><span lang="EN-US"> </span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">He thinks of his Papa Babcock – a Second World War Naval gunner – who survived the war to become one of the most loved and loving people in his family. </span></span></p>\n <p class="xxmsonormal"><span lang="EN-US"> </span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">He thinks about fellow soldiers he lost to acts of war, both overseas in Afghanistan and here on Canadian soil. </span></span></p>\n <p class="xxmsonormal"><span lang="EN-US"> </span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">And he thinks of his “brothers” who returned home, only to lose their life to a whole different, although no less deadly, type of battle. </span></span></p>\n <p class="xxmsonormal"><span lang="EN-US"> </span></p>\n <img class="alignnone size-full wp-image-26783 aligncenter" src="https://uat.tfs.staging.poundandgrain.ca/app/uploads/2022/11/YU_TFS_AnthonyArmstrong_BMQSection_1108.jpg" alt="" width="650" height="477" />\n \n \n <p class="xxmsonormal"><span class="xxcontentpasted0"><b><span lang="EN-US">“</span></b></span><span class="xxcontentpasted0"><span lang="EN-US">Remembrance Day is something that means a lot more to me than what the average person would realize – it’s a very hard situation,” said Armstrong, who enrolled in TFS's <a href="https://staging.torontofilmschool.ca/programs/video-game-design-animation/" target="_blank" rel="noopener noreferrer">Video Game Design & Animation</a> program in 2016, shortly after being forced by injury to early retire from the military.</span></span></p>\n <p class="xxmsonormal"><span lang="EN-US"> </span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">"I’ve lost a few friends overseas and in country, whether it be to suicide after coming back from Afghanistan or crazy stuff like what happened in Ottawa to <a href="https://en.wikipedia.org/wiki/2014_shootings_at_Parliament_Hill,_Ottawa">Nathan Cirillo</a>, a very close friend of mine."</span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">Despite the danger a career in the military presents, Armstrong said he was drawn to the Canadian Forces from a very early age. Born and raised in Burlington, Ontario, he was just a kid when he decided to follow in his father’s own childhood footsteps and join the <a href="https://www.canada.ca/en/department-national-defence/services/cadets-junior-canadian-rangers/cadets.html" target="_blank" rel="noopener noreferrer">Canadian Cadet Corps.</a></span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <img class="alignnone size-full wp-image-26784 aligncenter" src="https://uat.tfs.staging.poundandgrain.ca/app/uploads/2022/11/YU_TFS_AnthonyArmstrong_BasicCadetCourse2001_1108.jpg" alt="" width="650" height="444" />\n \n \n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">“I fell in love with it right away, and from that point on, my entire career path was taking me down the road of military,” he said, noting that, during his distinguished career in the <a href="http://www.62rhliarmycadetcorps.com/" target="_blank" rel="noopener noreferrer">Royal Hamilton Light Infantry Cadet Corps</a>, he earned a reputation as “hardcore” young soldier-in-training and talented marksman.</span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">Just six months after aging out of the cadets at 18, Armstrong signed his paperwork to become an official reservist for the <a href="https://www.canada.ca/en/army/corporate/4-canadian-division/the-royal-hamilton-light-infantry.html" target="_blank" rel="noopener noreferrer">Royal Hamilton Light Infantry</a> (Rileys) – a regiment that enjoys a “very, very rich and well-respected history in Canada” dating back to the 1800s, Armstrong proudly said. </span></span></p>\n \n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">As a reservist, Armstrong often alternated between full- and part-time military work: “I was working full-time contracts on bases regularly, so I’d be gone for six months, then come back home and work in restaurants for six months, then leave again for six months.” </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <img class="alignnone size-full wp-image-26785 aligncenter" src="https://uat.tfs.staging.poundandgrain.ca/app/uploads/2022/11/TFS_YU_AnthonyArmstrong_DefensiveDrills_1108.jpg" alt="" width="650" height="444" />\n \n \n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">“My primary trade was infantry, so that’s what I did most of the time. All my training was in the infantry, so I was doing stuff like close protection and security details, and we would do stuff like room clearing drills and anti-terror activities,” he said, declining to talk about his service overseas. “It was very broad spectrum, frontline forces </span>work.” </span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">Armstrong’s ultimate goal, he said, was to serve 30 years – “but unfortunately my knees caught up to me faster than my career did, and I ended up having to take early retirement…I’m 34 years old and have to use a cane now, because I pushed myself so hard and ignored all the warning signs of pain.” </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">Armstrong said his transition to civilian life was an exceptionally difficult one – especially after having spent “literally” half his life in the military and cadets up to the point of his retirement.</span></span></p>\n \n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">When he retired, he missed the purpose his military career had given him, and the camaraderie of his fellow soldiers. </span></span><span class="xxcontentpasted0"><span lang="EN-US">He found it difficult, he said, to find anywhere he truly fit in for the first time since joining the cadets as a kid. </span></span></p>\n \n \n <img class="alignnone size-medium wp-image-26786 aligncenter" src="https://uat.tfs.staging.poundandgrain.ca/app/uploads/2023/03/YU_TFS_AnthonyArmstrong_1110-526x526-1.jpg" alt="" width="526" height="526" />\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">Then he stumbled upon TFS’s <a href="https://staging.torontofilmschool.ca/programs/video-game-design-animation/" target="_blank" rel="noopener noreferrer">Video Game Design & Animation</a> program, where his reignited childhood passion for gaming turned into a new life’s path. </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">“Toronto Film School is one of the most welcoming places I have ever walked into. I was terrified – terrified – to go back to school at 26 years old, thinking all these young kids were going to make fun of me for being the old guy in class,” he confessed. </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">“But when I got there, I realized that not only was I not the oldest person there, but also, no one really cared how old I was. In class, I was appreciated for being more than just a hardcore army guy…To have people to say, ‘Holy crap! You’re smart! You know what you’re talking about’ for the first time in my life – </span></span><span class="xxcontentpasted0">that </span><span class="xxcontentpasted0"><span lang="EN-US">was a game-changer for me.” </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">Since graduating from TFS in 2018, Armstrong is now in the final term of his <a href="https://www.yorkvilleu.ca/programs/bachelor-of-business-administration-oncampus/" target="_blank" rel="noopener noreferrer" data-auth="NotApplicable" data-linkindex="3">Bachelor of Business Administration</a> studies at <a href="https://www.yorkvilleu.ca/" target="_blank" rel="noopener noreferrer" data-auth="NotApplicable" data-linkindex="4">Yorkville University</a> and has started up his own business called <a href="https://greenarmygames.ca/" target="_blank" rel="noopener noreferrer">Green Army Games</a>. </span></span></p>\n \n \n <img class="size-medium wp-image-26787 aligncenter" src="https://uat.tfs.staging.poundandgrain.ca/app/uploads/2023/03/YU_TFS_GreenArmyGamesLogo_1110-670x523-1.jpg" alt="" width="670" height="523" />\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">He now hopes to carve out a creative career path for himself that will allow him to get his vision out into the world. </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">“I </span></span><span class="xxcontentpasted0"><span lang="EN-US">want to have ownership over the projects I work on and the games that I make. I want the responsibility of managing a team. I want to be able to influence things and get my vision out there,” he said, noting that his ultimate goal is to make a full-sized RPG in the style of his favorite classics including <i>Final Fantasy</i> and <i>Chrono Cross</i>. </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal">He’s also keen to utilize his newfound skills in service of his fellow soldiers still serving on the frontlines.</p>\n \n <p class="xxmsonormal">“I’d love to be able to <span class="xxcontentpasted0"><span lang="EN-US">branch out the military sector and design training simulators. I was in the military, so I know the simulators we use and I know their limitations. I also know how to make games, so I know how to overcome those limitations. Why not do both?” he said. “It would be amazing!”</span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">As he works toward that goal of merging his passion for the military with his newfound skills in video game design, Armstrong said </span></span><span class="xxcontentpasted0"><span lang="EN-US">he hopes all those who aren’t connected to the military world will take time out this Remembrance Day to learn more about the Canadian military and "really understand what it is we do.”</span></span></p>\n \n \n <img class="alignnone size-medium wp-image-26788 aligncenter" src="https://uat.tfs.staging.poundandgrain.ca/app/uploads/2023/03/YU_TFS_AnthonyArmstrong_FullUniform_1108-411x526-1.jpg" alt="" width="411" height="526" />\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span></p>\n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US"> </span></span><span class="xxcontentpasted0"><span lang="EN-US">“I think we’d do a lot better to use Remembrance Day to re-educate people about what it is we do around the world,” he said, noting that the vast majority of Canadian deployments overseas are humanitarian ones. </span></span></p>\n \n <p class="xxmsonormal"><span class="xxcontentpasted0"><span lang="EN-US">"We need people willing to join the military for the right reasons: to help people and to make an impact. Luckily, the Canadian military is a prime place to do that, because we actually think about peace first.”</span></span></p>\n \n \n """ |
post_title | "Remembrance Day | Video Game Alum Anthony Armstrong Reflects on Post-Military Path Forward"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "open"
|
post_password | "" |
post_name | "remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-04-04 19:07:35"
|
post_modified_gmt | "2023-04-04 19:07:35"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://uat.tfs.staging.poundandgrain.ca/?p=26778"
|
menu_order | 0
|
post_type | "post"
|
post_mime_type | "" |
comment_count | "0"
|
filter | "raw"
|
Key | Value |
SERVER_SOFTWARE | "nginx/1.22.1"
|
REQUEST_URI | "/blog/remembrance-day-video-game-alum-anthony-armstrong-reflects-on-post-military-path-forward/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://uat.tfs.staging.poundandgrain.ca/?p=26778"
|
HTTP_ACCEPT_ENCODING | "gzip, br, zstd, deflate"
|
HTTP_USER_AGENT | "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
|
HTTP_ACCEPT | "*/*"
|
HTTP_HOST | "uat.tfs.staging.poundandgrain.ca"
|
REDIRECT_STATUS | "200"
|
HTTPS | "on"
|
SERVER_NAME | "uat.tfs.staging.poundandgrain.ca"
|
SERVER_PORT | "443"
|
SERVER_ADDR | "10.0.1.187"
|
REMOTE_PORT | "12667"
|
REMOTE_ADDR | "3.143.254.198"
|
GATEWAY_INTERFACE | "CGI/1.1"
|
SERVER_PROTOCOL | "HTTP/2.0"
|
DOCUMENT_ROOT | "/home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web"
|
DOCUMENT_URI | "/index.php"
|
SCRIPT_NAME | "/index.php"
|
SCRIPT_FILENAME | "/home/forge/uat.tfs.staging.poundandgrain.ca/releases/20241113033749/web/index.php"
|
CONTENT_LENGTH | "" |
CONTENT_TYPE | "" |
REQUEST_METHOD | "GET"
|
QUERY_STRING | "" |
FCGI_ROLE | "RESPONDER"
|
PHP_SELF | "/index.php"
|
REQUEST_TIME_FLOAT | 1731830754.7374
|
REQUEST_TIME | 1731830754
|
DB_NAME | "tfs_uat"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://uat.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://uat.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|
MIRROR_URL | "https://dev.tfs.staging.poundandgrain.ca"
|
SOURCE_OF_TRUTH | "false;"
|
BLOG_URL | "https://dev.tfs.staging.poundandgrain.ca"
|
Key | Value |
DB_NAME | "tfs_uat"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://uat.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://uat.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|
MIRROR_URL | "https://dev.tfs.staging.poundandgrain.ca"
|
SOURCE_OF_TRUTH | "false;"
|
BLOG_URL | "https://dev.tfs.staging.poundandgrain.ca"
|