Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.

Differences Between: [Versions 310 and 403] [Versions 311 and 403] [Versions 39 and 403] [Versions 400 and 403]

   1  <?php
   2  
   3  require_once('../../config.php');
   4  require_once ('lib.php');
   5  
   6  $id       = required_param('id', PARAM_INT);          // Entry ID
   7  $confirm  = optional_param('confirm', 0, PARAM_BOOL); // export confirmation
   8  $prevmode = required_param('prevmode', PARAM_ALPHA);
   9  $hook     = optional_param('hook', '', PARAM_CLEAN);
  10  
  11  $url = new moodle_url('/mod/glossary/exportentry.php', array('id'=>$id,'prevmode'=>$prevmode));
  12  if ($confirm !== 0) {
  13      $url->param('confirm', $confirm);
  14  }
  15  if ($hook !== 'ALL') {
  16      $url->param('hook', $hook);
  17  }
  18  $PAGE->set_url($url);
  19  
  20  if (!$entry = $DB->get_record('glossary_entries', array('id'=>$id))) {
  21      throw new \moodle_exception('invalidentry');
  22  }
  23  
  24  if ($entry->sourceglossaryid) {
  25      //already exported
  26      if (!$cm = get_coursemodule_from_id('glossary', $entry->sourceglossaryid)) {
  27          throw new \moodle_exception('invalidcoursemodule');
  28      }
  29      redirect('view.php?id='.$cm->id.'&amp;mode=entry&amp;hook='.$entry->id);
  30  }
  31  
  32  if (!$cm = get_coursemodule_from_instance('glossary', $entry->glossaryid)) {
  33      throw new \moodle_exception('invalidcoursemodule');
  34  }
  35  
  36  if (!$glossary = $DB->get_record('glossary', array('id'=>$cm->instance))) {
  37      throw new \moodle_exception('invalidid', 'glossary');
  38  }
  39  
  40  if (!$course = $DB->get_record('course', array('id'=>$cm->course))) {
  41      throw new \moodle_exception('coursemisconf');
  42  }
  43  
  44  require_course_login($course->id, true, $cm);
  45  $context = context_module::instance($cm->id);
  46  require_capability('mod/glossary:export', $context);
  47  
  48  $returnurl = "view.php?id=$cm->id&amp;mode=$prevmode&amp;hook=".urlencode($hook);
  49  
  50  if (!$mainglossary = $DB->get_record('glossary', array('course'=>$cm->course, 'mainglossary'=>1))) {
  51      //main glossary not present
  52      redirect($returnurl);
  53  }
  54  
  55  if (!$maincm = get_coursemodule_from_instance('glossary', $mainglossary->id)) {
  56      throw new \moodle_exception('invalidcoursemodule');
  57  }
  58  
  59  $context     = context_module::instance($cm->id);
  60  $maincontext = context_module::instance($maincm->id);
  61  
  62  if (!$course = $DB->get_record('course', array('id'=>$cm->course))) {
  63      throw new \moodle_exception('coursemisconf');
  64  }
  65  
  66  
  67  $strglossaries     = get_string('modulenameplural', 'glossary');
  68  $entryalreadyexist = get_string('entryalreadyexist','glossary');
  69  $entryexported     = get_string('entryexported','glossary');
  70  
  71  if (!$mainglossary->allowduplicatedentries) {
  72      if ($DB->record_exists_select('glossary_entries',
  73              'glossaryid = :glossaryid AND LOWER(concept) = :concept', array(
  74                  'glossaryid' => $mainglossary->id,
  75                  'concept'    => core_text::strtolower($entry->concept)))) {
  76          $PAGE->set_title($glossary->name);
  77          $PAGE->set_heading($course->fullname);
  78          echo $OUTPUT->header();
  79          echo $OUTPUT->notification(get_string('errconceptalreadyexists', 'glossary'));
  80          echo $OUTPUT->continue_button($returnurl);
  81          echo $OUTPUT->box_end();
  82          echo $OUTPUT->footer();
  83          die;
  84      }
  85  }
  86  
  87  if (!data_submitted() or !$confirm or !confirm_sesskey()) {
  88      $PAGE->set_title($glossary->name);
  89      $PAGE->set_heading($course->fullname);
  90      echo $OUTPUT->header();
  91      echo '<div class="boxaligncenter">';
  92      $areyousure = '<h2>'.format_string($entry->concept).'</h2><p align="center">'.get_string('areyousureexport','glossary').'<br /><b>'.format_string($mainglossary->name).'</b>?';
  93      $linkyes    = 'exportentry.php';
  94      $linkno     = 'view.php';
  95      $optionsyes = array('id'=>$entry->id, 'confirm'=>1, 'sesskey'=>sesskey(), 'prevmode'=>$prevmode, 'hook'=>$hook);
  96      $optionsno  = array('id'=>$cm->id, 'mode'=>$prevmode, 'hook'=>$hook);
  97  
  98      echo $OUTPUT->confirm($areyousure, new moodle_url($linkyes, $optionsyes), new moodle_url($linkno, $optionsno));
  99      echo '</div>';
 100      echo $OUTPUT->footer();
 101      die;
 102  
 103  } else {
 104      $entry->glossaryid       = $mainglossary->id;
 105      $entry->sourceglossaryid = $glossary->id;
 106  
 107      $DB->update_record('glossary_entries', $entry);
 108  
 109      // move attachments too
 110      $fs = get_file_storage();
 111  
 112      if ($oldfiles = $fs->get_area_files($context->id, 'mod_glossary', 'attachment', $entry->id)) {
 113          foreach ($oldfiles as $oldfile) {
 114              $file_record = new stdClass();
 115              $file_record->contextid = $maincontext->id;
 116              $fs->create_file_from_storedfile($file_record, $oldfile);
 117          }
 118          $fs->delete_area_files($context->id, 'mod_glossary', 'attachment', $entry->id);
 119          $entry->attachment = '1';
 120      } else {
 121          $entry->attachment = '0';
 122      }
 123      $DB->update_record('glossary_entries', $entry);
 124  
 125      redirect ($returnurl);
 126  }
 127