I'm struggling a bit with a dilemma. My client has a registration form "Registration 1" that has a file attachment [Photo].
This is hooked to contact form 7 db. They have a page where they check at all the subscriptions.
As the did not wish to receive the attachment as a file attached to the form but as part of an html output, i couldn't link the database address that contact form usually uses so i changed the location of the file with the following function in the function.php
function cfdbFilterSaveFile($formData)
{
// CHANGE THIS: CF7 form name you want to manipulate
$formName = 'Registration 1';
// CHANGE THIS: upload field name on your form
$fieldName = 'Photo';
// CHANGE THIS: directory where the file will be saved permanently
$uploaddir = '/home/dir/public_html/wp-content/uploads/cf7/';
if ($formData && $formName == $formData->title && isset($formData->uploaded_files[$fieldName])) {
// make a copy of data from cf7
$formCopy = clone $formData;
// breakdown parts of uploaded file, to get basename
$path = pathinfo($formCopy->uploaded_files[$fieldName]);
// directory of the new file
$newfile = $uploaddir . $path['basename'];
// check if a file with the same name exists in the directory
if (file_exists($newfile)) {
$dupname = true;
$i = 2;
while ($dupname) {
$newpath = pathinfo($newfile);
$newfile = $uploaddir . $newpath['filename'] . '-' . $i . '.' . $newpath['extension'];
if (file_exists($newfile)) {
$i++;
} else {
$dupname = false;
}
}
}
// make a copy of file to new directory
copy($formCopy->uploaded_files[$fieldName], $newfile);
// save the path to the copied file to the cfdb database
$formCopy->posted_data[$fieldName] = $newfile;
// delete the original file from $formCopy
unset($formCopy->uploaded_files[$fieldName]);
return $formCopy;
}
return $formData;
}
add_filter('cfdb_form_data', 'cfdbFilterSaveFile');
The file gets saved and if there is a duplicate it changes the name.
GREAT!! Now the output in the email is the following
<table width="120px" bgcolor="#fff" cellpadding="10px">
<tr>
<td class="details photo" valign="top"><img src="http://ift.tt/1RoJ4i2]" width="120" style="width:120px"/></td>
</tr>
</table>
and it works fine to a level: if 2 people upload a file with the same name, the function above will copy and change it to another name but cf7 will still output the name of the original file uploaded as [Photo] resulting the email linking to the wrong file because the change of name does not happen to the field [Photo] per se. Is there a way I can get the new url to output in the [Photo] field?
This is giving me a massive headache.
Thanks so much for your help !!!
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire