*
* @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-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man" "category_name" => "blog" ] |
query_string | "name=tfs-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man&category_name=blog"
|
request | "blog/tfs-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=tfs-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "tfs-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "tfs-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man" "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 | 24825
|
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-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man' 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 | 24825
|
post_author | "43"
|
post_date | "2022-02-18 16:36:45"
|
post_date_gmt | "2022-02-18 16:36:45"
|
post_content | """ A recently wrapped new short film from Toronto Film School instructors/ alumni <a href="https://www.instagram.com/kearstenjohansson/" target="_blank" rel="noopener noreferrer">Kearsten Johansson</a> and <a href="https://www.instagram.com/chadtailor/" target="_blank" rel="noopener noreferrer">Chad Tailor</a> aims to challenge the gender assumptions many people make about eating disorders.\n \n \n \n Based on the <a href="https://www.iuniverse.com/en/bookstore/bookdetails/757865-Straw-Man" target="_blank" rel="noopener noreferrer">2018 Canadian memoir</a> of the same name, <em><a href="https://www.instagram.com/strawman.film/" target="_blank" rel="noopener noreferrer">Straw Man</a> </em>tells the story of Toronto lawyer Jacob Roth and his struggles with <a href="https://www.nationaleatingdisorders.org/learn/by-eating-disorder/anorexia" target="_blank" rel="noopener noreferrer">anorexia nervosa</a> during his first year of university.\n \n \n <p style="text-align: center;"><iframe title="YouTube video player" src="https://www.youtube.com/embed/Cf_p5goQboY" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>\n \n \n “When you say ‘anorexia’ to me, the first image that pops into my head is of a young woman struggling. Before reading Jake’s book, I didn’t even really think much about how body issues affect young men,” admitted Johansson, a Class of 2014 <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> graduate for whom <em>Straw Man</em> marked her solo directorial debut.\n \n \n \n “It just goes to show that this disorder has no gender bias, that it can affect anyone out there, but that there is a way out. That’s the message we want to send to anyone out there struggling silently.”\n \n \n \n [caption id="attachment_24828" align="aligncenter" width="670"]<img class="size-medium wp-image-24828" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/02/TFS_ACT_KearstenJohanssonChadTailor_0217.jpg" alt="" width="670" height="393" /> Straw Man director Kearsten Johansson and producer Chad Tailor.[/caption]\n \n \n \n Indeed, according to the <a href="https://www.nationaleatingdisorders.org/" target="_blank" rel="noopener noreferrer">National Eating Disorders Association</a>, males not only represent <a href="https://www.nationaleatingdisorders.org/statistics-research-eating-disorders" target="_blank" rel="noopener noreferrer">25 per cent</a> of individuals with anorexia nervosa – an eating disorder characterized by weight loss, difficulties maintaining an appropriate body weight, and distorted body image – they also run a higher risk of dying from it.\n \n \n \n With <em>Straw Man</em>, the aim is to increase awareness and decrease stigma attached to eating disorders – particularly for boys and men, who oftentimes go undiagnosed until it’s too late due to a lack of knowledge and understanding.\n \n \n \n “I think it’s a very important subject matter to highlight – especially hearing it from a male perspective, because you hardly ever hear of that,” said Tailor, Johansson’s fellow TFS alumnus-turned-instructor, whom she brought on to the film as its producer.\n \n \n \n “For me, the moment Kearsten approached me, in my mind this project was always something that was going to go beyond film festivals. We, as filmmakers, make films for people, not just other filmmakers – and we really want <em>Straw Man</em> to be seen by people who will be influenced the most by it and who will take something from it.”\n \n \n \n <img class="alignnone size-medium wp-image-24835 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/02/TFS_StrawManMonitorStillPlate_0214.jpg" alt="" width="670" height="366" />\n \n \n \n Johansson was likewise taken with Roth’s story right from the start.\n \n \n \n Following a chance encounter with Roth at the punching bags of her neighbourhood gym in 2018, Johansson’s interest was piqued when she learned the “bubbly” criminal defence attorney she trained with had recently published a memoir.\n \n \n \n “I was just so blown away by his story and everything he went through. When you meet Jacob, he’s just so upbeat and he’s got this great sense of humour, and so I never would have known that he had gone through something like that,” she said, noting that she knew just a few pages into the book that she wanted to turn Roth’s story into a film.\n \n \n \n “He’s such a great visual storyteller that I thought it would make for a really interesting story to help get out to a broader audience in the film medium.”\n \n \n \n <img class="size-medium wp-image-24830 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/02/TFS_StrawManBTSFratHouse_0214.jpg" alt="" width="670" height="393" />\n \n \n \n Right away, Johansson started adapting a script based on Roth’s recounting of his university experience and approached Roth with it back at the gym soon after. He surprisingly didn’t take much convincing.\n \n \n \n “He’s been really great about trusting us with his story,” Johansson said. “Some things in the film were not exactly how he experienced them, but rather how a lot of other people who suffer from the same disorder have experienced it. So, he was very supportive of letting us go in another direction that wasn’t necessarily his story, but echoes of other people’s stories.”\n \n \n \n During a <a href="https://vimeo.com/649213167" target="_blank" rel="noopener noreferrer">recent interview</a> with Johansson in support of the <em>Straw Man</em> film’s <a href="https://www.indiegogo.com/projects/straw-man-film#/" target="_blank" rel="noopener noreferrer">indiegogo campaign</a>, Roth expressed his excitement at seeing the film come together.\n \n \n \n “I’m excited about it. I’m really looking forward to seeing how the talented team interprets the memoir,” he said.\n \n \n \n “I’ve provided some feedback, but it was pretty minimal. I really enjoyed the first draft of the script, and…I’m really grateful that Kearsten and the team were interested in taking on this project.”\n \n \n \n After securing the rights to the book, Johansson started thinking about who she’d like to bring onto the <em>Straw Man</em> film, which marked her second directorial credit after <em><a href="https://www.imdb.com/title/tt11356940/?ref_=nm_knf_t1" target="_blank" rel="noopener noreferrer">Read or Alive</a></em> – an <a href="https://www.imdb.com/title/tt11356940/awards/?ref_=tt_awd" target="_blank" rel="noopener noreferrer">award-winning</a> short thriller she produced, starred in, and co-directed alongside <a href="https://www.imdb.com/name/nm7773879/?ref_=tt_ov_dr" target="_blank" rel="noopener noreferrer">Trent Newton</a>.\n \n \n \n While Tailor was her first choice as producer, he was far from the only TFS community member Johansson commissioned to help bring Roth’s story from the page to the screen.\n \n \n \n <img class="alignnone size-medium wp-image-24831 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/02/TFS_StrawManBTSKearstenArtem_0214.jpg" alt="" width="670" height="458" />\n \n \n \n In fact, nearly 99 per cent of <em>Straw Man</em>’s cast and crew consists of current students and alumni – including cinematographer <a href="https://www.imdb.com/name/nm9278350/" target="_blank" rel="noopener noreferrer">Artem Mykhailetskyi</a> (<a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a> ’18), production manager/script supervisor <a href="https://www.imdb.com/name/nm10448923/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Yeimy Daza</a> (<a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a> ’19), lead actor <a href="https://www.instagram.com/joedacious20/" target="_blank" rel="noopener noreferrer">Joseph Dancey</a> (<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> ’18), and visual effects artist <a href="https://www.imdb.com/name/nm7897786/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Will Dano</a> (<a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a> ’18), just to name a few.\n \n \n \n “Being that we’re instructors at TFS and also alumni, the network here is amazing and we’ve come across so many talented actors, technicians, and cinematographers,” Tailor said.\n \n \n \n “Kearsten and I, we wanted to pick the best of the best for our cast and crew – the people we really wanted to work with, the ones whose work inspired us – and it just so happened that 99 per cent of our cast and crew is TFS alumni.”\n \n \n \n <img class="size-medium wp-image-24832 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/02/TFS_ACT_StrawManBTS3_1215.jpg" alt="" width="670" height="393" />\n \n \n \n For their parts, both Daza and Mykhailetskyi said the decision to sign on the project with Johansson at its helm was a no-brainer.\n \n \n \n “My experience working with Kearsten is that she’s really open to exploring things and looking at ideas from different perspectives to see which cogs, so to speak, fit together better for the story to work,” said Mykhailetskyi, who also worked as the cinematographer on Johansson’s <em>Read or Alive</em> set.\n \n \n \n “I love the conversations we have. We always try to challenge each other in a creative way. She’s always open to ideas, always eager to learn something new, always finding ways to make things better.”\n \n \n \n For fellow director Daza – whose TFS capstone film, <em><a href="https://player.vimeo.com/video/511166037" target="_blank" rel="noopener noreferrer">Poly</a></em>, took home three awards from the <a href="https://www.torontofilmschool.ca/blog/poly-wins-trio-of-awards-at-2019-toronto-film-school-festival-of-films/" target="_blank" rel="noopener noreferrer">2019 Toronto Film School Festival of Films</a>, including Best Picture and Best Director – working with an actor-turned-director was an enlightening experience.\n \n \n \n “As an actress, she knows when the actors are giving their best performance, and she knows how to get that from them – and I feel that that’s one of the most important things, as a director,” she said of Johansson, who recently appeared in a <a href="https://www.youtube.com/watch?v=ATvOK47mslw" target="_blank" rel="noopener noreferrer">Super Bowl ad for Roku</a>.\n \n \n \n “It was amazing, also, to be able to see her grow as a director. I remember our first shooting block, there were a lot of questions and things to figure out, but by the last block, she was way more confident.”\n \n \n \n <img class="alignnone size-medium wp-image-24833 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/02/TFS_ACT_StrawManBTS1_1215-1.jpg" alt="" width="670" height="393" />\n \n \n \n With shooting of the Straw Man short having just wrapped on Feb. 16 – a mere five days before <a href="https://www.nationaleatingdisorders.org/get-involved/nedawareness" target="_blank" rel="noopener noreferrer">National Eating Disorder Awareness Week</a> kicks off on Feb. 21 – both Johansson and Tailor are looking forward to heading into post-production, with a goal of finishing the film by this summer.\n \n \n \n From there, the filmmaking duo plan to not only submit <em>Straw Man</em> to various film festivals, but also get it into the hands of various organizations, such as the <a href="https://nedic.ca/" target="_blank" rel="noopener noreferrer">National Eating Disorder Information Centre</a>, the <a href="https://www.camh.ca/" target="_blank" rel="noopener noreferrer">Centre for Addiction and Mental Health</a>, and other educational institutions that might be able to share it to wider audience.\n \n \n \n “We really want it to go farther than the festivals. We want this film to reach audiences that are going to take something from it,” said Tailor, who has first-hand experience of the impact of such films.\n \n \n \n For his TFS thesis film, Tailor opted to write, direct and produce <a href="https://www.youtube.com/watch?v=3ZEBYcCHb3Y" target="_blank" rel="noopener noreferrer"><em>A Done Deal</em></a> – a powerful short based on his own true story with drug addiction. That film went on to be toured across Canada by the <a href="https://www.rcmp-grc.gc.ca/en/qc/drug-and-organized-crime-awareness-service" target="_blank" rel="noopener noreferrer">RCMP’s Drug Awareness Campaign</a>.\n \n \n \n “I was toured around high schools here in Ontario as part of that campaign, and that’s something we’d love to do with this film, too. High schoolers are at such an impressionable age, and that’s when you need to see that you’re not the only one struggling with any type of situation.”\n \n \n \n <img class="size-medium wp-image-24834 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/02/TFS_StrawManSlate_0214.jpg" alt="" width="670" height="376" />\n \n \n \n “With <em>Straw Man</em>, we want to be part of that conversation about ending stigmas and being able to openly talk about you’re going through,” Johansson added, noting that, in addition to eating disorders, the film also touches on topics including bullying, body dysmorphia, social isolation in the dawn of social media, and mental health.\n \n \n \n “I really hope that these measures we’re taking are going to help this next generation, so they don’t feel afraid to reach out and look for help if they’re struggling; that they know there are resources available to them if they need them.”\n \n \n \n """ |
post_title | "TFS Instructors Aim to Raise Eating Disorder Awareness with New Film, 'Straw Man'"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "open"
|
post_password | "" |
post_name | "tfs-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:07:10"
|
post_modified_gmt | "2023-03-27 21:07:10"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/?p=24825"
|
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-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/tfs-instructors-aim-to-raise-eating-disorder-awareness-with-new-film-straw-man"
|
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 | "13231"
|
REMOTE_ADDR | "3.22.240.209"
|
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 | 1731858373.5432
|
REQUEST_TIME | 1731858373
|
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"
|