[[+content_image]]
S
S
shelli2018-02-05 21:03:20
MODX
shelli, 2018-02-05 21:03:20

How to upload attached files via Formit to a folder on the server?

How to send files in modx via formit not to mail, but to a folder on the server. And on mail to receive only the link to this file?

[[!FormIt?
   &hooks=`saveFiles,email,redirect`
   &customValidators=`formit2checkfile`
   &emailTpl=`sendEmailTpl`
   &emailTo=`****@gmail.com`
   &emailFrom=`[email protected]@com`
   &emailSubject=`Консультація online http://askmeplz.com/`
   &redirectTo=`28`   
   &validate=`name:required,email:email:required,text:required:stripTags,phone:required:isNumber,uploads:formit2checkfile`
   &vTextIsNumber=`Номер телефону повинен містити лише цифри`      
]]


[[!+fi.error_message:notempty=`<p>[[!+fi.error_message]]</p>`]]
<form action="" method="post" class="form" enctype="multipart/form-data">
    <input type="hidden" name="nospam:blank" value="" />
    
<label for="name">Ваше ім'я <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.name]]</span>
    <input type="text" name="name" id="name" value="[[!+fi.name]]" />
 
    <label for="phone">Ваш телефон <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.phone]]</span>
    <input type="text" name="phone" id="phone" value="[[!+fi.phone]]" />
 
    <label for="email">Ваш Email <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.email]]</span>
    <input type="text" name="email" id="email" value="[[!+fi.email]]" />
  
    <label for="text">Опис діагноза <span class="required">*</span>:</label>
    <span class="error">[[!+fi.error.text]]</span>
    <textarea name="text" id="text" cols="40" rows="7"
       value="[[!+fi.text]]">[[!+fi.text]]</textarea>
       
    <div>
     <label for="uploads">Загрузити файл</label><br />
     <input type="file" name="uploads" value="[[!+fi.uploads]]" />
    </div><br />
    
     <label>
      <input type="checkbox" required=""> Натисканням на цю кнопку я висловлюю інформовану добровільну згоду на обробку персональних даних за умови дотримання їх захисту відповідно до вимог Закону України “Про захист персональних даних”.
<br/>
      <span class="error error_name">[[+fi.error.opd]]</span>
    </label><br/>

    <input class="submit_button" type="submit" value="Надіслати" />

</form>

sendEmailTpl Chunk
<p>Від кого: [[+name]]</p>
<p>Телефон: [[+phone]]</p>
<p>E-mail: [[+email]]</p>
<p>Опис діагнозу: </p>
<p><a href="[[+uploads]]">[[+uploadName]]</a></p>

saveFiles snippet
<?php
if (isset($_FILES['uploads'])) {
  if ($_FILES['uploads']['error']==0) {
    $nameFile = $_FILES['uploads']['name'];
    $extFile = mb_strtolower(pathinfo($nameFile, PATHINFO_EXTENSION));
    $uniqNameFile = uniqid('file_', true).'.'.$extFile;
    $newNameFile = 'assets/uploads/'. $uniqNameFile;
    if (move_uploaded_file($_FILES['upload']['tmp_name'], MODX_BASE_PATH.$newNameFile)) {
      $hook->setValue('uploads',$modx->config['site_url'].$newNameFile);
      $hook->setValue('uploadName',$uniqNameFile);
      return true;
    }
  }
}
return false;

Files come to the mail, but are not saved on the server. And yet, you need to be able to send files up to 300 mb. There is a check for extensions and file sizes, but still large files do not pass.
formit2checkfile snippet
<?php
// инициализируем переменную output, отвечающую за результат работы валидатора, со значением true
$output = true;
// разрешённые расширения файлов
$allowedExt = array('jpg','png','pdf','rar','zip','jpeg');
// максимальный размер файла (307200 Кбайт)
$maxFileSize = 307200 * 1024;
// имя файла
$fileName = basename( $_FILES[$key]['name'] );
// размер
$fileSize = filesize( $_FILES[$key]['tmp_name'] );
// расширение файла
$fileExt = mb_strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
// если имя файла не пустое
if ($fileName != '') {
  if(!in_array($fileExt, $allowedExt)) {
    // файл имеет недопустимый тип
    $errorMsg = 'Файл ' . $fileName . ' имеет не разрешённый тип.';
    $validator->addError($key, $errorMsg);
    $output = false; // возвращаем false
  }
  if($fileSize > $maxFileSize) {
    // файл имеет размер больше максимального
    $errorMsg = 'Размер файла '. $fileName .' превышает 300 Мбайт.';
    $validator->addError($key,$errorMsg);
    $output = false; // возвращаем false
  }
}
return $output;

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question