*
* @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" => "tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps" "category_name" => "blog" ] |
query_string | "name=tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps&category_name=blog"
|
request | "blog/tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps" "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 | 25545
|
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 = 'tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps' 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 | 25545
|
post_author | "43"
|
post_date | "2022-06-07 19:49:12"
|
post_date_gmt | "2022-06-07 19:49:12"
|
post_content | """ <p style="font-weight: 400;">For the first time in more than two years, Toronto Film School’s acting students will return to the stage with a live, in-person production of <em>The 39 Steps</em>.</p>\n \n <p style="font-weight: 400;">Directed by <a href="https://www.imdb.com/name/nm1194710/" target="_blank" rel="noopener noreferrer">Jack Grinhaus</a>, the play is based on <a href="https://en.wikipedia.org/wiki/Alfred_Hitchcock" target="_blank" rel="noopener noreferrer">Alfred Hitchcock</a>’s <a href="https://en.wikipedia.org/wiki/The_39_Steps_(1935_film)" target="_blank" rel="noopener noreferrer">1935 thriller</a> of the same name, which follows the story of Richard Hannay – a man who gets caught up in preventing an organization of spies called The 39 Steps from stealing military secrets.</p>\n \n \n [caption id="attachment_25874" align="aligncenter" width="360"]<img class="size-medium wp-image-25874" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_39StepsPosterQR_0615.jpg" alt="" width="360" height="526" /> Poster designed by Shayna Piercy[/caption]\n \n \n <p style="font-weight: 400;">“It is unfathomable that over two years have passed since Toronto Film School’s Acting program last mounted our graduating play on a stage. When the world turned upside down, all of our work was confined to the small screen,” said Hart Massey, director of the <a href="https://www.torontofilmschool.ca/programs/acting-for-film-tv-and-the-theatre-diploma/" target="_blank" rel="noopener noreferrer">Acting for Film, TV & the Theatre</a> program.</p>\n \n <p style="font-weight: 400;">“So, let’s celebrate the return! It’s a reunion of sorts, as we settle into our seats next to friends, hear the sounds of laughter and applause all around us, and appreciate the work of actors right before our very eyes. There’s absolutely nothing like it!”</p>\n \n <p style="font-weight: 400;"><em>The 39 Steps,</em> which is stage-managed by Rayden Pelland-Carriere, will take to the stage at <a href="https://www.nowplayingtoronto.com/venue/the-papermill-theatre/" target="_blank" rel="noopener noreferrer">The Papermill Theatre</a> for a three-performance run on June 15, 16 and 17 as follows:</p>\n \n <p style="font-weight: 400; text-align: center;">Wednesday, June 15 at 8 p.m.</p>\n <p style="font-weight: 400; text-align: center;">Thursday, June 16 at 8 p.m.</p>\n <p style="font-weight: 400; text-align: center;">Friday, June 17 at 8 p.m.</p>\n \n <p style="font-weight: 400; text-align: center;">The Papermill Theatre is located at <a href="https://www.toronto.ca/explore-enjoy/history-art-culture/museums/todmorden-mills/" target="_blank" rel="noopener noreferrer">Todmorden Mills</a>, <a href="https://www.google.com/maps/place/67+Pottery+Rd,+Toronto,+ON+M4K+2B9/data=!4m2!3m1!1s0x89d4ccbd193228fb:0x8739d86bfa203e42?sa=X&ved=2ahUKEwiirI6mzZv4AhWfkYkEHTW8ByAQ8gF6BAgCEAE" target="_blank" rel="noopener noreferrer">67 Pottery Rd.</a> Tickets are free and are available at the door.</p>\n <p style="font-weight: 400;"><strong> </strong></p>\n \n <h1 style="font-weight: 400; text-align: center;"><strong>The Creative Team Behind <em>The 39 Steps</em>:</strong></h1>\n <p style="font-weight: 400;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong> <img class="alignnone size-medium wp-image-25549" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_EvertonCampbell_0607.jpg" alt="" width="526" height="526" /></strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Everton Campbell as the Narrator/Insp. Albright</strong></p>\n <p style="font-weight: 400; text-align: center;">Everton “Dwight” Campbell is a versatile and experienced actor who has acted in a wide rang of projects, from reality TV to independent films. Campbell has also taken part in quite a few commercials, including ads for Planet Fitness, Samsung, and Ancestry.com, to name a few. He recently completed his studies in Toronto Film School’s Acting for Film, TV & the Theatre program, from which he graduated with honours. Although Campbell is a recent graduate, he has been acting for over a decade. He also has a degree in Communications, with a concentration in Public Relations and a minor in Political Science.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25550" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_JayDaye_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Jay Daye as Compere/Pilot 1</strong></p>\n <p style="font-weight: 400; text-align: center;">Better known as “Ocean La’Vodka Giovanni,” Jay Daye was born to perform. A film student by day, and a drag queen at night, Daye aspires to one day combine his drag and acting careers. Making his TV debut on Amazon Prime and Out TV in 2019, Daye has performed at book launches and film festivals was featured on HBO’s <em>Sort Of</em>, and has produced his own show in various venues. Often referred to as the “Lipsync Assasin” of Toronto, both Daye’s drag and his acting often evoke a “fight, flight AND freeze” feeling in his audiences. He’s always down for a good time.</p>\n \n \n \n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25551" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_MathieuDumas_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Mathieu Dumas as Mr. Memory</strong></p>\n <p style="font-weight: 400; text-align: center;">Mathieu Dumas, from Montreal, Quebec, has been performing for as long as he can remember. Fluent in both French and English, he performed many iconic roles in various high school, plays, including ‘Mr. Smee’ from <em>Peter Pan</em>, and ‘Gaston’ from <em>Beauty and the Beast. </em>He also gained improv experience in both high school and college. He began the Acting for Film, TV & the Theatre program at Toronto Film School in April 2021, even before obtaining his bachelor’s degree in Cinema from the University of Montreal.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25552" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_JamshidKhayamdar_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Jamshid Khayamdar as the Sheriff</strong></p>\n <p style="font-weight: 400; text-align: center;">Jamshid Khayamdar is a true lover of cinema whose passion for film was ignited when he first saw Kurosawa’s works. Currently studying acting at Toronto Film School, Khayamdar has performed some classically fantastic scenes from various cinematic and theatrical masterpieces, such as the <em>Seven</em> stories directed by John Beale, and as a gang leader in <em>The Easy Street</em>, a movie directed by actor and Toronto Film School instructor, John Tench. Now that Khayamdar’s time in the classroom is coming to a close, he is looking forward to getting a chance to use and create different personas.</p>\n \n \n \n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25553" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_EmilyLarman_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Emily Larman as Margaret</strong></p>\n <p style="font-weight: 400; text-align: center;">Emily Larman is an actress currently in her fifth term in the Acting for TV, Film & the Theatre program at Toronto Film School. She has performed many scenes from TV shows, films and theatre plays during her time at school. Some of her notable theatre roles are ‘Lady Macbeth’ and the ‘Third Witch’ in Shakespeare’s <em>Macbeth</em>, and ‘Mrs. Wire’ in Tennessee Williams’ <em>The Lady of Larkspur Lotion</em>. She also performed scenes from films and TV shows, such as ‘Andie Anderson’ in <em>How to Lose a Guy in 10 Days</em>, and ‘Nurse Tyler’ from the series premiere of <em>Grey’s Anatomy</em>.\n \n \n \n \n \n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25554" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_TroyMartin-Morgan_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Troy Martin-Morgan as Salesman 2/Policeman 1/Heavy 2</strong></p>\n <p style="font-weight: 400; text-align: center;">Troy Martin-Morgan is an apprentice member with the Actra Toronto union. He is currently training as a fifth-term Toronto Film School acting student. Born and raised in Toronto, his interest in acting began during high school, when he was selected to perform a play at York University. He also has extensive training in piano from the Royal Conservatory of Music. Martin-Morgan aspires to be a film and TV actor and also has an interest in theatre and musicals.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25555" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_FikayoOdunayo_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Fikayo Odunayo as Richard Hannay</strong></p>\n <p style="font-weight: 400; text-align: center;">Fikayo Odunayo is a Nigerian actor currently training as a Term 5 Toronto Film School student. He is also a singer and an experienced pianist in the gospel, contemporary and jazz-fusion genres, as well as a budding orchestral composer. He got his start as an actor in a primary school stage play of <em>Puss in Boots,</em> which led him to other small parts in school productions. He recently wrote, produced, and directed his first short film in 2021 called <em>Day O</em>.</p>\n \n \n \n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25556" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_GregoryPetruk_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Gregory Petruk as Salesman 1/Policeman 2/Heavy 1</strong></p>\n <p style="font-weight: 400; text-align: center;">Gregory Petruk is an actor from Edmonton, Alberta and a term 5 Toronto Film School student. In high school, Petruk portrayed Pfc. Louden Downey in <em>A Few Good Men</em>, which won a local award for best play. He performed in The Brothers Grimm’s <em>Spectaculathon</em>, a one-act play in which he portrayed all of the characters. In 2017, he was an ensemble member in The Citadels yearly performance of <em>A Christmas Carol.</em> Petruk enjoys playing guitar and driving stick while listening to music. He is interested in all areas of acting, from voiceover to stage and film.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25557" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_MatthewPutnam_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Matthew Putnam as Milkman/Porter/Newspaper Boy</strong></p>\n <p style="font-weight: 400; text-align: center;">Matthew Wayne Putnam grew up in Bowmanville, Ontario, where he fell in love with acting in high school. He now lives in Toronto and studies in the Acting for Film, TV & the Theatre program at Toronto Film School. There, he had the opportunity to create and star in a short silent film titled <em>Making Peace</em>, which can be found on YouTube. He also starred in Ben Vandermark’s project <em>Saved By The Bomb</em>, which is set to release in 2022.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <img class="alignnone size-medium wp-image-25558 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_RahaRouhollahi_0607.jpg" alt="" width="526" height="526" />\n <p style="font-weight: 400; text-align: center;"><strong>Raha Rouhollahi as Annabella Schmidt/Professor Jordan</strong></p>\n <p style="font-weight: 400; text-align: center;"><strong> </strong>Raha Rouhollahi is a passionate artist – from voice and musical theatre, to TV comedy and drama, she portrays any story like it is her own. She also plays the violin and piano, sings, executes several dialects, does stunts, and dances and is a great writer. She has a bachelor’s degree in Art and Design from OCAD and is completing her acting diploma here at TFS. Rouhollahi has played lead roles in three theatrical productions: <em>The Simorgh</em>, <em>The Hostel</em> and <em>The Recess</em>. She’s also used her talents in concerts, recitals and shows at venues including the Tirgan Festival, Richmond Hill Centre for the Performing Arts and the Meridian Arts Centre.</p>\n \n \n \n <p style="font-weight: 400; text-align: center;"><strong> <img class="alignnone size-medium wp-image-25559" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_RichardSayles_0607.jpg" alt="" width="526" height="526" /></strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Richard Sayles as Pilot 2/Inspector/Mr. McGarrigle</strong></p>\n <p style="font-weight: 400; text-align: center;">Born in Jamaica, Richard Sayles is an aspiring actor who came to Canada when he was 11. He speaks both English and Patwa, and has worked in culinary arts for many years as a line cook, sous chef and kitchen manager. During his studies at Toronto Film School, Sayles wrote and produced his own silent film, <em>A Long Day</em>, in which he took on many roles, and was also cast as the main detective in a crime drama called <em>Easy Streets</em>. Sayles has various skill sets, including carpentry, cooking and farming. He enjoys outdoor sports and hiking.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <img class="size-medium wp-image-25560 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_KatieSilva_0607.jpg" alt="" width="526" height="526" />\n <p style="font-weight: 400; text-align: center;"><strong>Kaitlyn Silva as Pamela</strong></p>\n <p style="font-weight: 400; text-align: center;">Katie Silva is a young and up-and-coming actress with a drive to bring visions to life. She started acting in elementary school theatre productions of <em>The Trial of the Big Bad Wolf</em> as ‘The Big Bad Wolf’, and <em>Grease Jr.</em> as ‘Danny Zuko’. Currently enrolled at Toronto Film School, Silva tackled various different roles from ‘Roberta’ in <em>Danny in the Deep Blue Sea</em> to ‘Pheobe’ in <em>Friends</em>. Silva is also a talented visual artist, which has proven handy as she stepped into paint sets for her high school production of <em>Peter Pan</em>, designing and creating Tinker Bell’s house.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25561" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_NicoleWalker_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Nicole Walker as Pamela Mrs. Higgins/Mrs. Jordan/Mrs. McGarrigle</strong></p>\n <p style="font-weight: 400; text-align: center;">Nicole (Nikki) Walker is an English-speaking Canadian actress. She has participated in various types of dance at Let’s Dance Studio for many years. She’s also taken karate classes for self-defence. Growing up, Walker was always drawn to the arts, as she spent most of her life playing various instruments including the guitar, piano, and flute. During her time at Toronto Film School, she has acted as a co-star in the short film and has also reenacted different scenes from popular movies including <em>La-La Land</em>, monologues from <em>Grey’s Anatomy</em>, and <em>Autumn in New York</em>. Walker draws influence and inspiration from actors such as Robin Williams, Johnny Depp, and Angelina Jolie.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <img class="alignnone size-medium wp-image-25562 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_JaxonWeegar_0607.jpg" alt="" width="526" height="526" />\n <p style="font-weight: 400; text-align: center;"><strong>Jaxon Weegar as Crofter</strong></p>\n <p style="font-weight: 400; text-align: center;">Jaxon Weegar is a versatile actor who isn’t afraid to be vulnerable. Ever since he was a young boy in theatre camp at the Morrisburg Playhouse, he always aspired to become an entertainer. He has since participated in plays, and musicals and was hired as an actor for an escape room located in a prison. Before coming to Toronto Film School to focus on his real ambition for acting, he studied accounting York University. He will accept any challenge that comes his way. Weegar someday hopes to book a sitcom role. His main goal is to satisfy, entertain and bring smiles, or tears to the faces of the people.</p>\n \n \n \n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25563" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_JackGrinhaus_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Jack Grinhaus – Director</strong></p>\n <p style="font-weight: 400; text-align: center;">Jack Grinhaus is an award-winning and nominated theatre artist. Primarily a director, he has also worked in various streams of theatre as a producer, designer, playwright, and actor with numerous theatre, TV, and film credits. Grinhaus was the Artistic Director for the Canadian regional theatre Theatre NorthWest (2014-2019), is Co-Artistic Director of B2C Theatre, was part of the 2010 Canadian Stage BASH Directors Residency as well as the inaugural Director’s Lab North at Tarragon Theatre. He holds an MFA and BA Honours in Theatre from York University’s Theatre program, an Associate Degree in Acting from The American Academy of Dramatic Arts in New York City, and has studied intensely with internationally renowned artists Uta Hagen, Anne Bogart the SITI Company, and Graham McLaren.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong><img class="alignnone size-medium wp-image-25564" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_RaydenPelland-Carriere_0607.jpg" alt="" width="526" height="526" /> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong>Rayden Pelland-Carriere – Stage Manager</strong><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;">Rayden is a Canadian actor from Sudbury Ontario. He developed a passion for acting at an early age, having done over 20 live productions by the age of 18. After earning his Red Seal in drama, dance and vocals, Pelland-Carriere has shifted his focus towards film, having recently graduated from TFS’ acting program. Now he is constantly looking for work in the industry utilizing his talents in many areas, including voice, comedy and improv. Pelland-Carriere is honoured to be a part of this production and would like to thank everyone who has made this possible.</p>\n \n <p style="font-weight: 400; text-align: center;"><strong> </strong></p>\n <p style="font-weight: 400; text-align: center;"><strong> </strong></p> """ |
post_title | "TFS Returns to Live Theatre with Adaptation of Alfred Hitchcock's 'The 39 Steps'"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "open"
|
post_password | "" |
post_name | "tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:07:02"
|
post_modified_gmt | "2023-03-27 21:07:02"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/?p=25545"
|
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/tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/tfs-returns-to-live-theatre-with-adaptation-of-alfred-hitchcocks-the-39-steps"
|
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 | "17159"
|
REMOTE_ADDR | "3.145.73.196"
|
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 | 1731850392.6105
|
REQUEST_TIME | 1731850392
|
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"
|