﻿Здравствуйте!
Сделал небольшой хак для InstantCMS.

Хак добавляет в конструктор форм поле файл.
+Возможность выбора неограниченой мультизагрузки в одно поле.
+Настройка размера и типов файла


Что нужно делать:
В файле /template/ваш темплейт/special/form.php ~ на 14 строке в тег form добавляем атрибут  

enctype="multipart/form-data"


В файле /core/classes/form.class.php ~ на 16 строке добавляем в массив $kinds элемент 'file'

В том же файле в конце класса добавляем функцию обработки и вывода поля файла

		private function renderFile($form_field){
$form_field['config']['maxcount']=($form_field['config']['maxcount'])?$form_field['config']['maxcount']:10;

        $field = '';
if($form_field['config']['multi'] == true)$field.='<a href="javascript:" onclick="addfieldfile('.$form_field['id'].')">[+]</a>';
            $field .= '<div id="filefield_'.$form_field['id'].'"><input type="hidden" name="field['.$form_field['id'].']"/>
<input type="file" name="field_'.$form_field['id'].'[0]" style="width: '.(int)$form_field['config']['size'].'px" class="text-input form_text" /></div>
<script>
filecount=1;
function addfieldfile(id){
 $(document).ready(function(){
if(filecount<='.$form_field['config']['maxcount'].'){
    $("#filefield_"+id).append(\'<br><input type="file" name="field_'.$form_field['id'].'[\'+filecount+\']" style="width: '.(int)$form_field['config']['size'].'px" class="text-input form_text" />\');
}
filecount++;
  });
}
</script>';



		return $field;

	}


Обязательно создать папку /upload/files/

В файле /components/forms/frontend.php if($do=='processform'){...} меняем на 

if ($do=='processform'){

        if (!cmsCore::validateForm()) { cmsCore::error404(); }

        // Получаем форму
        $form = cmsForm::getFormData(cmsCore::request('form_id', 'int'));
        if(!$form) { cmsCore::error404(); }

        // Получаем данные полей формы
        $form_fields = cmsForm::getFormFields($form['id']);
        // Если полей нет, 404
        if(!$form_fields) { cmsCore::error404(); }

        // Получаем данные формы
        // Если не переданы, назад
		$form_input = cmsForm::getFieldsInputValues($form['id']);
		if(!$form_input) { cmsCore::addSessionMessage($_LANG['FORM_ERROR'], 'error'); cmsCore::redirectBack(); }

		$errors = false;
		// Проверяем значения формы
		foreach ($form_input['errors'] as $field_error) {
			if($field_error){ cmsCore::addSessionMessage($field_error, 'error'); $errors = true; }
		}
		// проверяем каптчу
		if(!cmsCore::checkCaptchaCode(cmsCore::request('code', 'str'))) { cmsCore::addSessionMessage($_LANG['ERR_CAPTCHA'], 'error'); $errors = true; }

		if($errors){ cmsCore::redirectBack(); }

        // Подготовим начало письма
        if($form['sendto']=='mail'){
             $mail_message  = $_LANG['FORM'].': ' . $form['title'];
             $mail_message .=  "\n----------------------------------------------\n\n";
        } else {
             $mail_message  = '<h3>'.$_LANG['FORM'].': ' . $form['title'] . '</h3>';
        }

		// Добавляем заполненные поля в письмо
        foreach ($form_fields as $field) {
		if($_FILES["field_{$field['id']}"]){
$extarr = explode(",",$field['config']['exts']);

		$x=0;
	 				if($form['sendto'] == 'mail'){
					$mail_message .= $field['title'] . ":\n";
				} else {
					$mail_message .= '<h5>'.$field['title'] . '</h5><p>';
				}set_time_limit(0);
while($x<count($_FILES["field_{$field['id']}"]["tmp_name"])){
if($_FILES["field_{$field['id']}"]['size'][$x]<=$field['config']['sizef']*1024*1024 && is_uploaded_file($_FILES["field_{$field['id']}"]["tmp_name"][$x])){


   			$realfile 	= $inDB->escape_string($_FILES["field_{$field['id']}"]['name'][$x]);

			$path_parts = pathinfo($realfile);
			$ext        = mb_strtolower($path_parts['extension']);

			// убираем расширение файла вместе с точкой
			$realfile = mb_substr($realfile, 0, mb_strrpos($realfile, '.'));
if (in_array($ext, $extarr)) {

$filename = "/upload/files/".md5(time().$x.$realfile).'.'.$ext;
    move_uploaded_file($_FILES["field_{$field['id']}"]["tmp_name"][$x], ".".$filename);

	 				if($form['sendto'] == 'mail'){
					$mail_message .= "<a href='$filename'>$realfile</a>\n\n";
				} else {
					$mail_message .= '<a href="'.$filename.'">'.$realfile.'</a>';
				}
}else{
cmsCore::addSessionMessage("Тип файлов с расширением \".".$ext."\" не поддерживается системой!", 'error'); cmsCore::redirectBack();
}
}
$x++;
   }
	 				if($form['sendto'] == 'mail'){
					$mail_message .= "\n\n";
				} else {
					$mail_message .= '</p>';
				}
}else{
			if($form_input['values'][$field['id']]){
				if($form['sendto'] == 'mail'){
					$mail_message .= $field['title'] . ":\n" . $form_input['values'][$field['id']] . "\n\n";
				} else {
					$mail_message .= '<h5>'.$field['title'] . '</h5><p>'.$form_input['values'][$field['id']].'</p>';
				}
			}
}
        }

        // Отправляем форму
		if ($form['sendto']=='mail'){
			$inCore->mailText($form['email'], cmsConfig::getConfig('sitename').': '.$form['title'], $mail_message);
		} else {
			cmsUser::sendMessage(-2, $form['user_id'], $mail_message);
		}

		cmsUser::sessionClearAll();

		cmsCore::addSessionMessage($_LANG['FORM_IS_SEND'], 'info');

		cmsCore::redirectBack();

    }


	В файле /admin/components/forms/backend.php ~ на строке 150 добавляем кейс

        case 'file':

            $item['config']['size']    = cmsCore::request('f_file_size', 'int', 300);
            $item['config']['multi']    = cmsCore::request('f_file_multi', 'int', 0);
            $item['config']['sizef']    = cmsCore::request('f_file_sizef', 'int', 1);
            $item['config']['exts']    = cmsCore::request('f_file_exts', 'str');
            $item['config']['maxcount']    = cmsCore::request('f_file_maxcount', 'int', 10);
            break;
	В том же файле строка ~ 446

    <option value="file" <?php if (@$field['kind'] == 'file') { echo 'selected="selected"'; } ?>>Файл</option>

	Там же строка ~542

<div id="kind_file" style="display:none">
                            <table width="100%" border="0" cellspacing="2" cellpadding="2">
                                <tr>
                                    <td width="100">Ширина:</td>
                                    <td><input name="f_file_size" type="text" id="f_file_size" value="<?php echo (@$field['config']['size'] ? $field['config']['size'] : 160) ?>" size="6" />  px </td>
                                </tr>

                                <tr>
                                    <td width="100">Максимальный размер файлов:</td>
                                    <td><input name="f_file_sizef" type="text" id="f_file_sizef" value="<?php echo (@$field['config']['sizef'] ? $field['config']['sizef'] : 3) ?>" size="6" />  Мб </td>
                                </tr>
                                <tr>
                                 <td width="100">Максимальное кол-во файлов:</td>
                                    <td><input name="f_file_maxcount" type="text" id="f_file_maxcount" value="<?php echo (@$field['config']['maxcount'] ? $field['config']['maxcount'] : 10) ?>" size="6" />  Шт </td>
                                </tr>
                                <tr>
                                    <td width="100">Типы файлов:</td>
                                    <td><input name="f_file_exts" type="text" id="f_file_exts" value="<?php echo (@$field['config']['exts'] ? $field['config']['exts'] : "jpg,png") ?>" size="10" />  через запятую </td>
                                </tr>

<tr>
                                    <td width="100">Мультизагрузка:</td>
                                    <td><select name="f_file_multi" id="f_file_multi">
                                                <option value="1" <?php if (@$field['config']['multi']) { echo 'selected="selected"'; } ?>>ДА</option>
                                                <option value="0" <?php if (!@$field['config']['multi']) { echo 'selected="selected"'; } ?>>НЕТ</option>
                                            </select></td>
                                </tr>
                            </table>
                        </div>
