*
* @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/dev.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/dev.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/dev.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/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/storage/framework/views/eb422c8beb3d93cfa2fe08ce3b438f23bc0fae21.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/dev.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/dev.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/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-blog-header.php"
Key | Value |
query_vars | array:3 [ "page" => "" "name" => "rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story" "category_name" => "blog" ] |
query_string | "name=rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story&category_name=blog"
|
request | "blog/rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story" "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" => 10 "nopaging" => false "comments_per_page" => "50" "no_found_rows" => false "order" => "DESC" ] |
meta_query | WP_Meta_Query {#2559} |
queried_object | WP_Post {#2560} |
queried_object_id | 21192
|
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 = 'rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story' 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 | 21192
|
post_author | "43"
|
post_date | "2020-11-16 15:27:14"
|
post_date_gmt | "2020-11-16 15:27:14"
|
post_content | """ Sgt. Martin Spriggs always knew he wanted to be a soldier. In fact, he planned to make a career of it.\n \n \n \n What he never could have guessed, however, was that nearly 40 years after enlisting, his ever-evolving journey in life would lead him on an entirely different path – one that ultimately lead to Toronto Film School, where he's currently studying to become a documentary filmmaker.\n \n \n \n After all, he came from a long line of soldiers – his father served in the British Army during the Second World War, his grandfather in the First World War, and his great grandfather in South Africa and India before that.\n \n \n \n “It was something ingrained in me from childhood, because of that a long tradition of military service in my family,” Spriggs, who enlisted in the Army Reserves in 1981 at just 17, said of his early army ambitions.\n \n \n \n “Since as far back as I can remember, I always wanted to be a soldier.”\n \n \n \n <img class="size-medium wp-image-21245 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2020/11/TFSO_VP_MartinSpriggs_Canadian-Airborne-Regiment-Normandy-France-1994_1104.jpg" alt="" width="360" height="526" />\n \n \n \n But when Spriggs’ 15-year career as an infantryman and paratrooper in the Canadian military was cut unexpectedly short by injury, the Gulf War veteran had to rethink the entire trajectory of his life.\n \n \n \n “I suffered a spinal cord injury parachuting in 1994 and it ended my career in army,” said the Ottawa Valley native, noting it took him more than a year to recover from the incident.\n \n \n \n “I’d always told myself I didn’t want to become one of those old, crusty, bitter sergeants working a desk job, so I took a voluntary release back in 1996.”\n \n \n \n Now into his sixth foray into the world of post-secondary studies since retiring from the military, Spriggs – a fourth term <a href="https://online.torontofilmschool.ca/programs/video-production-diploma/" target="_blank" rel="noopener noreferrer">Video Production</a> diploma student at <a href="https://online.torontofilmschool.ca/programs/" target="_blank" rel="noopener noreferrer">Toronto Film School Online</a> – said education has been key to the pursuit of his varied passions since retiring from the army.\n \n \n \n “You can see from my story that, throughout my life, every time I don’t know something, I just go back to school to learn it,” he laughed. “I enjoy school, so it’s fun for me.”\n \n \n \n His first post-military calling to become an Emergency Medical Technician (EMT) was inspired by his aptitude for combat first aid – a skill he discovered while serving on United Nations peacekeeping mission in Bosnia.\n \n \n \n <img class="size-medium wp-image-21246 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2020/11/TFSO_VP_MartinSpriggs_UN-Peacekeeping-Operation-Sarajevo-Airport-1992_1104.jpg" alt="" width="411" height="526" />\n \n \n \n Shortly after being released from the military in 1996, he enrolled in the <a href="https://www.sait.ca/" target="_blank" rel="noopener noreferrer">Southern Alberta Institute of Technology</a>’s EMT certificate program – an experience that ended up taking him down another, albeit parallel, career path.\n \n \n \n <strong>“</strong>As part of that program, we did five shifts in the ER – and once I got into the ER and saw what an ER nurse could do, I thought that was really cool,” he said.\n \n \n \n “So, I finished my EMT training in the spring of ’97, then immediately applied to <a href="https://lethbridgecollege.ca/" target="_blank" rel="noopener noreferrer">Lethbridge College</a> and was accepted to begin my nursing diploma.”\n \n \n \n Spriggs was hired to work in the Emergency Department at <a href="https://www.albertahealthservices.ca/rgh/rgh.aspx" target="_blank" rel="noopener noreferrer">Rockyview General Hospital</a> in Calgary straight after his graduation from nursing school in 2000 – an “unheard of” feat he credits his combined army and EMT experience with paving for him.\n \n \n \n After five years in the ER and another year-and-a-half in the ICU – during which time he also earned his Advanced Critical Care Nursing certificate from <a href="https://www.mtroyal.ca/" target="_blank" rel="noopener noreferrer">Mount Royal University</a> – Spriggs decided to make yet another big move.\n \n \n \n “I went way up north, and I did what is called outpost nursing in the Arctic. You travel around to these little tiny communities, and some have a one-nurse outpost, some have two, some have five,” he explained.\n \n \n \n “It’s great, because you’re it – you’re the physician, the x-ray tech, the lab tech, and the pharmacist. You do it all. So that was a huge challenge.”\n \n \n \n Upon his return to Calgary three years later, Spriggs took a job as a Public Health Nurse at the Tuberculosis Clinic – an opportunity that exposed him to the local refugee community for the first time – before landing himself “one of the best jobs in health care” he ever had as an Emergency Management Officer.\n \n \n \n “I used all the experience I had from my army skills planning, writing exercises and all that stuff, and found I could turn it into healthcare. My job was to go into hospitals and train them how to run mass casualty incidents and scenarios like that,” he explained.\n \n \n \n “So, I went off and got a Master’s degree in Disaster and Emergency Management at <a href="https://www.royalroads.ca/?gclid=CjwKCAiAkan9BRAqEiwAP9X6UXU8bSFrK7MthJ-ZNioEH6J09xRkVIN24OF2VnbxtGn2TKtaL4RAlhoCJfkQAvD_BwE" target="_blank" rel="noopener noreferrer">Royal Roads University</a>, and a year after that, I did a post-grad diploma at <a href="https://www.lstmed.ac.uk/" target="_blank" rel="noopener noreferrer">Liverpool School of Tropical Medicine</a>, because I saw that as my path forward in life.”\n \n \n \n Shortly after completing that training, Spriggs received an out-of-the-blue phone call from a friend that would yet again change his life’s course.\n \n \n \n “I’ll never forget it. He was in Africa working in a refugee camp in South Sudan, and asked if I’d like to come and run healthcare in the camp for him,” Spriggs said.\n \n \n \n <img class="size-medium wp-image-21248 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2020/11/TFSO_VP_MartinSpriggs_Primary-Healthcare-Coordinator-Gendrassa-Refugee-Camp-South-Sudan-2013_Vert_1104.jpg" alt="" width="380" height="526" />\n \n \n \n “So, of course I said, ‘Sure,’ and quit the best-paying job, with the best benefits, and the best boss to go work in Africa for peanuts…and I did that for about five years.”\n \n \n \n During his time in Africa, Spriggs worked for four different international NGOs (non-government organizations) – including <a href="https://internationalmedicalcorps.org/" target="_blank" rel="noopener noreferrer">International Medical Corps</a>, <a href="https://wearealight.org/" target="_blank" rel="noopener noreferrer">American Refugee Committee</a>, and <a href="https://www.goalglobal.org/" target="_blank" rel="noopener noreferrer">GOAL Ireland</a>.\n \n \n \n He served as a primary healthcare officer at a South Sudanese refugee camp, ran 35 mud-hut health care centres across South Sudan, planned and managed the emergency response to an Ebola epidemic in Sierra Leone, and started up primary health in a Rwandan camp during the Burundi refugee crisis, among other experiences.\n \n \n \n <img class="size-medium wp-image-21247 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2020/11/TFSO_VP_MartinSpriggs_Emergency-Team-Leader-During-Battle-for-Malakal-South-Sudan-2014_1104.jpg" alt="" width="670" height="393" />\n \n \n \n Despite the high pressure of those postings, Spriggs said it wasn’t until he returned to Canada in 2018 and took up a yearlong assignment managing six health care centres in Whitehorse that the strain of his high-stress career finally caught up with him.\n \n \n \n “I was starting to see the physiological symptoms of chronic stress, and I needed a lifestyle change, so I quit my job, I quit my work, and now I’m at back at school to become a videographer,” he laughed.\n \n \n \n What drew Spriggs to the 24-month <a href="https://online.torontofilmschool.ca/programs/video-production-diploma/" target="_blank" rel="noopener noreferrer">Online Video Production</a> program at Toronto Film School, he said, was the school’s “international reputation,” as well as its esteemed roster of industry-active instructors with projects such as <em><a href="https://www.netflix.com/ca/title/80027042" target="_blank" rel="noopener noreferrer">The Flash</a></em>, <em><a href="https://www.marvel.com/movies/avengers-infinity-war" target="_blank" rel="noopener noreferrer">Avengers: Infinity War</a></em> and <em><a href="https://www.hbo.com/game-of-thrones" target="_blank" rel="noopener noreferrer">Game of Thrones</a></em> in their filmography.\n \n \n \n The program has also given him the opportunity to seize and expand upon the lifelong love of still photography he inherited from his photo enthusiast parents.\n \n \n \n “I grew up taking pictures and I always had my father’s gift of framing a shot,” Spriggs explained, noting that his father ended his time in the British Army working as a photographer for the Commonwealth War Graves Commission.\n \n \n \n “I did a little bit of photography when I was in the army and when I was traveling half the world with my nursing career, too. I began to post the pictures I was taking on Facebook in its early days and found that I had a knack for it. People really liked my photography.”\n \n \n \n Spurred by that positive feedback, Spriggs launched <a href="https://www.travelbagphotography.com/" target="_blank" rel="noopener noreferrer">Travelbag Photography</a> a few years ago, offering “stunning still photography and vivid travel video professionally packaged.”\n \n \n \n Spriggs also showcases his work on his <a href="https://www.youtube.com/channel/UClHZyfTM_--R8sHEmC1KyKA" target="_blank" rel="noopener noreferrer">Roaming Ranger YouTube</a> page – named after the truck he goes out adventuring in.\n \n \n \n “My time at Toronto Film School was been wonderful. I’ve learned a lot. Look at my latest videography work, a three-minute video of grizzly bears that I shot just a couple of weeks ago in Bella Coola,” Spriggs urged.\n \n \n <p style="text-align: center;"><iframe src="https://www.youtube.com/embed/n07JhU47ZFA" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>\n \n \n “I couldn’t do any of that a year ago, so Toronto Film School has done a great job with me.”\n \n \n \n Spriggs’ ultimate career aspiration after finishing up his Online Video Production studies, he said, is to become a travel/history documentary filmmaker – a calling he believes will satisfy both his thirst for adventure and his need to be creative.\n \n \n \n He got a head start on that life goal just last fall, when he traveled with a group of fellow army veterans to Tunisia on an expedition in search of an old British Army desert patrol site. Spriggs brought his video camera to document the entire journey.\n \n \n <p style="text-align: center;"><iframe src="https://www.youtube.com/embed/_3FpClkCMBU" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>\n \n \n “It was a crazy experience,” he said. “We found two remnants of a British Army patrol that was attacked by the Germans in January 1942 – the engine grill of the specific type of truck that they used, and a tin of tobacco that was made in Scotland up until 1940. It was amazing.”\n \n \n \n Now set to join the same team on another Tunisian adventure this coming April, Spriggs said he’s excited to put the newfound skills he’s learning at Toronto Film School to good use behind the camera.\n \n \n \n “I filmed a lot of it on the first trip, when I was nowhere near as good as I am now. Our plan this time is to shoot a full travel adventure documentary and probably sell it to somebody like the History Channel or Discovery Channel. We’ve even got a producer lined up,” he enthused.\n \n \n \n “So, already with the training I’m doing with Toronto Film School, I’m starting to see my future unfolding as it happens.”\n \n \n \n If Spriggs were to offer one piece of advice to fellow veterans on the verge of taking that leap of faith into a civilian career, it would be to “believe in yourself” at all costs.\n \n \n \n “You can do anything you want, because you have extraordinary experiences that lend well,” he said. “So just do it – put your mind to it, take that first step, open that door, and f***ing do it.”\n \n """ |
post_title | "Rework, Repurpose, Recycle | Fashion Grad Shannan MacKenzie-Hall Inspired By Vintage Clothing"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "open"
|
post_password | "" |
post_name | "rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:07:45"
|
post_modified_gmt | "2023-03-27 21:07:45"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/?p=21192"
|
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/rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/rework-repurpose-recycle-shannan-mackenzie-halls-fashion-design-story"
|
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 | "dev.tfs.staging.poundandgrain.ca"
|
REDIRECT_STATUS | "200"
|
HTTPS | "on"
|
SERVER_NAME | "dev.tfs.staging.poundandgrain.ca"
|
SERVER_PORT | "443"
|
SERVER_ADDR | "10.0.1.187"
|
REMOTE_PORT | "3642"
|
REMOTE_ADDR | "3.137.171.94"
|
GATEWAY_INTERFACE | "CGI/1.1"
|
SERVER_PROTOCOL | "HTTP/2.0"
|
DOCUMENT_ROOT | "/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web"
|
DOCUMENT_URI | "/index.php"
|
SCRIPT_NAME | "/index.php"
|
SCRIPT_FILENAME | "/home/forge/dev.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 | 1731839875.6168
|
REQUEST_TIME | 1731839875
|
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.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"
|
Key | Value |
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.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"
|