*
* @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-alumni-celebrate-wild-success-of-horror-film-godforsaken" "category_name" => "blog" ] |
query_string | "name=tfs-alumni-celebrate-wild-success-of-horror-film-godforsaken&category_name=blog"
|
request | "blog/tfs-alumni-celebrate-wild-success-of-horror-film-godforsaken"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=tfs-alumni-celebrate-wild-success-of-horror-film-godforsaken&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "tfs-alumni-celebrate-wild-success-of-horror-film-godforsaken" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "tfs-alumni-celebrate-wild-success-of-horror-film-godforsaken" "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 | 25248
|
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-alumni-celebrate-wild-success-of-horror-film-godforsaken' 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 | 25248
|
post_author | "43"
|
post_date | "2022-04-14 17:56:51"
|
post_date_gmt | "2022-04-14 17:56:51"
|
post_content | """ <p style="font-weight: 400;">From its surprise <a href="https://www.nytimes.com/2022/04/01/movies/streaming-horror-movies.html" target="_blank" rel="noopener noreferrer"><em>New York Times</em> shout out</a>, to its virtual premiere with <a href="https://www.youtube.com/watch?v=vjuKkG9EBb8" target="_blank" rel="noopener noreferrer">Kings of Horror</a>, to its worldwide distribution via <a href="https://www.terrorfilms.net/" target="_blank" rel="noopener noreferrer">Terror Films</a> – <a href="https://www.imdb.com/title/tt11887694/" target="_blank" rel="noopener noreferrer"><em>Godforsaken</em></a> has taken the horror world by storm this month, transforming itself from the little-indie-that-could to a monster-fully successful future cult classic.</p>\n \n <p style="font-weight: 400;">Written and directed by <a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a> graduate <a href="https://www.imdb.com/name/nm6367320/?ref_=ttfc_fc_dr1" target="_blank" rel="noopener noreferrer">Ali Akbar Akbar Kamal</a>, the $40,000 film was picked by <em>New York Times </em>horror columnist <a href="https://www.nytimes.com/by/erik-piepenburg" target="_blank" rel="noopener noreferrer">Erik Piepenburg</a> as one of five “unnerving” offerings that prove “it doesn’t take big bucks to scare people’s pants off” in his monthly <a href="https://www.nytimes.com/2022/04/01/movies/streaming-horror-movies.html" target="_blank" rel="noopener noreferrer">Five Horror Movies to Stream Now</a> column.</p>\n \n <p style="text-align: center;"><iframe title="YouTube video player" src="https://www.youtube.com/embed/vjuKkG9EBb8" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>\n \n <p style="font-weight: 400;">Piepenburg wrote that it was Kamal’s “fear of unknown beings that hold unlimited power over us” that inspired him to make this “unnerving found-footage possession film.”</p>\n \n <p style="font-weight: 400;">“He’s channeled that terror…into a cautionary tale about blind faith, with zombies and occultism tossed in for kicks,” he wrote, noting the film “had” him in its opening minutes.</p>\n \n <p style="font-weight: 400;">“I don’t know what’s in the water in Harriston, Ontario, where the film <a href="https://www.elorafergustoday.com/local-news/harriston-plays-itself-in-upcoming-independent-horror-film-5152560" target="_blank" rel="noopener noreferrer">was shot and is set</a>. But I’ll have what the locals are having – their enthusiasm as extras makes the film as playful as it is macabre.”</p>\n \n \n [caption id="attachment_25251" align="aligncenter" width="670"]<img class="wp-image-25251 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2019/12/TFS_FP_Godforsaken_1220.jpg" alt="Godforsaken cast and crew in Harriston, ON" width="670" height="393" /> The cast and crew of Godforsaken on set in Harriston, Ontario[/caption]\n <p style="font-weight: 400;"><em> </em></p>\n <p style="font-weight: 400;">Filmed over the span of nearly three weeks in November 2019, <em>Godforsaken </em>follows an indie documentary filmmaker as he investigates the seemingly miraculous case of a childhood friend who rises from the dead with mysterious abilities that end up taking a sinister twist.</p>\n \n <p style="font-weight: 400;">Produced by <a href="https://www.facebook.com/makamafilms/" target="_blank" rel="noopener noreferrer">MaKama Films</a> and Tailored Films, much of the film’s cast and crew was comprised of Kamal’s fellow Toronto Film School alumni – an experience the Afghanistan-born writer, director, actor and editor wrote about in a <a href="https://www.torontofilmschool.ca/blog/guest-blog-film-production-alumnus-ali-akbar-akbar-kamal-on-his-new-horror-feature-godforsaken/" target="_blank" rel="noopener noreferrer">January 2020 guest article</a> for Toronto Film School.</p>\n \n \n [caption id="attachment_25254" align="aligncenter" width="670"]<img class="wp-image-25254 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2019/12/TFS_FP_GodforsakenAliAkbarAkbarKamal_1220.jpg" alt="Godforsaken writer/director Ali Akbar Akbar Kamal" width="670" height="393" /> Godforsaken writer/director Ali Akbar Akbar Kamal[/caption]\n \n \n <p style="font-weight: 400;">Godforsaken’s key team, he said, worked with a modest crew of eight, as well as nine main cast members, including: his fellow <a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a> grads <a href="https://www.imdb.com/name/nm6367321/?ref_=ttfc_fc_cr3" target="_blank" rel="noopener noreferrer">Mariah MacDonald</a> (co-producer), <a href="https://www.imdb.com/name/nm3362666/" target="_blank" rel="noopener noreferrer">Ho Che Anderson</a> (cinematographer), <a href="https://www.imdb.com/name/nm5204483/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Paul Viret</a> (sound editor), <a href="https://www.imdb.com/name/nm5206446/?ref_=ttfc_fc_cr19" target="_blank" rel="noopener noreferrer">Prasanna Paul</a> (visual effects), <a href="https://www.imdb.com/name/nm5052986/?ref_=ttfc_fc_cr7" target="_blank" rel="noopener noreferrer">Sara James Fargo</a> (art director) and <a href="https://www.imdb.com/name/nm7165398/" target="_blank" rel="noopener noreferrer">Delfin Jenn</a> (assistant art director); <a href="https://www.torontofilmschool.ca/programs/writing-for-film-tv-diploma/" target="_blank" rel="noopener noreferrer">Writing for Film & Television</a> grad <a href="https://www.imdb.com/name/nm11397820/?ref_=ttfc_fc_cr12" target="_blank" rel="noopener noreferrer">Danielle Fotheringham</a> (production assistant); and <a href="https://www.torontofilmschool.ca/programs/acting-for-film-tv-and-the-theatre-diploma/" target="_blank" rel="noopener noreferrer">Acting</a> grads <a href="https://www.imdb.com/name/nm5110180/" target="_blank" rel="noopener noreferrer">Chad Tailor</a> (co-producer and actor playing ‘Chad Taylor’), <a href="https://open.spotify.com/album/3tdfsVcoLgRNQWeMNxBoMh?si=EXosPXmXSJeOvxaISzswlg&nd=1" target="_blank" rel="noopener noreferrer">Gloria Gift Nankunda</a> (2<sup>nd</sup> assistant director), <a href="https://www.torontofilmschool.ca/blog/acting-grad-proves-theres-no-such-thing-as-small-role-on-netflixs-les-affames/" target="_blank" rel="noopener noreferrer">Mélie B. Rondeau</a> (as ‘Lisa Harris’), <a href="https://www.imdb.com/name/nm6301939/" target="_blank" rel="noopener noreferrer">Domenic Derose</a> (as ‘Dom’), <a href="https://www.imdb.com/name/nm9389801/?ref_=tt_ov_st" target="_blank" rel="noopener noreferrer">Katie Fleming</a> (as ‘Katie’), <a href="https://www.imdb.com/name/nm9544484/?ref_=ttfc_fc_cl_t6" target="_blank" rel="noopener noreferrer">Chris Kelly</a> (as ‘Chris Laskin’), <a href="https://www.imdb.com/name/nm11397821/?ref_=ttfc_fc_cr24" target="_blank" rel="noopener noreferrer">Angela Thomson</a> (driver), and <a href="https://www.imdb.com/name/nm5206338/?ref_=fn_al_nm_1">Mathieu Burdan</a>.</p>\n \n <p style="font-weight: 400;">Co-producers MacDonald and Tailor characterized <em>Godforsaken</em>’s recent string of successes as “surreal.”</p>\n \n \n [caption id="attachment_25255" align="aligncenter" width="670"]<img class="wp-image-25255 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2019/12/TFS_FP_GodforsakenChadTailor_1220.jpg" alt="Godforsaken co-producer and lead actor Chad Tailor " width="670" height="458" /> Godforsaken co-producer and lead actor Chad Tailor[/caption]\n \n \n <p style="font-weight: 400;">“I remember (the <em>New York Times</em> article) happened on April 1, so I was a little hesitant to believe it at first,” Tailor laughed, also noting his delight that the film is now available to stream across many major platforms, including <a href="https://play.google.com/store/movies/details/Godforsaken?id=4_htcfbXjQk.P" target="_blank" rel="noopener noreferrer">Google Play</a>, <a href="https://itunes.apple.com/ca/movie/godforsaken/id1616776194" target="_blank" rel="noopener noreferrer">Apple TV, </a> and <a href="https://www.primevideo.com/detail/0L0SEJJFVEL176N64SC8V6ZJMB/ref=atv_dp_share_cu_r" target="_blank" rel="noopener noreferrer">Amazon Prime</a> (in the U.S.), to be followed within the month by <a href="https://tubitv.com/" target="_blank" rel="noopener noreferrer">Tubi</a> and <a href="https://www.primevideo.com" target="_blank" rel="noopener noreferrer">Prime Video</a> here in Canada.</p>\n \n <p style="font-weight: 400;">“Our goal has been reached and our movie is out for the masses to watch and be entertained by – that’s why we make films!”</p>\n \n <p style="font-weight: 400;">Added MacDonald: “It's an absolute dream to have our movie available worldwide. And to be featured in the <em>New York Times</em> has me speechless – it still hasn't fully sunk in yet!</p>\n \n \n [caption id="attachment_25256" align="aligncenter" width="670"]<img class="wp-image-25256 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/04/TFS_GodforsakenDoorwayShot_0413.jpg" alt="Melié B. Rondeau stars as 'Lisa Harris' in Godforsaken" width="670" height="393" /> Melié B. Rondeau as 'Lisa Harris'[/caption]\n \n \n <p style="font-weight: 400;">For 2018 <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> grad <a href="https://www.instagram.com/melie_br/" target="_blank" rel="noopener noreferrer">Melié B. Rondeau</a>, who played the not-so-dead character of Lisa Harris in the film, <em>Godforsaken</em> marked a very memorable first-ever starring role in a feature.</p>\n \n <p style="font-weight: 400;">And to have experienced it all alongside her Toronto Film School family, she added, only made it that much more special.</p>\n \n <p style="font-weight: 400;">“For me, working with friends I met while studying at Toronto Film School and other former grads only reinforced the importance of networking. As an actor, you can certainly train and get better on your own, but ultimately, it's all about the people you know,” she said.</p>\n \n \n [caption id="attachment_25263" align="aligncenter" width="670"]<img class="wp-image-25263 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/04/TFS_FP_GodforsakenBTS-1.jpg" alt="" width="670" height="393" /> Behind the scenes of the making of Godforsaken[/caption]\n \n \n <p style="font-weight: 400;">“I had such a great time working with everyone involved on this film. I remember thinking, ‘If only our friends and family end up watching this film, I'll still be happy and proud’ – so now, to see that two years later…our humble independent film is being distributed by <a href="https://www.terrorfilms.net/" target="_blank" rel="noopener noreferrer">Terror Films</a>, an LA-based company, on multiple platforms such as <a href="https://www.primevideo.com/detail/0L0SEJJFVEL176N64SC8V6ZJMB/ref=atv_dp_share_cu_r" target="_blank" rel="noopener noreferrer">Prime Video</a>, <a href="https://itunes.apple.com/ca/movie/godforsaken/id1616776194" target="_blank" rel="noopener noreferrer">Apple TV, </a><a href="https://play.google.com/store/movies/details/Godforsaken?id=4_htcfbXjQk.P" target="_blank" rel="noopener noreferrer">Google Play</a> and more, is amazing.”</p>\n \n <p style="font-weight: 400;">Those sentiments were echoed by Rondeau’s fellow TFS <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> grads and Godforsaken castmates <a href="https://www.imdb.com/name/nm9544484/?ref_=ttfc_fc_cl_t6" target="_blank" rel="noopener noreferrer">Chris Kelly</a>, who played townsperson Chris Laskin, and <a href="https://www.imdb.com/name/nm9389801/?ref_=tt_cl_t_3" target="_blank" rel="noopener noreferrer">Katie Fleming</a>, who played Katie, one of the film’s trio of documentary filmmakers.</p>\n \n \n [caption id="attachment_25257" align="aligncenter" width="670"]<img class="wp-image-25257 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/04/TFS_ChrisKellyGodforsaken_0413.jpg" alt="Chris Kelly as 'Chris Laskin' in Godforsaken" width="670" height="393" /> Chris Kelly as 'Chris Laskin'[/caption]\n \n \n <p style="font-weight: 400;">“This project was so much fun – and surprisingly deep for a horror movie – so, we all knew as we were filming that we had something special,” Kelly said, hinting at his desire to participate in a <em>Godforsaken </em>sequel somewhere down the road.</p>\n \n <p style="font-weight: 400;">“I'm happy it's received a wide release, which ticks off an item on my bucket list. I've even received interest from talent agencies recently. So glad I can continue my love for acting, while I'm quickly becoming known for my work as a <a href="https://www.torontofilmschool.ca/blog/acting-alumnus-lands-gig-associate-producing-olympic-coverage-for-cbc/">TV producer</a>.”</p>\n \n \n [caption id="attachment_25258" align="aligncenter" width="670"]<img class="wp-image-25258 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/04/TFS_FP_GodforsakenDomenicDeRoseMélieBRondeauChadTailorKatieFleming_1220.jpg" alt="Godforsaken cast Domenic Derose, Mélie B. Rondeau, Chad Tailor and Katie Fleming on set" width="670" height="393" /> Domenic Derose, Mélie B. Rondeau, Chad Tailor and Katie Fleming on the set of Godforsaken.[/caption]\n \n \n <p style="font-weight: 400;">For Fleming, the experience of filming <em>Godforsaken</em> was a creatively fulfilling one in which she got to experience the true range of the “beauty of acting” – from moments of sheer terror, to periods of laughter-filled humour.</p>\n \n <p style="font-weight: 400;">“Ali really gave us a lot of creative freedom to truly be ourselves to bring these characters to life…everyone was able to give ideas and improve to what we felt was right for our characters in each situation. There were so many laughs on the set and, of course, screams and tears," she laughed.</p>\n \n <p style="font-weight: 400;">“Godforsaken will always hold a big place in my heart, because this was truly one of the best experiences in my life. Everyone involved deserves so much success in life, in whatever it is they all choose to do.”</p>\n \n <p style="font-weight: 400;">As for the success of the film itself, Fleming said that, for her, it only solidifies how much the hard work of all involved is finally starting to pay off.</p>\n \n <p style="font-weight: 400;">“The entire cast and crew really put so much love and dedication into <em>Godforsaken</em> – we all worked like crazy, so to know that it will be able to entertain people on such a big scale is heartwarming,” she said.</p>\n \n <p style="font-weight: 400;">“Sometimes it takes a minute to click in that this film is actually circulating worldwide, that thousands of people are seeing it, and that it is a legitimate feature film, not just a class project. And it's so great to hear all the reviews.”</p>\n \n \n You can watch the entire film, which Tailor dedicates to the memory of late Toronto Film School Instructor Rick Bennett, here:\n \n \n <p style="text-align: center;"><iframe title="YouTube video player" src="https://www.youtube.com/embed/vjuKkG9EBb8" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>\n \n \n """ |
post_title | "TFS Alumni Celebrate Wild Success of Horror Film 'Godforsaken'"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "open"
|
post_password | "" |
post_name | "tfs-alumni-celebrate-wild-success-of-horror-film-godforsaken"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:07:06"
|
post_modified_gmt | "2023-03-27 21:07:06"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/?p=25248"
|
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-alumni-celebrate-wild-success-of-horror-film-godforsaken/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/tfs-alumni-celebrate-wild-success-of-horror-film-godforsaken"
|
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 | "11235"
|
REMOTE_ADDR | "3.147.57.197"
|
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 | 1731846571.7386
|
REQUEST_TIME | 1731846571
|
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"
|