[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/mod/feedback/ -> complete_guest.php (source)

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * prints the form so an anonymous user can fill out the feedback on the mainsite
  19   *
  20   * @author Andreas Grabs
  21   * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  22   * @package mod_feedback
  23   */
  24  
  25  require_once("../../config.php");
  26  require_once ("lib.php");
  27  
  28  feedback_init_feedback_session();
  29  
  30  $id = required_param('id', PARAM_INT);
  31  $completedid = optional_param('completedid', false, PARAM_INT);
  32  $preservevalues  = optional_param('preservevalues', 0,  PARAM_INT);
  33  $courseid = optional_param('courseid', false, PARAM_INT);
  34  $gopage = optional_param('gopage', -1, PARAM_INT);
  35  $lastpage = optional_param('lastpage', false, PARAM_INT);
  36  $startitempos = optional_param('startitempos', 0, PARAM_INT);
  37  $lastitempos = optional_param('lastitempos', 0, PARAM_INT);
  38  
  39  $url = new moodle_url('/mod/feedback/complete_guest.php', array('id'=>$id));
  40  if ($completedid !== false) {
  41      $url->param('completedid', $completedid);
  42  }
  43  if ($preservevalues !== 0) {
  44      $url->param('preservevalues', $preservevalues);
  45  }
  46  if ($courseid !== false) {
  47      $url->param('courseid', $courseid);
  48  }
  49  if ($gopage !== -1) {
  50      $url->param('gopage', $gopage);
  51  }
  52  if ($lastpage !== false) {
  53      $url->param('lastpage', $lastpage);
  54  }
  55  if ($startitempos !== 0) {
  56      $url->param('startitempos', $startitempos);
  57  }
  58  if ($lastitempos !== 0) {
  59      $url->param('lastitempos', $lastitempos);
  60  }
  61  $PAGE->set_url($url);
  62  
  63  $highlightrequired = false;
  64  
  65  if (($formdata = data_submitted()) AND !confirm_sesskey()) {
  66      print_error('invalidsesskey');
  67  }
  68  
  69  //if the use hit enter into a textfield so the form should not submit
  70  if (isset($formdata->sesskey) AND
  71     !isset($formdata->savevalues) AND
  72     !isset($formdata->gonextpage) AND
  73     !isset($formdata->gopreviouspage)) {
  74  
  75      $gopage = (int) $formdata->lastpage;
  76  }
  77  if (isset($formdata->savevalues)) {
  78      $savevalues = true;
  79  } else {
  80      $savevalues = false;
  81  }
  82  
  83  if ($gopage < 0 AND !$savevalues) {
  84      if (isset($formdata->gonextpage)) {
  85          $gopage = $lastpage + 1;
  86          $gonextpage = true;
  87          $gopreviouspage = false;
  88      } else if (isset($formdata->gopreviouspage)) {
  89          $gopage = $lastpage - 1;
  90          $gonextpage = false;
  91          $gopreviouspage = true;
  92      } else {
  93          print_error('parameters_missing', 'feedback');
  94      }
  95  } else {
  96      $gonextpage = $gopreviouspage = false;
  97  }
  98  
  99  if (! $cm = get_coursemodule_from_id('feedback', $id)) {
 100      print_error('invalidcoursemodule');
 101  }
 102  
 103  if (! $course = $DB->get_record("course", array("id"=>$cm->course))) {
 104      print_error('coursemisconf');
 105  }
 106  
 107  if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) {
 108      print_error('invalidcoursemodule');
 109  }
 110  
 111  $context = context_module::instance($cm->id);
 112  
 113  $feedback_complete_cap = false;
 114  
 115  if (isset($CFG->feedback_allowfullanonymous)
 116              AND $CFG->feedback_allowfullanonymous
 117              AND $course->id == SITEID
 118              AND (!$courseid OR $courseid == SITEID)
 119              AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES ) {
 120      $feedback_complete_cap = true;
 121  }
 122  
 123  //check whether the feedback is anonymous
 124  if (isset($CFG->feedback_allowfullanonymous)
 125                  AND $CFG->feedback_allowfullanonymous
 126                  AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES
 127                  AND $course->id == SITEID ) {
 128      $feedback_complete_cap = true;
 129  }
 130  if ($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) {
 131      print_error('feedback_is_not_for_anonymous', 'feedback');
 132  }
 133  
 134  //check whether the user has a session
 135  // there used to be a sesskey test - this could not work - sorry
 136  
 137  //check whether the feedback is located and! started from the mainsite
 138  if ($course->id == SITEID AND !$courseid) {
 139      $courseid = SITEID;
 140  }
 141  
 142  require_course_login($course);
 143  
 144  if ($courseid AND $courseid != SITEID) {
 145      $course2 = $DB->get_record('course', array('id'=>$courseid));
 146      require_course_login($course2); //this overwrites the object $course :-(
 147      $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround
 148  }
 149  
 150  if (!$feedback_complete_cap) {
 151      print_error('error');
 152  }
 153  
 154  
 155  /// Print the page header
 156  $strfeedbacks = get_string("modulenameplural", "feedback");
 157  $strfeedback  = get_string("modulename", "feedback");
 158  
 159  $PAGE->set_cm($cm, $course); // set's up global $COURSE
 160  $PAGE->set_pagelayout('incourse');
 161  
 162  $urlparams = array('id'=>$course->id);
 163  $PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', $urlparams));
 164  $PAGE->navbar->add(format_string($feedback->name));
 165  $PAGE->set_heading($course->fullname);
 166  $PAGE->set_title($feedback->name);
 167  echo $OUTPUT->header();
 168  
 169  //ishidden check.
 170  //hidden feedbacks except feedbacks on mainsite are only accessible with related capabilities
 171  if ((empty($cm->visible) AND
 172          !has_capability('moodle/course:viewhiddenactivities', $context)) AND
 173          $course->id != SITEID) {
 174      notice(get_string("activityiscurrentlyhidden"));
 175  }
 176  
 177  //check, if the feedback is open (timeopen, timeclose)
 178  $checktime = time();
 179  
 180  $feedback_is_closed = ($feedback->timeopen > $checktime) ||
 181                        ($feedback->timeclose < $checktime &&
 182                              $feedback->timeclose > 0);
 183  
 184  if ($feedback_is_closed) {
 185      echo $OUTPUT->box_start('generalbox boxaligncenter');
 186      echo $OUTPUT->notification(get_string('feedback_is_not_open', 'feedback'));
 187      echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id);
 188      echo $OUTPUT->box_end();
 189      echo $OUTPUT->footer();
 190      exit;
 191  }
 192  
 193  //additional check for multiple-submit (prevent browsers back-button).
 194  //the main-check is in view.php
 195  $feedback_can_submit = true;
 196  if ($feedback->multiple_submit == 0 ) {
 197      if (feedback_is_already_submitted($feedback->id, $courseid)) {
 198          $feedback_can_submit = false;
 199      }
 200  }
 201  if ($feedback_can_submit) {
 202      //preserving the items
 203      if ($preservevalues == 1) {
 204          if (!$SESSION->feedback->is_started == true) {
 205              print_error('error', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id);
 206          }
 207          //check, if all required items have a value
 208          if (feedback_check_values($startitempos, $lastitempos)) {
 209              $userid = $USER->id; //arb
 210              if ($completedid = feedback_save_guest_values(sesskey())) {
 211                  //now it can be saved
 212                  if (!$gonextpage AND !$gopreviouspage) {
 213                      $preservevalues = false;
 214                  }
 215  
 216              } else {
 217                  $savereturn = 'failed';
 218                  if (isset($lastpage)) {
 219                      $gopage = $lastpage;
 220                  } else {
 221                      print_error('parameters_missing', 'feedback');
 222                  }
 223              }
 224          } else {
 225              $savereturn = 'missing';
 226              $highlightrequired = true;
 227              if (isset($lastpage)) {
 228                  $gopage = $lastpage;
 229              } else {
 230                  print_error('parameters_missing', 'feedback');
 231              }
 232          }
 233      }
 234  
 235      //saving the items
 236      if ($savevalues AND !$preservevalues) {
 237          //exists there any pagebreak, so there are values in the feedback_valuetmp
 238          //arb changed from 0 to $USER->id
 239          //no strict anonymous feedbacks
 240          //if it is a guest taking it then I want to know that it was
 241          //a guest (at least in the data saved in the feedback tables)
 242          $userid = $USER->id;
 243  
 244          $params = array('id'=>$completedid);
 245          $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', $params);
 246  
 247          //fake saving for switchrole
 248          $is_switchrole = feedback_check_is_switchrole();
 249          if ($is_switchrole) {
 250              $savereturn = 'saved';
 251              feedback_delete_completedtmp($completedid);
 252          } else {
 253              $new_completed_id = feedback_save_tmp_values($feedbackcompletedtmp, false, $userid);
 254              if ($new_completed_id) {
 255                  $savereturn = 'saved';
 256                  feedback_send_email_anonym($cm, $feedback, $course, $userid);
 257                  unset($SESSION->feedback->is_started);
 258  
 259              } else {
 260                  $savereturn = 'failed';
 261              }
 262          }
 263      }
 264  
 265      if ($allbreaks = feedback_get_all_break_positions($feedback->id)) {
 266          if ($gopage <= 0) {
 267              $startposition = 0;
 268          } else {
 269              if (!isset($allbreaks[$gopage - 1])) {
 270                  $gopage = count($allbreaks);
 271              }
 272              $startposition = $allbreaks[$gopage - 1];
 273          }
 274          $ispagebreak = true;
 275      } else {
 276          $startposition = 0;
 277          $newpage = 0;
 278          $ispagebreak = false;
 279      }
 280  
 281      //get the feedbackitems after the last shown pagebreak
 282      $select = 'feedback = ? AND position > ?';
 283      $params = array($feedback->id, $startposition);
 284      $feedbackitems = $DB->get_records_select('feedback_item', $select, $params, 'position');
 285  
 286      //get the first pagebreak
 287      $params = array('feedback'=>$feedback->id, 'typ'=>'pagebreak');
 288      if ($pagebreaks = $DB->get_records('feedback_item', $params, 'position')) {
 289          $pagebreaks = array_values($pagebreaks);
 290          $firstpagebreak = $pagebreaks[0];
 291      } else {
 292          $firstpagebreak = false;
 293      }
 294      $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id));
 295      $feedbackcompletedtmp = feedback_get_current_completed($feedback->id,
 296                                                             true,
 297                                                             $courseid,
 298                                                             sesskey());
 299  
 300      /// Print the main part of the page
 301      ///////////////////////////////////////////////////////////////////////////
 302      ///////////////////////////////////////////////////////////////////////////
 303      ///////////////////////////////////////////////////////////////////////////
 304      $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id));
 305      if ($courseid > 0) {
 306          $analysisurl->param('courseid', $courseid);
 307      }
 308      echo $OUTPUT->heading(format_text($feedback->name));
 309  
 310      if ( (intval($feedback->publish_stats) == 1) AND
 311              ( has_capability('mod/feedback:viewanalysepage', $context)) AND
 312              !( has_capability('mod/feedback:viewreports', $context)) ) {
 313          echo $OUTPUT->box_start('mdl-align');
 314          echo '<a href="'.$analysisurl->out().'">';
 315          echo get_string('completed_feedbacks', 'feedback');
 316          echo '</a>';
 317          echo $OUTPUT->box_end();
 318      }
 319  
 320      if (isset($savereturn) && $savereturn == 'saved') {
 321          if ($feedback->page_after_submit) {
 322              require_once($CFG->libdir . '/filelib.php');
 323  
 324              $page_after_submit_output = file_rewrite_pluginfile_urls($feedback->page_after_submit,
 325                                                                      'pluginfile.php',
 326                                                                      $context->id,
 327                                                                      'mod_feedback',
 328                                                                      'page_after_submit',
 329                                                                      0);
 330  
 331              echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
 332              echo format_text($page_after_submit_output,
 333                               $feedback->page_after_submitformat,
 334                               array('overflowdiv' => true));
 335              echo $OUTPUT->box_end();
 336          } else {
 337              echo '<p align="center"><b><font color="green">';
 338              echo get_string('entries_saved', 'feedback');
 339              echo '</font></b></p>';
 340              if ( intval($feedback->publish_stats) == 1) {
 341                  echo '<p align="center"><a href="'.$analysisurl->out().'">';
 342                  echo get_string('completed_feedbacks', 'feedback').'</a>';
 343                  echo '</p>';
 344              }
 345          }
 346          if ($feedback->site_after_submit) {
 347              $url = feedback_encode_target_url($feedback->site_after_submit);
 348          } else {
 349              if ($courseid) {
 350                  if ($courseid == SITEID) {
 351                      $url = $CFG->wwwroot;
 352                  } else {
 353                      $url = $CFG->wwwroot.'/course/view.php?id='.$courseid;
 354                  }
 355              } else {
 356                  if ($course->id == SITEID) {
 357                      $url = $CFG->wwwroot;
 358                  } else {
 359                      $url = $CFG->wwwroot.'/course/view.php?id='.$course->id;
 360                  }
 361              }
 362          }
 363          echo $OUTPUT->continue_button($url);
 364      } else {
 365          if (isset($savereturn) && $savereturn == 'failed') {
 366              echo $OUTPUT->box_start('mform');
 367              echo '<span class="error">'.get_string('saving_failed', 'feedback').'</span>';
 368              echo $OUTPUT->box_end();
 369          }
 370  
 371          if (isset($savereturn) && $savereturn == 'missing') {
 372              echo $OUTPUT->box_start('mform');
 373              echo '<span class="error">'.get_string('saving_failed_because_missing_or_false_values', 'feedback').'</span>';
 374              echo $OUTPUT->box_end();
 375          }
 376  
 377          //print the items
 378          if (is_array($feedbackitems)) {
 379              echo $OUTPUT->box_start('feedback_form');
 380              echo '<form action="complete_guest.php" class="mform" method="post" onsubmit=" ">';
 381              echo '<fieldset>';
 382              echo '<input type="hidden" name="anonymous" value="0" />';
 383              $inputvalue = 'value="'.FEEDBACK_ANONYMOUS_YES.'"';
 384              echo '<input type="hidden" name="anonymous_response" '.$inputvalue.' />';
 385              echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
 386              //check, if there exists required-elements
 387              $params = array('feedback'=>$feedback->id, 'required'=>1);
 388              $countreq = $DB->count_records('feedback_item', $params);
 389              if ($countreq > 0) {
 390                  echo '<div class="fdescription required">';
 391                  echo get_string('somefieldsrequired', 'form', '<img alt="'.get_string('requiredelement', 'form').
 392                      '" src="'.$OUTPUT->pix_url('req') .'" class="req" />');
 393                  echo '</div>';
 394              }
 395              echo $OUTPUT->box_start('feedback_items');
 396  
 397              $startitem = null;
 398              $select = 'feedback = ? AND hasvalue = 1 AND position < ?';
 399              $params = array($feedback->id, $startposition);
 400              $itemnr = $DB->count_records_select('feedback_item', $select, $params);
 401              $lastbreakposition = 0;
 402              $align = right_to_left() ? 'right' : 'left';
 403  
 404              foreach ($feedbackitems as $feedbackitem) {
 405                  if (!isset($startitem)) {
 406                      //avoid showing double pagebreaks
 407                      if ($feedbackitem->typ == 'pagebreak') {
 408                          continue;
 409                      }
 410                      $startitem = $feedbackitem;
 411                  }
 412  
 413                  if ($feedbackitem->dependitem > 0) {
 414                      //chech if the conditions are ok
 415                      $fb_compare_value = feedback_compare_item_value($feedbackcompletedtmp->id,
 416                                                                      $feedbackitem->dependitem,
 417                                                                      $feedbackitem->dependvalue,
 418                                                                      true);
 419                      if (!isset($feedbackcompletedtmp->id) OR !$fb_compare_value) {
 420                          $lastitem = $feedbackitem;
 421                          $lastbreakposition = $feedbackitem->position;
 422                          continue;
 423                      }
 424                  }
 425  
 426                  if ($feedbackitem->dependitem > 0) {
 427                      $dependstyle = ' feedback_complete_depend';
 428                  } else {
 429                      $dependstyle = '';
 430                  }
 431  
 432                  echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle);
 433                  $value = '';
 434                  //get the value
 435                  $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id;
 436                  if (isset($savereturn)) {
 437                      $value = isset($formdata->{$frmvaluename}) ? $formdata->{$frmvaluename} : null;
 438                      $value = feedback_clean_input_value($feedbackitem, $value);
 439                  } else {
 440                      if (isset($feedbackcompletedtmp->id)) {
 441                          $value = feedback_get_item_value($feedbackcompletedtmp->id,
 442                                                           $feedbackitem->id,
 443                                                           sesskey());
 444                      }
 445                  }
 446                  if ($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) {
 447                      $itemnr++;
 448                      echo $OUTPUT->box_start('feedback_item_number_'.$align);
 449                      echo $itemnr;
 450                      echo $OUTPUT->box_end();
 451                  }
 452                  if ($feedbackitem->typ != 'pagebreak') {
 453                      echo $OUTPUT->box_start('box generalbox boxalign_'.$align);
 454                      feedback_print_item_complete($feedbackitem, $value, $highlightrequired);
 455                      echo $OUTPUT->box_end();
 456                  }
 457  
 458                  echo $OUTPUT->box_end();
 459  
 460                  $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak)
 461                  if ($feedbackitem->typ == 'pagebreak') {
 462                      break;
 463                  } else {
 464                      $lastitem = $feedbackitem;
 465                  }
 466              }
 467              echo $OUTPUT->box_end();
 468              echo '<input type="hidden" name="id" value="'.$id.'" />';
 469              echo '<input type="hidden" name="feedbackid" value="'.$feedback->id.'" />';
 470              echo '<input type="hidden" name="lastpage" value="'.$gopage.'" />';
 471              if (isset($feedbackcompletedtmp->id)) {
 472                  $inputvalue = 'value="'.$feedbackcompletedtmp->id;
 473              } else {
 474                  $inputvalue = 'value=""';
 475              }
 476              echo '<input type="hidden" name="completedid" '.$inputvalue.' />';
 477              echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
 478              echo '<input type="hidden" name="preservevalues" value="1" />';
 479              if (isset($startitem)) {
 480                  echo '<input type="hidden" name="startitempos" value="'.$startitem->position.'" />';
 481                  echo '<input type="hidden" name="lastitempos" value="'.$lastitem->position.'" />';
 482              }
 483  
 484              if ($ispagebreak AND $lastbreakposition > $firstpagebreak->position) {
 485                  $inputvalue = 'value="'.get_string('previous_page', 'feedback').'"';
 486                  echo '<input name="gopreviouspage" type="submit" '.$inputvalue.' />';
 487              }
 488              if ($lastbreakposition < $maxitemcount) {
 489                  $inputvalue = 'value="'.get_string('next_page', 'feedback').'"';
 490                  echo '<input name="gonextpage" type="submit" '.$inputvalue.' />';
 491              }
 492              if ($lastbreakposition >= $maxitemcount) { //last page
 493                  $inputvalue = 'value="'.get_string('save_entries', 'feedback').'"';
 494                  echo '<input name="savevalues" type="submit" '.$inputvalue.' />';
 495              }
 496  
 497              echo '</form>';
 498              echo $OUTPUT->box_end();
 499  
 500              echo $OUTPUT->box_start('feedback_complete_cancel');
 501              if ($courseid) {
 502                  $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'"';
 503              } else {
 504                  if ($course->id == SITEID) {
 505                      $action = 'action="'.$CFG->wwwroot.'"';
 506                  } else {
 507                      $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'"';
 508                  }
 509              }
 510              echo '<form '.$action.' method="post" onsubmit=" ">';
 511              echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
 512              echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
 513              echo '<button type="submit">'.get_string('cancel').'</button>';
 514              echo '</form>';
 515              echo $OUTPUT->box_end();
 516              $SESSION->feedback->is_started = true;
 517          }
 518      }
 519  } else {
 520      echo $OUTPUT->box_start('generalbox boxaligncenter');
 521      echo $OUTPUT->notification(get_string('this_feedback_is_already_submitted', 'feedback'));
 522      echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id);
 523      echo $OUTPUT->box_end();
 524  }
 525  /// Finish the page
 526  ///////////////////////////////////////////////////////////////////////////
 527  ///////////////////////////////////////////////////////////////////////////
 528  ///////////////////////////////////////////////////////////////////////////
 529  
 530  echo $OUTPUT->footer();
 531  


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1