<?php
/**
* Implements hook_shadow_FORMID_form().
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function file_shadow_file_form($env, $vars) {
/** @var Shadow $shadow */
$shadow = $vars['shadow'];
$node = $shadow->getNode();
if (NodeAccess::check($env, $env->getContext(), array('node' => $node))) {
$vars['shadow']->addTab('manage files', file_get_contents($env->getModulePath('file') . '/tpl/upload_form.html'), 2);
}
}
/**
* Implements hook_load_includes().
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function file_load_includes($env, $vars) {
$module_path = $env->getModulePath('file');
$env->addInclude($module_path . '/css/file.css');
}
/**
* Implements hook_init().
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function file_init($env, $vars) {
$node = NodeFactory::current($env);
// There is a request to upload a file.
// TODO: move in actions / factory?
if (!empty($_FILES)) {
File::checkUploads($env);
exit();
}
// There is a request to delete a file.
// TODO: move in actions / factory?
if (isset($_REQUEST[NODE_ACTION_DELETE_FILE])) {
$split_file_to_delete = explode('/', $_REQUEST[NODE_ACTION_DELETE_FILE]);
File::deleteFile($node, $split_file_to_delete[count($split_file_to_delete) - 1]);
exit();
}
}
/**
* Implements hook_node_presave().
*
* Saves all files uploaded on the node.
*
* @param Environment $env
* The Environment.
* @param $vars
* An array of variables.
*/
function file_node_presave($env, $vars) {
// TODO: move in File or create FileFactory module.
/** @var Node $node */
$node = $vars['node'];
$data = $vars['data'];
$uploaded_files = [];
// Walk through uploaded files.
foreach ($data as $label => $name) {
$exp = explode('-', $label);
if (array_shift($exp) == 'uploaded_file') {
$form_name = array_shift($exp);
$file = implode('-', $exp);
$uploaded_files[$form_name][] = normalizeFilePath($file);
}
}
foreach ($uploaded_files as $form_name => $uploaded_file_list) {
// Save list of uploaded files for this file field in json.
$node->json->{$form_name} = $uploaded_file_list;
}
}
/**
* Implements hook_node_save().
*
* Saves all files uploaded on the node.
*
* @param Environment $env
* The Environment.
* @param $vars
* An array of variables.
*/
function file_node_after_save($env, $vars) {
// TODO: move in File or create FileFactory module.
/** @var Node $node */
$node = $vars['node'];
if (!empty($node->getData('tmp_files_dir'))) {
$tmp_dir = $env->dir['tmp_files'] . '/' . $node->getData('tmp_files_dir');
if (is_dir($tmp_dir)) {
$tmp_files = $env->scanDirectory($tmp_dir);
foreach ($tmp_files as $file) {
$tmp_file_path = $tmp_dir . '/' . $file;
$fileobj = new File($env, $tmp_file_path, $node);
// Check that uploaded files are valid.
if (!$fileobj->isPublic()) {
new Message($env, 'The file <b>' . $file . '</b> has an invalid name and could not be uploaded. Please use a different name.', MESSAGE_WARNING);
}
elseif (is_file($tmp_file_path)) {
copy($tmp_file_path, $node->realpath . '/' . normalizeFilePath($file));
unlink($tmp_file_path);
}
else {
new Message($env, 'The file <b>' . $file . '</b> is invalid and could not be uploaded.', MESSAGE_WARNING);
}
}
rmdir($tmp_dir);
}
}
}
/**
* Implements hook_node_load().
*
* @param Environment $env
* The Environment.
* @param $vars
* An array of variables.
*/
function file_node_load($env, $vars) {
/** @var Node $node */
$node = $vars['node'];
// When saving a node, select the pre-created temporary files dir.
if (!empty($_REQUEST['json']) && ($json = json_decode($_REQUEST['json'])) && isset($json->tmp_files_dir)) {
$node->setData('tmp_files_dir', array_pop($json->tmp_files_dir));
}
else {
$node->setData('tmp_files_dir', $node->getName() . '-' . $env->getData('timestamp'));
}
}
|