| 
<?php/**
 * Implementation of hook_action_node_add.
 * There is a node add request.
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_action_node_add($env, $vars) {
 $response_json = NodeFactory::requestAction($env, $vars['data']['action'], $vars['data']);
 exit($response_json);
 }
 
 /**
 * Implements hook_action_node_edit.
 * There is a node edit request.
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_action_node_edit($env, $vars) {
 $response_json = NodeFactory::requestAction($env, $vars['data']['action'], $vars['data']);
 exit($response_json);
 }
 
 
 /**
 * Implements hook_action_node_delete.
 * There is a node delete request.
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_action_node_delete($env, $vars) {
 $response_json = NodeFactory::requestAction($env, $vars['data']['action'], $vars['data']);
 exit($response_json);
 }
 
 /**
 * Implements hook_load_includes().
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_load_includes($env, $vars) {
 $module_path = $env->getModulePath('node');
 
 $env->addInclude($module_path . '/js/node.js');
 $env->addInclude($module_path . '/css/node.css');
 }
 
 /**
 * Implemens hook_init().
 * Starts a node corresponding to the current page.
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_init($env, $vars) {
 
 $node = NodeFactory::current($env);
 // If the node does not exist, redirect to 404.
 if (!$node->exists && !isset($_REQUEST['shadow']) && $node->name != '404') {
 $node_404 = NodeFactory::load($env, '404');
 if ($node_404->exists) {
 redirect('/404');
 }
 else {
 die('404 - Page not found.');
 }
 }
 // If user can't access the node, redirect to 403.
 else if ($env->request_path != '403' && $node->isForbidden() && !isset($_REQUEST['shadow'])) {
 $node_403 = NodeFactory::load($env, '403');
 if ($node_403->exists) {
 redirect('/403');
 }
 else {
 die('403 - Forbidden.');
 }
 }
 
 }
 
 /**
 * Implements hook_shadow_node_form().
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_shadow_node_form($env, $vars) {
 /** @var Shadow $shadow */
 $shadow = $vars['shadow'];
 $action_name = ($env->getContext() == NODE_ACTION_ADD ? 'create' : 'edit') . ' content';
 
 $shadow->addTab($action_name, file_get_contents($env->getModulePath('node') . '/tpl/node_edit.inc'), 1);
 $shadow->addTab('manage metadata', file_get_contents($env->getModulePath('node') . '/tpl/metadata_form.inc'), 2);
 }
 
 /**
 * Implements hook_shadow_node_delete_form().
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_shadow_node_delete_form($env, $vars) {
 /** @var Shadow $shadow */
 $shadow = $vars['shadow'];
 $node = $shadow->getNode();
 
 $has_access = NodeAccess::check($env, $env->getContext(), array('node' => $node));
 if (!$has_access) {
 // TODO: move this in access check!
 new Message($env, 'User attempted to delete a node without access', MESSAGE_WARNING, MESSAGE_TYPE_LOG, 'node');
 }
 else {
 $shadow->addTab('Confirm Delete', $node->renderDeleteForm(), 1);
 }
 $shadow->addButton('edit-save', '<span style="color:green">✓ </span> Delete');
 
 }
 
 /**
 * Implements hook_metadata().
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_metadata($env, $vars) {
 // Setup body classes per each item in the current node lineage.
 $node = NodeFactory::current($env);
 $author = UserFactory::load($env, $node->getAuthor());
 
 $vars['metadata']['charset'] = array(
 'content' => 'utf-8',
 );
 
 $vars['metadata']['description'] = array(
 'content' => filter_xss($node->getTeaser()),
 );
 
 $vars['metadata']['name'] = array(
 'content' => filter_xss($author->getTitle()),
 );
 
 $vars['metadata']['application-name'] = array(
 'content' => 'Quanta CMS',
 );
 
 // OG metadata.
 $vars['metadata']['og:title'] = array(
 'property' => 'og:title',
 'content' => filter_xss($node->getTitle()),
 );
 
 $vars['metadata']['og:type'] = array(
 'property' => 'og:type',
 'content' => 'article',
 );
 
 $vars['metadata']['og:url'] = array(
 'property' => 'og:url',
 'content' => $env->getData('request_url'),
 );
 
 if (!empty($node->getThumbnail())) {
 $vars['metadata']['og:image'] = array(
 'property' => 'og:image',
 'content' => $env->getData('request_url') . $node->getThumbnail(),
 );
 }
 
 $vars['metadata']['og:description'] = array(
 'property' => 'og:description',
 'content' => filter_xss($node->getTeaser()),
 );
 
 // Twitter metadata.
 $vars['metadata']['twitter:description'] = array(
 'content' => filter_xss($node->getTeaser()),
 );
 
 if (!empty($node->getThumbnail())) {
 $vars['metadata']['twitter:image'] = array(
 'content' => $env->getData('request_url') . $node->getThumbnail(),
 );
 }
 
 $vars['metadata']['twitter:title'] = array(
 'content' => filter_xss($node->getTitle()),
 );
 
 $vars['metadata']['twitter:card'] = array(
 'content' => filter_xss($node->getTeaser()),
 );
 
 }
 
 /**
 * Implements hook_body_classes().
 *
 * @param Environment $env
 *   The Environment.
 * @param array $vars
 *   An array of variables.
 */
 function node_body_classes($env, $vars) {
 // Setup body classes per each item in the current node lineage.
 // TODO: show
 $node = NodeFactory::current($env);
 $node->buildLineage();
 $lineage = $node->getLineage();
 foreach ($lineage as $lineage_node) {
 $vars['page']->addData('body_classes', array('section-' . $lineage_node->name));
 }
 $vars['page']->addData('body_classes', array('page-' . $node->name));
 }
 
 |