Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
form_question_rule_type_file_type.inc
1 <?php
18 require_once dirname(__FILE__).'/../../form_question_rule/form_question_rule.inc';
31 {
32 
33 
40  function __construct($assetid=0)
41  {
42  parent::__construct($assetid);
43 
44  }//end constructor
45 
46 
54  public static function getOperators()
55  {
56  return Array(
57  1 => translate('core_form_rule_file_type_true'),
58  0 => translate('core_form_rule_file_type_false'),
59  );
60 
61  }//end getOperators()
62 
63 
83  function valueTest($answer, $operator, &$comparison)
84  {
85 
86  if (strrpos($answer, '.') === false) {
87  $extension = '';
88  } else {
89  $extension = substr($answer, strrpos($answer, '.'));
90  }
91 
92  $valid = (strpos(strtolower($comparison), strtolower($answer)) !== false) ? 1 : 0;
93 
94  return ($valid == $operator);
95 
96 
97  }//end valueTest()
98 
99 
119  function evaluate($answer, $rule_data, &$q_asset)
120  {
121 
122 
123  include (SQ_FUDGE_PATH.'/standards_lists/mime_types.inc');
124  //get all data we need from either current submission or incomplete submission
125  if (!empty($_FILES['q'.$q_asset->id]['tmp_name'])) {
126  $temp_file = $_FILES['q'.$q_asset->id]['tmp_name'];
127  $answer_name = $_FILES['q'.$q_asset->id]['name'];
128  }
129  else {
130  $extra_data = $q_asset->getExtraData();
131  $temp_file = array_get_index($extra_data, 'temp_filesystem_path','');
132  $answer_name = basename($temp_file);
133  }
134 
135  $operator = array_get_index($rule_data, 'operator', 1);
136  $comparison = array_get_index($rule_data, 'value', '');
137  $check_mime = array_get_index($rule_data, 'check_mime', FALSE);
138 
139  if (strrpos($answer_name, '.') === false) {
140  $extension = '';
141  } else {
142  $extension = substr($answer_name, strrpos($answer_name, '.') + 1);
143  }
144 
145 
146  //skip test if no file is uploaded
147  if ((empty($answer_name) || $answer_name == 'No file uploaded') && empty($temp_file)) return TRUE;
148 
149 
150  //check MIME type conistency for the temp uploaded file
151  //file MIME, extension MIME should be consistent, we can't rely on browser MIME type
152  if ($check_mime){
153  $MIME_type = file_mime_type($temp_file);
154  $MIME_type_extension = isset($standards_lists_mime_types[strtolower($extension)]) ? $standards_lists_mime_types[strtolower($extension)] : '';
155 
156  //only check MIME type consistency if it has a valid MIME type
157  if(!empty($MIME_type) && $MIME_type != 'text/plain' && $MIME_type != 'application/x-empty' && $MIME_type != 'application/octet-stream') {
158  if(empty($MIME_type_extension)|| $MIME_type_extension != $MIME_type) return FALSE;
159  }
160  }
161 
162 
163 
164  // If the extension is empty, return as invalid, otherwise strpos will not take empty argument.
165  if (empty($extension) && !empty($comparison)) {
166  $valid = 0;
167  } else {
168  $valid = (strpos(strtolower($comparison), strtolower($extension)) !== FALSE) ? 1 : 0;
169  }
170 
171  return ($valid == $operator);
172 
173  }//end evaluate()
174 
175 
187  function generateJSCode(&$q_asset, $rule_data)
188  {
189  // Netscape and IE do not provide interfaces for accessing the
190  // properties of file upload fields therefore no JS validation possible
191 
192  return '';
193 
194  }//end generateJSCode()
195 
196 
206  function defaultError(&$q_asset, $rule_data)
207  {
208  $operator = array_get_index($rule_data, 'operator', 1);
209  $comparison = array_get_index($rule_data, 'value', '');
210 
211  $comparison = str_replace("\r", '', $comparison);
212  $comparison = str_replace("\n", ', ', $comparison);
213 
214  return translate('core_form_rule_file_type_error_'.($operator ? 'true' : 'false'), $q_asset->getValue(), $q_asset->attr('name'), $comparison);
215 
216  return $error_text;
217 
218  }//end defaultError()
219 
220 
230  function ruleDescription(&$q_asset, $rule_data)
231  {
232  $operator = array_get_index($rule_data, 'operator', 1);
233  $comparison = array_get_index($rule_data, 'value', '');
234 
235  $operator_list = $this->getOperators();
236 
237  return translate('core_form_rule_file_type_desc_'.($operator ? 'true' : 'false'), $q_asset->attr('name'), $rule_data['value']);
238 
239  }//end ruleDescription()
240 
241 
242 }//end class
243 ?>