Allow upload files with extra fields - refs BT#9089

1.10.x
Angel Fernando Quiroz Campos 11 years ago
parent 0addfabe74
commit 84b60bd78e
  1. 14
      main/admin/resume_session.php
  2. 46
      main/inc/lib/extra_field.lib.php
  3. 28
      main/inc/lib/extra_field_value.lib.php
  4. 9
      tests/scripts/insert_session_fields.php

@ -258,6 +258,20 @@ foreach ($sessionFields as $field) {
}
}
break;
case ExtraField::FIELD_TYPE_FILE:
if ($sesionValueData !== false && !empty($sesionValueData['field_value'])) {
if (file_exists(api_get_path(SYS_CODE_PATH) . $sesionValueData['field_value'])) {
echo Display::url(
get_lang('Download'),
api_get_path(WEB_CODE_PATH) . $sesionValueData['field_value'],
array(
'title' => $field['field_display_text'],
'target' => '_blank'
)
);
}
}
break;
default:
echo $sesionValueData['field_value'];
break;

@ -54,6 +54,7 @@ class ExtraField extends Model
const FIELD_TYPE_INTEGER = 15;
const FIELD_TYPE_FILE_IMAGE = 16;
const FIELD_TYPE_FLOAT = 17;
const FIELD_TYPE_FILE = 18;
public $type = 'user'; //or session or course
public $handler_id = 'user_id';
@ -243,8 +244,9 @@ class ExtraField extends Model
$types[self::FIELD_TYPE_MOBILE_PHONE_NUMBER] = get_lang('FieldTypeMobilePhoneNumber');
$types[self::FIELD_TYPE_CHECKBOX] = get_lang('FieldTypeCheckbox');
$types[self::FIELD_TYPE_INTEGER] = get_lang('FieldTypeInteger');
$types[self::FIELD_TYPE_FILE_IMAGE] = get_lang('FieldTypeFile');
$types[self::FIELD_TYPE_FILE_IMAGE] = get_lang('FieldTypeFileImage');
$types[self::FIELD_TYPE_FLOAT] = get_lang('FieldTypeFloat');
$types[self::FIELD_TYPE_FILE] = get_lang('FieldTypeFFile');
switch ($handler) {
case 'course':
@ -1045,7 +1047,7 @@ EOF;
if (file_exists(api_get_path(SYS_CODE_PATH) . $extraData[$fieldVariable])) {
$fieldTexts[] = Display::img(
api_get_path(WEB_CODE_PATH) . $extraData[$fieldVariable],
'ASDASD',
$field_details['field_display_text'],
array('width' => '300')
);
}
@ -1089,6 +1091,46 @@ EOF;
$form->applyFilter('extra_'.$field_details['field_variable'], 'trim');
$form->applyFilter('extra_'.$field_details['field_variable'], 'floatval');
if (!$admin_permissions) {
if ($field_details['field_visible'] == 0) {
$form->freeze(
'extra_'.$field_details['field_variable']
);
}
}
break;
case ExtraField::FIELD_TYPE_FILE:
require_once api_get_path(LIBRARY_PATH) . 'fileUpload.lib.php';
$fieldVariable = "extra_{$field_details['field_variable']}";
$fieldTexts = array(
$field_details['field_display_text']
);
if (is_array($extraData) && array_key_exists($fieldVariable, $extraData)) {
if (file_exists(api_get_path(SYS_CODE_PATH) . $extraData[$fieldVariable])) {
$fieldTexts[] = Display::url(
api_get_path(WEB_CODE_PATH) . $extraData[$fieldVariable],
api_get_path(WEB_CODE_PATH) . $extraData[$fieldVariable],
array(
'title' => $field_details['field_display_text'],
'target' => '_blank'
)
);
}
}
$form->addElement(
'file',
$fieldVariable,
$fieldTexts,
array('class' => 'span8')
);
$form->applyFilter('extra_'.$field_details['field_variable'], 'stripslashes');
$form->applyFilter('extra_'.$field_details['field_variable'], 'trim');
if (!$admin_permissions) {
if ($field_details['field_visible'] == 0) {
$form->freeze(

@ -188,6 +188,34 @@ class ExtraFieldValue extends Model
self::save($new_params);
}
break;
case ExtraField::FIELD_TYPE_FILE:
$dirPermissions = api_get_permissions_for_new_directories();
$sysCodePath = api_get_path(SYS_CODE_PATH);
$fileDir = "upload/extrafields/{$this->type}/";
$cleanedName = replace_dangerous_char($value['name']);
$fileName = ExtraField::FIELD_TYPE_FILE . "_{$params[$this->handler_id]}_$cleanedName";
if (!file_exists($sysCodePath . $fileDir)) {
mkdir($sysCodePath . $fileDir, $dirPermissions, true);
}
if ($value['error'] == 0) {
moveUploadedFile($value, $sysCodePath . $fileDir . $fileName);
$new_params = array(
$this->handler_id => $params[$this->handler_id],
'field_id' => $extra_field_info['id'],
'field_value' => $fileDir . $fileName
);
if ($this->type !== 'session' && $this->type !== 'course') {
$new_params['comment'] = $comment;
}
self::save($new_params);
}
break;
default;
$new_params = array(
$this->handler_id => $params[$this->handler_id],

@ -145,3 +145,12 @@ $banner->save(array(
'field_visible' => 1,
'field_changeable' => 1
));
$brochure = new ExtraField('session');
$brochure->save(array(
'field_type' => ExtraField::FIELD_TYPE_FILE,
'field_variable' => 'brochure',
'field_display_text' => 'Brochure',
'field_visible' => 1,
'field_changeable' => 1
));

Loading…
Cancel
Save