From fceeacff5d3cea5f124818ab0ab3fe80aaeb7274 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 21 Mar 2014 12:13:40 +0100 Subject: [PATCH] Adding document type file/text see BT#6702 --- .../lib/pear/HTML/QuickForm/Rule/Required.php | 72 +++++++++++-------- main/work/upload.php | 3 +- main/work/upload_from_template.php | 2 +- main/work/work.lib.php | 54 +++++++++++--- 4 files changed, 89 insertions(+), 42 deletions(-) diff --git a/main/inc/lib/pear/HTML/QuickForm/Rule/Required.php b/main/inc/lib/pear/HTML/QuickForm/Rule/Required.php index 727a44b712..7f36749690 100755 --- a/main/inc/lib/pear/HTML/QuickForm/Rule/Required.php +++ b/main/inc/lib/pear/HTML/QuickForm/Rule/Required.php @@ -1,6 +1,6 @@ - +class HTML_QuickForm_Rule_Required extends HTML_QuickForm_Rule +{ + /** + * Checks if an element is empty + * + * @param string $value Value to check + * @param mixed $options Not used yet + * @access public + * @return boolean true if value is not empty + */ + function validate($value, $options = null) + { + // It seems this is a file. + if (is_array($value)) { + if (isset($value['name']) && + isset($value['type']) && + isset($value['tmp_name']) && + isset($value['size']) && + isset($value['error']) + ){ + if (empty($value['tmp_name'])) { + return false; + } + } + } else { + if ((string)$value == '') { + return false; + } + } + return true; + } + + + function getValidationScript($options = null) + { + return array('', "{jsVar} == ''"); + } +} diff --git a/main/work/upload.php b/main/work/upload.php index 0e9beb401f..2bea5dee30 100644 --- a/main/work/upload.php +++ b/main/work/upload.php @@ -77,7 +77,7 @@ $interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'work/work_list. $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('UploadADocument')); $form = new FormValidator('form', 'POST', api_get_self()."?".api_get_cidreq()."&id=".$work_id, '', array('enctype' => "multipart/form-data")); -setWorkUploadForm($form); +setWorkUploadForm($form, $workInfo['allow_text_assignment']); $form->addElement('hidden', 'id', $work_id); $form->addElement('hidden', 'sec_token', $token); @@ -85,6 +85,7 @@ $error_message = null; $succeed = false; if ($form->validate()) { + if ($student_can_edit_in_session && $check) { $values = $form->getSubmitValues(); // Process work diff --git a/main/work/upload_from_template.php b/main/work/upload_from_template.php index a219385d15..28de435ad0 100644 --- a/main/work/upload_from_template.php +++ b/main/work/upload_from_template.php @@ -62,7 +62,7 @@ $interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'work/work_list. $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('UploadFromTemplate')); $form = new FormValidator('form', 'POST', api_get_self()."?".api_get_cidreq()."&id=".$work_id, '', array('enctype' => "multipart/form-data")); -setWorkUploadForm($form, false); +setWorkUploadForm($form, $workInfo['allow_text_assignment']); $form->addElement('hidden', 'document_id', $documentId); $form->addElement('hidden', 'id', $work_id); $form->addElement('hidden', 'sec_token', $token); diff --git a/main/work/work.lib.php b/main/work/work.lib.php index fb7320c8e3..c9a3b0636c 100644 --- a/main/work/work.lib.php +++ b/main/work/work.lib.php @@ -120,6 +120,7 @@ function settingsForm($defaults) $form->addGroup($group, '', get_lang('StudentAllowedToDeleteOwnPublication')); $form->addElement('button', 'submit', get_lang('Save')); $form->setDefaults($defaults); + return $form->return_form(); } @@ -214,7 +215,7 @@ function get_work_data_by_id($id) $id = intval($id); $course_id = api_get_course_int_id(); $work_table = Database::get_course_table(TABLE_STUDENT_PUBLICATION); - $sql = "SELECT * FROM $work_table WHERE id = $id AND c_id = $course_id"; + $sql = "SELECT * FROM $work_table WHERE id = $id AND c_id = $course_id"; $result = Database::query($sql); $work = array(); if (Database::num_rows($result)) { @@ -558,7 +559,8 @@ function display_student_publications_list($id, $my_folder_data, $work_parents, // form edit directory if (!empty($row['has_properties'])) { - $sql = Database::query('SELECT * FROM '.$work_assigment.' WHERE c_id = '.$course_id.' AND id = "'.$row['has_properties'].'" LIMIT 1'); + $sql = Database::query('SELECT * FROM '.$work_assigment.' + WHERE c_id = '.$course_id.' AND id = "'.$row['has_properties'].'" LIMIT 1'); $homework = Database::fetch_array($sql); } // save original value for later @@ -3023,20 +3025,37 @@ function getWorkDateValidationStatus($homework) { /** * @param FormValidator $form - * @param bool $uploadFile + * @param int $uploadFormType */ -function setWorkUploadForm($form, $uploadFile = true) +function setWorkUploadForm($form, $uploadFormType = 0) { $form->addElement('header', get_lang('UploadADocument')); $form->addElement('hidden', 'contains_file', 0, array('id'=>'contains_file_id')); $form->addElement('hidden', 'active', 1); $form->addElement('hidden', 'accepted', 1); - if ($uploadFile) { - $form->addElement('file', 'file', get_lang('UploadADocument'), 'size="40" onchange="updateDocumentTitle(this.value)"'); - $form->add_real_progress_bar('uploadWork', 'file'); - } $form->addElement('text', 'title', get_lang('Title'), array('id' => 'file_upload', 'class' => 'span4')); - $form->add_html_editor('description', get_lang('Description'), false, false, getWorkDescriptionToolbar()); + $form->addRule('title', get_lang('ThisFieldIsRequired'), 'required'); + + switch ($uploadFormType) { + case 0: + // File and text. + $form->addElement('file', 'file', get_lang('UploadADocument'), 'size="40" onchange="updateDocumentTitle(this.value)"'); + $form->add_real_progress_bar('uploadWork', 'file'); + $form->add_html_editor('description', get_lang('Description'), false, false, getWorkDescriptionToolbar()); + break; + case 1: + // Only text. + $form->add_html_editor('description', get_lang('Description'), false, false, getWorkDescriptionToolbar()); + $form->addRule('description', get_lang('ThisFieldIsRequired'), 'required'); + break; + case 2: + // Only file. + $form->addElement('file', 'file', get_lang('UploadADocument'), 'size="40" onchange="updateDocumentTitle(this.value)"'); + $form->add_real_progress_bar('uploadWork', 'file'); + $form->addRule('file', get_lang('ThisFieldIsRequired'), 'required'); + break; + } + $form->addElement('style_submit_button', 'submitWork', get_lang('Send'), array('class'=> 'upload', 'value' => "submitWork")); } @@ -3673,7 +3692,10 @@ function getFormWork($form, $defaults = array()) $form->addElement('html', ''); $form->addElement('checkbox', 'add_to_calendar', null, get_lang('AddToCalendar')); - $form->addElement('checkbox', 'allow_text_assignment', null, get_lang('AllowTextAssignments')); + + //$form->addElement('checkbox', 'allow_text_assignment', null, get_lang('AllowTextAssignments')); + $form->addElement('select', 'allow_text_assignment', get_lang('DocumentType'), getUploadDocumentType()); + $form->addElement('html', ''); if ($defaults['enableExpiryDate'] && $defaults['enableEndDate']) { @@ -3686,6 +3708,18 @@ function getFormWork($form, $defaults = array()) return $form; } +/** + * @return array + */ +function getUploadDocumentType() +{ + return array( + 0 => get_lang('AllowFileOrText'), + 1 => get_lang('AllowOnlyText'), + 2 => get_lang('AllowFiles') + ); +} + /** * @param array $courseInfo * @param bool $showScore