ILIAS PHP Cross Reference Learning Management Systems

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

   1  <?php
   2  /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
   3  
   4  /**
   5  * This class represents an image map file property in a property form.
   6  *
   7  * @author Helmut Schottmüller <ilias@aurealis.de> 
   8  * @version $Id: class.ilImagemapFileInputGUI.php 44245 2013-08-17 11:15:45Z mbecker $
   9  * @ingroup    ServicesForm
  10  */
  11  include_once  "./Services/Form/classes/class.ilImageFileInputGUI.php";
  12  
  13  class ilImagemapFileInputGUI extends ilImageFileInputGUI
  14  {
  15      protected $areas = array();
  16      protected $image_path = "";
  17      protected $image_path_web = "";
  18      protected $line_color = "";
  19      
  20      protected $pointsUncheckedFieldEnabled = false;
  21      
  22      /**
  23      * Constructor
  24      *
  25      * @param    string    $a_title    Title
  26      * @param    string    $a_postvar    Post Variable
  27      */
  28  	function __construct($a_title = "", $a_postvar = "")
  29      {
  30          global $lng;
  31  
  32          parent::__construct($a_title, $a_postvar);
  33      }
  34      
  35  	public function setPointsUncheckedFieldEnabled($pointsUncheckedFieldEnabled)
  36      {
  37          $this->pointsUncheckedFieldEnabled = (bool)$pointsUncheckedFieldEnabled;
  38      }
  39      
  40  	public function getPointsUncheckedFieldEnabled()
  41      {
  42          return $this->pointsUncheckedFieldEnabled;
  43      }
  44      
  45  	public function setAreas($a_areas)
  46      {
  47          $this->areas = $a_areas;
  48      }
  49      
  50  	public function getLineColor()
  51      {
  52          return $this->line_color;
  53      }
  54      
  55  	public function setLineColor($a_color)
  56      {
  57          $this->line_color = $a_color;
  58      }
  59      
  60  	public function getImagePath()
  61      {
  62          return $this->image_path;
  63      }
  64      
  65  	public function setImagePath($a_path)
  66      {
  67          $this->image_path = $a_path;
  68      }
  69      
  70  	public function getImagePathWeb()
  71      {
  72          return $this->image_path_web;
  73      }
  74      
  75  	public function setImagePathWeb($a_path_web)
  76      {
  77          $this->image_path_web = $a_path_web;
  78      }
  79      
  80  	public function setAreasByArray($a_areas)
  81      {
  82          if (is_array($a_areas['name']))
  83          {
  84              $this->areas = array();
  85              include_once  "./Modules/TestQuestionPool/classes/class.assAnswerImagemap.php";
  86              foreach ($a_areas['name'] as $idx => $name)
  87              {
  88                  if( $this->getPointsUncheckedFieldEnabled() && isset($a_areas['points_unchecked']) )
  89                  {
  90                      $pointsUnchecked = $a_areas['points_unchecked'][$idx];
  91                  }
  92                  else
  93                  {
  94                      $pointsUnchecked = 0.0;
  95                  }
  96                  
  97                  array_push($this->areas, new ASS_AnswerImagemap(
  98                      $name,
  99                      $a_areas['points'][$idx],
 100                      $idx,
 101                      $a_areas['coords'][$idx], $a_areas['shape'][$idx],
 102                      -1,
 103                      $pointsUnchecked
 104                  ));
 105              }
 106          }
 107      }
 108      
 109  	public function getAreas()
 110      {
 111          return $this->areas;
 112      }
 113      
 114      /**
 115      * Set value by array
 116      *
 117      * @param    array    $a_values    value array
 118      */
 119  	function setValueByArray($a_values)
 120      {
 121          $this->setValue($a_values[$this->getPostVar() . '_name']);
 122          $this->setAreasByArray($a_values[$this->getPostVar()]['coords']);
 123      }
 124  
 125  	public function setValue($a_value)
 126      {
 127          parent::setValue($a_value);
 128      }
 129  
 130      /**
 131      * Check input, strip slashes etc. set alert, if input is not ok.
 132      *
 133      * @return    boolean        Input ok, true/false
 134      */    
 135  	function checkInput()
 136      {
 137          global $lng;
 138  
 139          if (is_array($_POST[$this->getPostVar()])) $_POST[$this->getPostVar()] = ilUtil::stripSlashesRecursive($_POST[$this->getPostVar()]);
 140          // remove trailing '/'
 141          while (substr($_FILES[$this->getPostVar()]["name"],-1) == '/')
 142          {
 143              $_FILES[$this->getPostVar()]["name"] = substr($_FILES[$this->getPostVar()]["name"],0,-1);
 144          }
 145  
 146          $filename = $_FILES[$this->getPostVar()]["name"];
 147          $filename_arr = pathinfo($_FILES[$this->getPostVar()]["name"]);
 148          $suffix = $filename_arr["extension"];
 149          $mimetype = $_FILES[$this->getPostVar()]["type"];
 150          $size_bytes = $_FILES[$this->getPostVar()]["size"];
 151          $temp_name = $_FILES[$this->getPostVar()]["tmp_name"];
 152          $error = $_FILES[$this->getPostVar()]["error"];
 153  
 154          // error handling
 155          if ($error > 0)
 156          {
 157              switch ($error)
 158              {
 159                  case UPLOAD_ERR_INI_SIZE:
 160                      $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
 161                      return false;
 162                      break;
 163                       
 164                  case UPLOAD_ERR_FORM_SIZE:
 165                      $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
 166                      return false;
 167                      break;
 168      
 169                  case UPLOAD_ERR_PARTIAL:
 170                      $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
 171                      return false;
 172                      break;
 173      
 174                  case UPLOAD_ERR_NO_FILE:
 175                      if ($this->getRequired())
 176                      {
 177                          if (!strlen($this->getValue()))
 178                          {
 179                              $this->setAlert($lng->txt("form_msg_file_no_upload"));
 180                              return false;
 181                          }
 182                      }
 183                      break;
 184       
 185                  case UPLOAD_ERR_NO_TMP_DIR:
 186                      $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
 187                      return false;
 188                      break;
 189                       
 190                  case UPLOAD_ERR_CANT_WRITE:
 191                      $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
 192                      return false;
 193                      break;
 194       
 195                  case UPLOAD_ERR_EXTENSION:
 196                      $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
 197                      return false;
 198                      break;
 199              }
 200          }
 201          
 202          // check suffixes
 203          if ($_FILES[$this->getPostVar()]["tmp_name"] != "" &&
 204              is_array($this->getSuffixes()))
 205          {
 206              if (!in_array(strtolower($suffix), $this->getSuffixes()))
 207              {
 208                  $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
 209                  return false;
 210              }
 211          }
 212          
 213          // virus handling
 214          if ($_FILES[$this->getPostVar()]["tmp_name"] != "")
 215          {
 216              $vir = ilUtil::virusHandling($temp_name, $filename);
 217              if ($vir[0] == false)
 218              {
 219                  $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
 220                  return false;
 221              }
 222          }
 223          
 224          $max = 0;
 225          if (is_array($_POST[$this->getPostVar()]['coords']['name']))
 226          {
 227              foreach ($_POST[$this->getPostVar()]['coords']['name'] as $idx => $name)
 228              {
 229                  if ((!strlen($_POST[$this->getPostVar()]['coords']['points'][$idx])) && ($this->getRequired))
 230                  {
 231                      $this->setAlert($lng->txt('form_msg_area_missing_points'));
 232                      return false;
 233                  }
 234                  if ((!is_numeric($_POST[$this->getPostVar()]['coords']['points'][$idx])))
 235                  {
 236                      $this->setAlert($lng->txt('form_msg_numeric_value_required'));
 237                      return false;
 238                  }
 239                  if ($_POST[$this->getPostVar()]['coords']['points'][$idx] > 0) $max = $_POST[$this->getPostVar()]['coords']['points'][$idx];
 240              }
 241          }
 242  
 243          if ($max == 0 && (!$filename))
 244          {
 245              $this->setAlert($lng->txt("enter_enough_positive_points"));
 246              return false;
 247          }
 248          return true;
 249      }
 250  
 251      /**
 252      * Insert property html
 253      */
 254  	function insert(&$a_tpl)
 255      {
 256          global $lng;
 257          
 258          $template = new ilTemplate("tpl.prop_imagemap_file.html", true, true, "Modules/TestQuestionPool");
 259          
 260          $this->outputSuffixes($template, "allowed_image_suffixes");
 261          
 262          if ($this->getImage() != "")
 263          {
 264              if (strlen($this->getValue()))
 265              {
 266                  $template->setCurrentBlock("has_value");
 267                  $template->setVariable("TEXT_IMAGE_NAME", $this->getValue());
 268                  $template->setVariable("POST_VAR_D", $this->getPostVar());
 269                  $template->parseCurrentBlock();
 270              }
 271              $template->setCurrentBlock("image");
 272              if (count($this->getAreas()))
 273              {
 274                  include_once  "./Modules/TestQuestionPool/classes/class.ilImagemapPreview.php";
 275                  $preview = new ilImagemapPreview($this->getImagePath().$this->getValue());
 276                  foreach ($this->getAreas() as $index => $area)
 277                  {
 278                      $preview->addArea($index, $area->getArea(), $area->getCoords(), $area->getAnswertext(), "", "", true, $this->getLineColor());
 279                  }
 280                  $preview->createPreview();
 281                  $imagepath = $this->getImagePathWeb() . $preview->getPreviewFilename($this->getImagePath(), $this->getValue()) . "?img=" . time();
 282                  $template->setVariable("SRC_IMAGE", $imagepath);
 283              }
 284              else
 285              {
 286                  $template->setVariable("SRC_IMAGE", $this->getImage());
 287              }
 288              $template->setVariable("ALT_IMAGE", $this->getAlt());
 289              $template->setVariable("POST_VAR_D", $this->getPostVar());
 290              $template->setVariable("TXT_DELETE_EXISTING",
 291                  $lng->txt("delete_existing_file"));
 292              $template->setVariable("TEXT_ADD_RECT", $lng->txt('add_rect'));
 293              $template->setVariable("TEXT_ADD_CIRCLE", $lng->txt('add_circle'));
 294              $template->setVariable("TEXT_ADD_POLY", $lng->txt('add_poly'));
 295              $template->parseCurrentBlock();
 296          }
 297  
 298          if(is_array($this->getAreas()) && $this->getAreas())
 299          {
 300              $counter = 0;
 301              foreach ($this->getAreas() as $area)
 302              {
 303                  if (strlen($area->getPoints()))
 304                  {
 305                      $template->setCurrentBlock('area_points_value');
 306                      $template->setVariable('VALUE_POINTS', $area->getPoints());
 307                      $template->parseCurrentBlock();
 308                  }
 309                  if( $this->getPointsUncheckedFieldEnabled() )
 310                  {
 311                      if (strlen($area->getPointsUnchecked()))
 312                      {
 313                          $template->setCurrentBlock('area_points_unchecked_value');
 314                          $template->setVariable('VALUE_POINTS_UNCHECKED', $area->getPointsUnchecked());
 315                          $template->parseCurrentBlock();
 316                      }
 317                      
 318                      $template->setCurrentBlock('area_points_unchecked_field');
 319                      $template->parseCurrentBlock();
 320                  }
 321                  if (strlen($area->getAnswertext()))
 322                  {
 323                      $template->setCurrentBlock('area_name_value');
 324                      $template->setVariable('VALUE_NAME', $area->getAnswertext());
 325                      $template->parseCurrentBlock();
 326                  }
 327                  $template->setCurrentBlock('row');
 328                  $class = ($counter % 2 == 0) ? "tblrow1" : "tblrow2";
 329                  if ($counter == 0) $class .= " first";
 330                  if ($counter == count($this->getAreas())-1) $class .= " last";
 331                  $template->setVariable("ROW_CLASS", $class);
 332                  $template->setVariable('POST_VAR_R', $this->getPostVar());
 333                  $template->setVariable('TEXT_SHAPE', strtoupper($area->getArea()));
 334                  $template->setVariable('VALUE_SHAPE', $area->getArea());
 335                  $coords = preg_replace("/(\d+,\d+,)/", "\$1 ", $area->getCoords());
 336                  $template->setVariable('VALUE_COORDINATES', $area->getCoords());
 337                  $template->setVariable('TEXT_COORDINATES', $coords);
 338                  $template->setVariable('COUNTER', $counter);
 339                  $template->setVariable("REMOVE_BUTTON", ilUtil::getImagePath('edit_remove.png'));
 340                  $template->parseCurrentBlock();
 341                  $counter++;
 342              }
 343              $template->setCurrentBlock("areas");
 344              $template->setVariable("TEXT_NAME", $lng->txt("hint"));
 345              if( $this->getPointsUncheckedFieldEnabled() )
 346              {
 347                  $template->setVariable("TEXT_POINTS", $lng->txt("points_checked"));
 348                              
 349                  $template->setCurrentBlock('area_points_unchecked_head');
 350                  $template->setVariable("TEXT_POINTS_UNCHECKED", $lng->txt("points_unchecked"));
 351                  $template->parseCurrentBlock();
 352              }
 353              else
 354              {
 355                  $template->setVariable("TEXT_POINTS", $lng->txt("points"));
 356              }
 357              $template->setVariable("TEXT_SHAPE", $lng->txt("shape"));
 358              $template->setVariable("TEXT_COORDINATES", $lng->txt("coordinates"));
 359              $template->setVariable("TEXT_COMMANDS", $lng->txt("actions"));
 360              $template->parseCurrentBlock();
 361          }
 362          
 363          $template->setVariable("POST_VAR", $this->getPostVar());
 364          $template->setVariable("ID", $this->getFieldId());
 365          $template->setVariable("TXT_MAX_SIZE", $lng->txt("file_notice")." ".
 366              $this->getMaxFileSizeString());
 367              
 368          $a_tpl->setCurrentBlock("prop_generic");
 369          $a_tpl->setVariable("PROP_GENERIC", $template->get());
 370          $a_tpl->parseCurrentBlock();
 371  
 372          global $tpl;
 373          include_once  "./Services/YUI/classes/class.ilYuiUtil.php";
 374          ilYuiUtil::initDomEvent();
 375          $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/imagemap.js");
 376      }
 377  
 378  }

title

Description

title

Description

title

Description

title

title

Body