*
* @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" => "june-spotlight-amazing-tfs-alumni-accomplishments" "category_name" => "blog" ] |
query_string | "name=june-spotlight-amazing-tfs-alumni-accomplishments&category_name=blog"
|
request | "blog/june-spotlight-amazing-tfs-alumni-accomplishments"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=june-spotlight-amazing-tfs-alumni-accomplishments&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "june-spotlight-amazing-tfs-alumni-accomplishments" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "june-spotlight-amazing-tfs-alumni-accomplishments" "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 | 25975
|
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 = 'june-spotlight-amazing-tfs-alumni-accomplishments' 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 | 25975
|
post_author | "43"
|
post_date | "2022-06-28 18:10:48"
|
post_date_gmt | "2022-06-28 18:10:48"
|
post_content | """ <p style="font-weight: 400;">At Toronto Film School, we never cease to be amazed by the accomplishments of our awesome alumni who are out pursuing their dreams in the creative industries – be it landing leading roles in web series, earning armloads of accolades for their short films, or being in the running to become <em>Maxim </em>magazine’s latest cover girl.</p>\n \n <p style="font-weight: 400;">Here are some of June’s standout highlights from Toronto Film School’s talented community of graduates:</p>\n \n \n [caption id="attachment_25976" align="aligncenter" width="670"]<img class="wp-image-25976 size-medium" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_ACT_MelieBRondeauLesLiaisonsdangereusesCollage_0623.jpg" alt="Les Liaisons Dangereuses: Correspondances Inédites" width="670" height="393" /> Les Liaisons Dangereuses: Correspondances Inédites photos courtesy of Théâtre français de Toronto[/caption]\n \n \n <p style="font-weight: 400;">Class of 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> valedictorian <strong><a href="https://www.instagram.com/melie_br/" target="_blank" rel="noopener noreferrer">Mélie B. Rondeau</a> </strong>recently landed a lead role in <a href="https://theatrefrancais.com/en/" target="_blank" rel="noopener noreferrer">Théâtre français de Toronto</a>’s new web series, <em><a href="https://theatrefrancais.com/en/webdiffusions/les-liaisons-dangereuses-correspondances-inedites/" target="_blank" rel="noopener noreferrer">Les Liaisons Dangereuses: Correspondances Inédites</a></em>.</p>\n \n <p style="font-weight: 400;">Released on June 15, the series is a reimagining of the infamous 1988 period drama, <a href="https://en.wikipedia.org/wiki/Dangerous_Liaisons" target="_blank" rel="noopener noreferrer"><em>Dangerous Liaisons</em></a> – albeit with a feminist twist. The story of intrigue and sexual manipulation revolves around two former lovers and narcissistic rivals: the Marquise de Merteuil (<a href="https://www.imdb.com/name/nm2515017/" target="_blank" rel="noopener noreferrer">Caroline Raynaud</a>) and the Vicomte de Valmont (<a href="https://www.imdb.com/name/nm6957233/?ref_=fn_al_nm_1" target="_blank" rel="noopener noreferrer">Philip Van Martin</a>). Rondeau plays the Présidente de Tourvel, a religious and chaste wife who’s seduced by Valmont.</p>\n \n <p style="font-weight: 400;">“After two years of lockdowns, being on set felt like the most perfect gift! Everyone involved was dedicated and happy to be there. We all gave our absolute best! Being able to work in French, my first language, even though I've now been living in Toronto for 5 years means a lot to me,” Rondeau said of the experience.</p>\n \n <p style="font-weight: 400;">“This project brought some of the most challenging scenes of my career. For the first time ever, I had the opportunity to work with an intimacy coordinator and it changed the way I approach my craft. Despite the emotional challenges, I felt free, confident and peaceful. Moving forward, I'll always recommend producers and filmmakers to bring in an intimacy coordinator if they can.”</p>\n \n <p style="font-weight: 400;">Rondeau’s fellow TFS alumnus, <a href="https://www.imdb.com/name/nm9929536/" target="_blank" rel="noopener noreferrer">Marie-Soleil Kielec</a> (<a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a>, 2019), also worked on the set of the web series as a 1<sup>st</sup>/2<sup>nd</sup> AD.</p>\n \n <p style="font-weight: 400;"><em>Les Liaisons Dangereuses: Correspondances Inédites</em> is available to stream on le Théâtre français de Toronto website <strong><a href="https://theatrefrancais.com/en/webdiffusions/les-liaisons-dangereuses-correspondances-inedites/" target="_blank" rel="noopener noreferrer">here</a></strong>. The first three episodes are free, and the complete series can be purchased for $15.</p>\n \n \n \n <p style="font-weight: 400;"><img class="alignnone size-medium wp-image-25977 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_WFT_ReethMazumderRobertsMaximCoverGirl_0624.jpg" alt="" width="670" height="393" /></p>\n \n <p style="font-weight: 400;"><strong><a href="https://www.imdb.com/name/nm4157086/?ref_=tt_ov_dr" target="_blank" rel="noopener noreferrer">Reeth Mazumder-Roberts</a></strong>, who graduated from the <a href="https://www.torontofilmschool.ca/programs/writing-for-film-tv-diploma/" target="_blank" rel="noopener noreferrer">Writing for Film & Television</a> program in 2019, has been named a Top 20 finalist in <a href="https://www.maxim.com/" target="_blank" rel="noopener noreferrer"><em>Maxim</em></a> magazine’s <a href="https://maximcovergirl.com/" target="_blank" rel="noopener noreferrer">2022 Cover Girl Competition</a>. This year’s winner will not only grace the cover of the international men’s magazine, but will also get to star in a spectacular photo shoot in France and take home $25,000 in cash.</p>\n \n <p style="font-weight: 400;">“Being in the Top 20, it feels like there is no limit to accomplishments,” Mazumder-Roberts said.</p>\n \n <p style="font-weight: 400;">“An old friend of mine from France got me into participating in the <em>Maxim</em>’s Cover Girl competition, which is very big in Paris especially, because they are raising money for disabled veterans.”</p>\n \n <p style="font-weight: 400;">Indeed, the Maxim Cover Girl Competition is touted as one that not only “showcases beautiful women full of individuality and ambition,” but also aims to raise awareness for veterans in need through its support of <a href="https://en.wikipedia.org/wiki/Jared_Allen" target="_blank" rel="noopener noreferrer">Jared Allen’</a>s <a href="https://homesforwoundedwarriors.com/page/4/" target="_blank" rel="noopener noreferrer">Homes for Wounded Warriors</a>. Through that organization, the former NFL player builds and remodels handicap accessible homes to suit the individual needs of injured veterans.</p>\n \n \n You can cast a vote for Mazumder-Roberts as <em>Maxim</em>'s 2022 Cover Girl <strong><a href="https://maximcovergirl.com/2022/reeth-mazumder-roberts" target="_blank" rel="noopener noreferrer">here</a>.</strong>\n \n \n <p style="font-weight: 400;">This isn’t the first time Mazumder-Roberts, who starred several Bollywood movies before coming to Canada to study at Toronto Film School, has been featured in a major international magazine. Back in 2013, she made it onto <a href="https://fhm.com/" target="_blank" rel="noopener noreferrer"><em>FHM</em></a>’s <a href="https://www.indicine.com/movies/bollywood/fhms-sexiest-women-in-the-world-2013-top-100-list/" target="_blank" rel="noopener noreferrer">Top 100 Sexiest Women in the World list</a>.</p>\n \n \n \n \n \n <p style="font-weight: 400;"><img class="alignnone size-medium wp-image-25978 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_FP_YeimyDaza_0627.jpg" alt="" width="670" height="393" /></p>\n \n <p style="font-weight: 400;">Class of 2018 <a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a> graduate <strong><a href="https://www.instagram.com/yeimydazafilm/" target="_blank" rel="noopener noreferrer">Yeimy Daza</a></strong> was recently promoted from Casting Assistant to Casting Associate at <a href="https://groundglasscasting.com/" target="_blank" rel="noopener noreferrer">GroundGlass Casting</a>.</p>\n \n <p style="font-weight: 400;">In her new role as a Casting Associate, Daza acts as the right hand of Casting Director <a href="https://www.linkedin.com/in/andrewdeiters/?originalSubdomain=ca" target="_blank" rel="noopener noreferrer">Andrew Deiters</a>, helping to assist in the everyday operations of each of his projects and facilitating each one’s success. Her tasks include liaising with producers and talent, running callback sessions, and handling bookings and communications.</p>\n \n <p style="font-weight: 400;">“I have worked for huge brands like Google, Champion, Indeed, Olay, TikTok, and Walmart, and I've also met some big directors and producers in the world of commercials. It has been an enormous opportunity to see them work closely in the casting process,” Daza said.</p>\n \n <p style="font-weight: 400;">“But the best part of working at GGC is working with Andrew Deiters, the casting director, who has mentored me to keep building not just my casting career, but also my directing career.”</p>\n \n <p style="font-weight: 400;">In addition to her promotion at GGC, Daza also recently celebrated her admission into the MFA program at York University.</p>\n \n <p style="font-weight: 400;">Watch her director’s reel and clips from some of her recent projects <strong><a href="https://vimeo.com/user22652946" target="_blank" rel="noopener noreferrer">here</a></strong>.</p>\n \n \n \n \n <img class="alignnone size-medium wp-image-25987 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFSO_VGA_NathanielRudichuk_CDProjektRed_0627.jpg" alt="" width="670" height="393" />\n \n \n <p style="font-weight: 400;"><strong><a href="https://www.artstation.com/naterudichuk" target="_blank" rel="noopener noreferrer">Nathaniel Rudichuk</a></strong>, who graduated from Toronto Film School’s <a href="https://online.torontofilmschool.ca/programs/video-game-design-associate-diploma/" target="_blank" rel="noopener noreferrer">Online Video Game Animation</a> program in 2019, recently started a new position as Senior Concept Artist at <a href="https://en.cdprojektred.com/" target="_blank" rel="noopener noreferrer">CD Projekt Red</a>.</p>\n \n <p style="font-weight: 400;">In his new role, <a href="https://www.instagram.com/naterudichuk/?hl=en" target="_blank" rel="noopener noreferrer">Rudichuk</a> is tasked with realizing creative direction and design goals by creating production designs, illustrations and providing research to influence visual solutions for various departments within an organization, such as asset production, level design, narrative, animation and marketing.</p>\n \n <p style="font-weight: 400;">“CD Projekt Red has been an amazing company to work for so far. They are open to unique ideas and always enjoy creative challenges. I enjoy showcasing new design approaches and leveraging my knowledge of game production from different perspectives to create more effective designs,” he said.</p>\n \n <p style="font-weight: 400;">“TFS has taught me game production from the perspectives of Animation and 3D modelling, which has proven invaluable for my career thus far.”</p>\n \n <p style="font-weight: 400;">In addition to his new role of CD Projekt Red, Rudichuk has also co-founded a start-up that uses game technology and game production for the real-estate and home development industry.</p>\n \n <p style="font-weight: 400;"><a href="https://www.chidoapp.com/marketplace" target="_blank" rel="noopener noreferrer"><span style="font-style: inherit; font-weight: inherit;">Chido</span></a> is a real estate technology provider that builds fully interactive digital twins of any residential, commercial or office space using a mixture of game and 3D technology, accessible from any modern computer. All of this can be created pre-construction.</p>\n \n <p style="font-weight: 400;">Watch a demonstration of Chido’s services here:</p>\n \n <p style="text-align: center;"><iframe title="YouTube video player" src="https://www.youtube.com/embed/ILOL_01j6Eg" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>\n \n \n Congratulation, Nathaniel!\n \n \n \n \n <p style="font-weight: 400;"><img class="alignnone size-medium wp-image-25979 aligncenter" src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2022/06/TFS_FP_MousaGhodratifard_Awards_BiteTheBullet_0624.jpg" alt="" width="670" height="393" /></p>\n \n <p style="font-weight: 400;">Class of 2013 <a href="https://www.torontofilmschool.ca/programs/film-production-diploma/" target="_blank" rel="noopener noreferrer">Film Production</a> grad <strong><a href="https://www.imdb.com/name/nm5730287/" target="_blank" rel="noopener noreferrer">Mousa Ghodratifard</a></strong>’s film, <a href="https://www.imdb.com/title/tt5630954/?ref_=nm_flmg_dr_1" target="_blank" rel="noopener noreferrer"><em>Bite the Bullet</em></a>, has taken home lots of hardware over the last few months.</p>\n \n <p style="font-weight: 400;">The five-minute short won Best Experimental Short Film from the<a href="https://www.facebook.com/otbfilmawards/" target="_blank" rel="noopener noreferrer"> Only the Best Film Awards</a>, Best Director from the <a href="https://www.bimiff.com/" target="_blank" rel="noopener noreferrer">Brazil International Monthly Independent Film Festival</a>, Best Experimental Film from the <a href="https://romeinternationalmovieaward.blogspot.com/" target="_blank" rel="noopener noreferrer">Rome International Movie Awards</a>, Best Production Design from the <a href="https://www.facebook.com/tokyoimff/" target="_blank" rel="noopener noreferrer">Tokyo International Monthly Film Festival</a>, and Best Experimental Short from the <a href="https://njfilmawards.com/winners/" target="_blank" rel="noopener noreferrer">New Jersey Film Awards</a>.</p>\n \n <p style="font-weight: 400;">“Thank you, New Jersey Film Awards for this wonderful trophy,” Ghodratifard said in a video message posted to his <a href="https://www.instagram.com/p/CdCHFciLMrh/?hl=en" target="_blank" rel="noopener noreferrer">Instagram page</a>. “Thank you jury members, thank you all my cast and crew who helped me out with this project – my dream project…Without you all, I wouldn’t have been able to win this award.”</p>\n \n <p style="font-weight: 400;">Congratulations, Mousa!</p>\n \n \n You can watch the trailer for <i style="font-weight: 400;">Bite </i><i>the</i><i style="font-weight: 400;"> Bullet </i>here:\n \n \n <p style="text-align: center;"><iframe title="YouTube video player" src="https://www.youtube.com/embed/4M_rSMxt62M" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>\n <p style="font-weight: 400;"><strong> </strong></p>\n \n \n \n <p style="font-weight: 400;"><em>***Are you an alumnus or student who would like to share your latest accomplishment with the TFS community? If so, please reach out to our Alumni Relations Coordinator at <a href="mailto:alumni@torontofilmschool.ca">alumni@torontofilmschool.ca</a></em></p>\n \n \n \n \n """ |
post_title | "June Spotlight | Amazing TFS Alumni Accomplishments"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "open"
|
post_password | "" |
post_name | "june-spotlight-amazing-tfs-alumni-accomplishments"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:07:01"
|
post_modified_gmt | "2023-03-27 21:07:01"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/?p=25975"
|
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/june-spotlight-amazing-tfs-alumni-accomplishments/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/june-spotlight-amazing-tfs-alumni-accomplishments"
|
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 | "2312"
|
REMOTE_ADDR | "18.220.116.195"
|
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 | 1731847793.7921
|
REQUEST_TIME | 1731847793
|
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"
|