ILIAS PHP Cross Reference Learning Management Systems

Source: /Modules/TestQuestionPool/classes/class.ilMultipleChoiceWizardInputGUI.php - 378 lines - 12906 bytes - Summary - Text - Print

   1  <?php
   2  /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
   3  
   4  include_once  "./Modules/TestQuestionPool/classes/class.ilSingleChoiceWizardInputGUI.php";
   5  
   6  /**
   7  * This class represents a multiple choice wizard property in a property form.
   8  *
   9  * @author Helmut Schottmüller <ilias@aurealis.de> 
  10  * @version $Id: class.ilMultipleChoiceWizardInputGUI.php 44245 2013-08-17 11:15:45Z mbecker $
  11  * @ingroup    ServicesForm
  12  */
  13  class ilMultipleChoiceWizardInputGUI extends ilSingleChoiceWizardInputGUI
  14  {
  15      /**
  16      * Set Value.
  17      *
  18      * @param    string    $a_value    Value
  19      */
  20  	function setValue($a_value)
  21      {
  22          $this->values = array();
  23          if (is_array($a_value))
  24          {
  25              if (is_array($a_value['answer']))
  26              {
  27                  foreach ($a_value['answer'] as $index => $value)
  28                  {
  29                      include_once  "./Modules/TestQuestionPool/classes/class.assAnswerMultipleResponseImage.php";
  30                      $answer = new ASS_AnswerMultipleResponseImage($value, $a_value['points'][$index], $index, $a_value['points_unchecked'][$index], $a_value['imagename'][$index]);
  31                      array_push($this->values, $answer);
  32                  }
  33              }
  34          }
  35      }
  36  
  37      /**
  38      * Check input, strip slashes etc. set alert, if input is not ok.
  39      *
  40      * @return    boolean        Input ok, true/false
  41      */    
  42  	function checkInput()
  43      {
  44          global $lng;
  45          
  46          include_once  "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
  47          if (is_array($_POST[$this->getPostVar()])) $_POST[$this->getPostVar()] = ilUtil::stripSlashesRecursive($_POST[$this->getPostVar()], false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment"));
  48          $foundvalues = $_POST[$this->getPostVar()];
  49          if (is_array($foundvalues))
  50          {
  51              // check answers
  52              if (is_array($foundvalues['answer']))
  53              {
  54                  foreach ($foundvalues['answer'] as $aidx => $answervalue)
  55                  {
  56                      if (((strlen($answervalue)) == 0) && (strlen($foundvalues['imagename'][$aidx]) == 0))
  57                      {
  58                          $this->setAlert($lng->txt("msg_input_is_required"));
  59                          return FALSE;
  60                      }
  61                  }
  62              }
  63              // check points
  64              $max = 0;
  65              if (is_array($foundvalues['points']))
  66              {
  67                  foreach ($foundvalues['points'] as $points)
  68                  {
  69                      if ($points > $max) $max = $points;
  70                      if (((strlen($points)) == 0) || (!is_numeric($points))) 
  71                      {
  72                          $this->setAlert($lng->txt("form_msg_numeric_value_required"));
  73                          return FALSE;
  74                      }
  75                  }
  76                  foreach ($foundvalues['points_unchecked'] as $points)
  77                  {
  78                      if ($points > $max) $max = $points;
  79                      if (((strlen($points)) == 0) || (!is_numeric($points))) 
  80                      {
  81                          $this->setAlert($lng->txt("form_msg_numeric_value_required"));
  82                          return FALSE;
  83                      }
  84                  }
  85              }
  86              if ($max == 0)
  87              {
  88                  $this->setAlert($lng->txt("enter_enough_positive_points"));
  89                  return false;
  90              }
  91  
  92              if (is_array($_FILES) && count($_FILES) && $this->getSingleline())
  93              {
  94                  if (!$this->hideImages)
  95                  {
  96                      if (is_array($_FILES[$this->getPostVar()]['error']['image']))
  97                      {
  98                          foreach ($_FILES[$this->getPostVar()]['error']['image'] as $index => $error)
  99                          {
 100                              // error handling
 101                              if ($error > 0)
 102                              {
 103                                  switch ($error)
 104                                  {
 105                                      case UPLOAD_ERR_INI_SIZE:
 106                                          $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
 107                                          return false;
 108                                          break;
 109  
 110                                      case UPLOAD_ERR_FORM_SIZE:
 111                                          $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
 112                                          return false;
 113                                          break;
 114  
 115                                      case UPLOAD_ERR_PARTIAL:
 116                                          $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
 117                                          return false;
 118                                          break;
 119  
 120                                      case UPLOAD_ERR_NO_FILE:
 121                                          if ($this->getRequired())
 122                                          {
 123                                              if ((!strlen($foundvalues['imagename'][$index])) && (!strlen($foundvalues['answer'][$index])))
 124                                              {
 125                                                  $this->setAlert($lng->txt("form_msg_file_no_upload"));
 126                                                  return false;
 127                                              }
 128                                          }
 129                                          break;
 130  
 131                                      case UPLOAD_ERR_NO_TMP_DIR:
 132                                          $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
 133                                          return false;
 134                                          break;
 135  
 136                                      case UPLOAD_ERR_CANT_WRITE:
 137                                          $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
 138                                          return false;
 139                                          break;
 140  
 141                                      case UPLOAD_ERR_EXTENSION:
 142                                          $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
 143                                          return false;
 144                                          break;
 145                                  }
 146                              }
 147                          }
 148                      }
 149                      else
 150                      {
 151                          if ($this->getRequired())
 152                          {
 153                              $this->setAlert($lng->txt("form_msg_file_no_upload"));
 154                              return false;
 155                          }
 156                      }
 157  
 158                      if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
 159                      {
 160                          foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
 161                          {
 162                              $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
 163                              $filename_arr = pathinfo($filename);
 164                              $suffix = $filename_arr["extension"];
 165                              $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
 166                              $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
 167                              // check suffixes
 168                              if (strlen($tmpname) && is_array($this->getSuffixes()))
 169                              {
 170                                  if (!in_array(strtolower($suffix), $this->getSuffixes()))
 171                                  {
 172                                      $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
 173                                      return false;
 174                                  }
 175                              }
 176                          }
 177                      }
 178  
 179                      if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
 180                      {
 181                          foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
 182                          {
 183                              $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
 184                              $filename_arr = pathinfo($filename);
 185                              $suffix = $filename_arr["extension"];
 186                              $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
 187                              $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
 188                              // virus handling
 189                              if (strlen($tmpname))
 190                              {
 191                                  $vir = ilUtil::virusHandling($tmpname, $filename);
 192                                  if ($vir[0] == false)
 193                                  {
 194                                      $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
 195                                      return false;
 196                                  }
 197                              }
 198                          }
 199                      }
 200                  }
 201              }
 202          }
 203          else
 204          {
 205              $this->setAlert($lng->txt("msg_input_is_required"));
 206              return FALSE;
 207          }
 208          
 209          return $this->checkSubItemsInput();
 210      }
 211  
 212      /**
 213      * Insert property html
 214      *
 215      * @return    int    Size
 216      */
 217  	function insert(&$a_tpl)
 218      {
 219          global $lng;
 220          
 221          $tpl = new ilTemplate("tpl.prop_multiplechoicewizardinput.html", true, true, "Modules/TestQuestionPool");
 222          $i = 0;
 223          foreach ($this->values as $value)
 224          {
 225              if ($this->getSingleline())
 226              {
 227                  if (!$this->hideImages)
 228                  {
 229                      if (strlen($value->getImage()))
 230                      {
 231                          $imagename = $this->qstObject->getImagePathWeb() . $value->getImage();
 232                          if (($this->getSingleline()) && ($this->qstObject->getThumbSize()))
 233                          {
 234                              if (@file_exists($this->qstObject->getImagePath() . $this->qstObject->getThumbPrefix() . $value->getImage()))
 235                              {
 236                                  $imagename = $this->qstObject->getImagePathWeb() . $this->qstObject->getThumbPrefix() . $value->getImage();
 237                              }
 238                          }
 239                          $tpl->setCurrentBlock('image');
 240                          $tpl->setVariable('SRC_IMAGE', $imagename);
 241                          $tpl->setVariable('IMAGE_NAME', $value->getImage());
 242                          $tpl->setVariable('ALT_IMAGE', ilUtil::prepareFormOutput($value->getAnswertext()));
 243                          $tpl->setVariable("TXT_DELETE_EXISTING", $lng->txt("delete_existing_file"));
 244                          $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
 245                          $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
 246                          $tpl->parseCurrentBlock();
 247                      }
 248                      $tpl->setCurrentBlock('addimage');
 249                      $tpl->setVariable("IMAGE_ID", $this->getPostVar() . "[image][$i]");
 250                      $tpl->setVariable("IMAGE_SUBMIT", $lng->txt("upload"));
 251                      $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
 252                      $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
 253                      $tpl->parseCurrentBlock();
 254                  }
 255  
 256                  if (is_object($value))
 257                  {
 258                      $tpl->setCurrentBlock("prop_text_propval");
 259                      $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
 260                      $tpl->parseCurrentBlock();
 261                      $tpl->setCurrentBlock("prop_points_propval");
 262                      $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsChecked()));
 263                      $tpl->parseCurrentBlock();
 264                      $tpl->setCurrentBlock("prop_points_unchecked_propval");
 265                      $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
 266                      $tpl->parseCurrentBlock();
 267                  }
 268                  $tpl->setCurrentBlock('singleline');
 269                  $tpl->setVariable("SIZE", $this->getSize());
 270                  $tpl->setVariable("SINGLELINE_ID", $this->getPostVar() . "[answer][$i]");
 271                  $tpl->setVariable("SINGLELINE_ROW_NUMBER", $i);
 272                  $tpl->setVariable("SINGLELINE_POST_VAR", $this->getPostVar());
 273                  $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
 274                  if ($this->getDisabled())
 275                  {
 276                      $tpl->setVariable("DISABLED_SINGLELINE", " disabled=\"disabled\"");
 277                  }
 278                  $tpl->parseCurrentBlock();
 279              }
 280              else if (!$this->getSingleline())
 281              {
 282                  if (is_object($value))
 283                  {
 284                      $tpl->setCurrentBlock("prop_points_propval");
 285                      $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPoints()));
 286                      $tpl->parseCurrentBlock();
 287                      $tpl->setCurrentBlock("prop_points_unchecked_propval");
 288                      $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
 289                      $tpl->parseCurrentBlock();
 290                  }
 291                  $tpl->setCurrentBlock('multiline');
 292                  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
 293                  $tpl->setVariable("MULTILINE_ID", $this->getPostVar() . "[answer][$i]");
 294                  $tpl->setVariable("MULTILINE_ROW_NUMBER", $i);
 295                  $tpl->setVariable("MULTILINE_POST_VAR", $this->getPostVar());
 296                  if ($this->getDisabled())
 297                  {
 298                      $tpl->setVariable("DISABLED_MULTILINE", " disabled=\"disabled\"");
 299                  }
 300                  $tpl->parseCurrentBlock();
 301              }
 302              if ($this->getAllowMove())
 303              {
 304                  $tpl->setCurrentBlock("move");
 305                  $tpl->setVariable("CMD_UP", "cmd[up" . $this->getFieldId() . "][$i]");
 306                  $tpl->setVariable("CMD_DOWN", "cmd[down" . $this->getFieldId() . "][$i]");
 307                  $tpl->setVariable("ID", $this->getPostVar() . "[$i]");
 308                  $tpl->setVariable("UP_BUTTON", ilUtil::getImagePath('a_up.png'));
 309                  $tpl->setVariable("DOWN_BUTTON", ilUtil::getImagePath('a_down.png'));
 310                  $tpl->parseCurrentBlock();
 311              }
 312              $tpl->setCurrentBlock("row");
 313              $class = ($i % 2 == 0) ? "even" : "odd";
 314              if ($i == 0) $class .= " first";
 315              if ($i == count($this->values)-1) $class .= " last";
 316              $tpl->setVariable("ROW_CLASS", $class);
 317              $tpl->setVariable("POST_VAR", $this->getPostVar());
 318              $tpl->setVariable("ROW_NUMBER", $i);
 319              $tpl->setVariable("ID", $this->getPostVar() . "[answer][$i]");
 320              $tpl->setVariable("POINTS_ID", $this->getPostVar() . "[points][$i]");
 321              $tpl->setVariable("POINTS_UNCHECKED_ID", $this->getPostVar() . "[points_unchecked][$i]");
 322              $tpl->setVariable("CMD_ADD", "cmd[add" . $this->getFieldId() . "][$i]");
 323              $tpl->setVariable("CMD_REMOVE", "cmd[remove" . $this->getFieldId() . "][$i]");
 324              if ($this->getDisabled())
 325              {
 326                  $tpl->setVariable("DISABLED_POINTS", " disabled=\"disabled\"");
 327              }
 328              $tpl->setVariable("ADD_BUTTON", ilUtil::getImagePath('edit_add.png'));
 329              $tpl->setVariable("REMOVE_BUTTON", ilUtil::getImagePath('edit_remove.png'));
 330              $tpl->parseCurrentBlock();
 331              $i++;
 332          }
 333  
 334          if ($this->getSingleline())
 335          {
 336              if (!$this->hideImages)
 337              {
 338                  if (is_array($this->getSuffixes()))
 339                  {
 340                      $suff_str = $delim = "";
 341                      foreach($this->getSuffixes() as $suffix)
 342                      {
 343                          $suff_str.= $delim.".".$suffix;
 344                          $delim = ", ";
 345                      }
 346                      $tpl->setCurrentBlock('allowed_image_suffixes');
 347                      $tpl->setVariable("TXT_ALLOWED_SUFFIXES", $lng->txt("file_allowed_suffixes")." ".$suff_str);
 348                      $tpl->parseCurrentBlock();
 349                  }
 350  
 351                  $tpl->setCurrentBlock("image_heading");
 352                  $tpl->setVariable("ANSWER_IMAGE", $lng->txt('answer_image'));
 353                  $tpl->setVariable("TXT_MAX_SIZE", ilUtil::getFileSizeInfo());
 354                  $tpl->parseCurrentBlock();
 355              }
 356          }
 357          
 358          $tpl->setVariable("ELEMENT_ID", $this->getPostVar());
 359          $tpl->setVariable("TEXT_YES", $lng->txt('yes'));
 360          $tpl->setVariable("TEXT_NO", $lng->txt('no'));
 361          $tpl->setVariable("DELETE_IMAGE_HEADER", $lng->txt('delete_image_header'));
 362          $tpl->setVariable("DELETE_IMAGE_QUESTION", $lng->txt('delete_image_question'));
 363          $tpl->setVariable("ANSWER_TEXT", $lng->txt('answer_text'));
 364          $tpl->setVariable("POINTS_TEXT", $lng->txt('points'));
 365          $tpl->setVariable("COMMANDS_TEXT", $lng->txt('actions'));
 366          $tpl->setVariable("POINTS_CHECKED_TEXT", $lng->txt('checkbox_checked'));
 367          $tpl->setVariable("POINTS_UNCHECKED_TEXT", $lng->txt('checkbox_unchecked'));
 368  
 369          $a_tpl->setCurrentBlock("prop_generic");
 370          $a_tpl->setVariable("PROP_GENERIC", $tpl->get());
 371          $a_tpl->parseCurrentBlock();
 372          
 373          global $tpl;
 374          include_once  "./Services/YUI/classes/class.ilYuiUtil.php";
 375          ilYuiUtil::initDomEvent();
 376          $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/multiplechoicewizard.js");
 377      }
 378  }

title

Description

title

Description

title

Description

title

title

Body