Search moodle.org's
Developer Documentation

   1  <?php
   2  
   3  // This file is part of Moodle - http://moodle.org/
   4  //
   5  // Moodle is free software: you can redistribute it and/or modify
   6  // it under the terms of the GNU General Public License as published by
   7  // the Free Software Foundation, either version 3 of the License, or
   8  // (at your option) any later version.
   9  //
  10  // Moodle is distributed in the hope that it will be useful,
  11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13  // GNU General Public License for more details.
  14  //
  15  // You should have received a copy of the GNU General Public License
  16  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  17  
  18  /**
  19   * This file is part of the Database module for Moodle
  20   *
  21   * @copyright 2005 Martin Dougiamas  http://dougiamas.com
  22   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   * @package mod_data
  24   */
  25  
  26  require_once('../../config.php');
  27  require_once ('lib.php');
  28  
  29  $id    = optional_param('id', 0, PARAM_INT);  // course module id
  30  $d     = optional_param('d', 0, PARAM_INT);   // database id
  31  $mode  = optional_param('mode', 'singletemplate', PARAM_ALPHA);
  32  $disableeditor = optional_param('switcheditor', false, PARAM_RAW);
  33  $enableeditor = optional_param('useeditor', false, PARAM_RAW);
  34  
  35  $url = new moodle_url('/mod/data/templates.php');
  36  if ($mode !== 'singletemplate') {
  37      $url->param('mode', $mode);
  38  }
  39  
  40  if ($id) {
  41      $url->param('id', $id);
  42      $PAGE->set_url($url);
  43      if (! $cm = get_coursemodule_from_id('data', $id)) {
  44          print_error('invalidcoursemodule');
  45      }
  46      if (! $course = $DB->get_record('course', array('id'=>$cm->course))) {
  47          print_error('coursemisconf');
  48      }
  49      if (! $data = $DB->get_record('data', array('id'=>$cm->instance))) {
  50          print_error('invalidcoursemodule');
  51      }
  52  
  53  } else {
  54      $url->param('d', $d);
  55      $PAGE->set_url($url);
  56      if (! $data = $DB->get_record('data', array('id'=>$d))) {
  57          print_error('invalidid', 'data');
  58      }
  59      if (! $course = $DB->get_record('course', array('id'=>$data->course))) {
  60          print_error('coursemisconf');
  61      }
  62      if (! $cm = get_coursemodule_from_instance('data', $data->id, $course->id)) {
  63          print_error('invalidcoursemodule');
  64      }
  65  }
  66  
  67  require_login($course, false, $cm);
  68  
  69  $context = context_module::instance($cm->id);
  70  require_capability('mod/data:managetemplates', $context);
  71  
  72  if (!$DB->count_records('data_fields', array('dataid'=>$data->id))) {      // Brand new database!
  73      redirect($CFG->wwwroot.'/mod/data/field.php?d='.$data->id);  // Redirect to field entry
  74  }
  75  
  76  // Trigger an event for viewing templates.
  77  $event = \mod_data\event\template_viewed::create(array(
  78      'context' => $context,
  79      'courseid' => $course->id,
  80      'other' => array(
  81          'dataid' => $data->id
  82      )
  83  ));
  84  $event->add_record_snapshot('data', $data);
  85  $event->trigger();
  86  
  87  /// Print the page header
  88  
  89  $strdata = get_string('modulenameplural','data');
  90  
  91  // For the javascript for inserting template tags: initialise the default textarea to
  92  // 'edit_template' - it is always present in all different possible views.
  93  
  94  if ($mode == 'singletemplate') {
  95      $PAGE->navbar->add(get_string($mode,'data'));
  96  }
  97  
  98  $PAGE->requires->js('/mod/data/data.js');
  99  $PAGE->set_title($data->name);
 100  $PAGE->set_heading($course->fullname);
 101  $PAGE->set_pagelayout('admin');
 102  echo $OUTPUT->header();
 103  echo $OUTPUT->heading(format_string($data->name), 2);
 104  echo $OUTPUT->box(format_module_intro('data', $data, $cm->id), 'generalbox', 'intro');
 105  
 106  /// Groups needed for Add entry tab
 107  $currentgroup = groups_get_activity_group($cm);
 108  $groupmode = groups_get_activity_groupmode($cm);
 109  
 110  /// Print the tabs.
 111  $currenttab = 'templates';
 112  include ('tabs.php');
 113  
 114  /// Processing submitted data, i.e updating form.
 115  $resettemplate = false;
 116  
 117  if (($mytemplate = data_submitted()) && confirm_sesskey()) {
 118      $newtemplate = new stdClass();
 119      $newtemplate->id = $data->id;
 120      $newtemplate->{$mode} = $mytemplate->template;
 121  
 122      if (!empty($mytemplate->defaultform)) {
 123          // Reset the template to default, but don't save yet.
 124          $resettemplate = true;
 125          $data->{$mode} = data_generate_default_template($data, $mode, 0, false, false);
 126          if ($mode == 'listtemplate') {
 127              $data->listtemplateheader = '';
 128              $data->listtemplatefooter = '';
 129          }
 130      } else {
 131          if (isset($mytemplate->listtemplateheader)){
 132              $newtemplate->listtemplateheader = $mytemplate->listtemplateheader;
 133          }
 134          if (isset($mytemplate->listtemplatefooter)){
 135              $newtemplate->listtemplatefooter = $mytemplate->listtemplatefooter;
 136          }
 137          if (isset($mytemplate->rsstitletemplate)){
 138              $newtemplate->rsstitletemplate = $mytemplate->rsstitletemplate;
 139          }
 140  
 141          // Check for multiple tags, only need to check for add template.
 142          if ($mode != 'addtemplate' or data_tags_check($data->id, $newtemplate->{$mode})) {
 143              // if disableeditor or enableeditor buttons click, don't save instance
 144              if (empty($disableeditor) && empty($enableeditor)) {
 145                  $DB->update_record('data', $newtemplate);
 146                  echo $OUTPUT->notification(get_string('templatesaved', 'data'), 'notifysuccess');
 147  
 148                  // Trigger an event for saving the templates.
 149                  $event = \mod_data\event\template_updated::create(array(
 150                      'context' => $context,
 151                      'courseid' => $course->id,
 152                      'other' => array(
 153                          'dataid' => $data->id,
 154                      )
 155                  ));
 156                  $event->trigger();
 157              }
 158          }
 159      }
 160  } else {
 161      echo '<div class="template_heading">'.get_string('header'.$mode,'data').'</div>';
 162  }
 163  
 164  /// If everything is empty then generate some defaults
 165  if (empty($data->addtemplate) and empty($data->singletemplate) and
 166      empty($data->listtemplate) and empty($data->rsstemplate)) {
 167      data_generate_default_template($data, 'singletemplate');
 168      data_generate_default_template($data, 'listtemplate');
 169      data_generate_default_template($data, 'addtemplate');
 170      data_generate_default_template($data, 'asearchtemplate');           //Template for advanced searches.
 171      data_generate_default_template($data, 'rsstemplate');
 172  }
 173  
 174  editors_head_setup();
 175  $format = FORMAT_HTML;
 176  
 177  if ($mode === 'csstemplate' or $mode === 'jstemplate') {
 178      $disableeditor = true;
 179  }
 180  
 181  if ($disableeditor) {
 182      $format = FORMAT_PLAIN;
 183  }
 184  $editor = editors_get_preferred_editor($format);
 185  $strformats = format_text_menu();
 186  $formats =  $editor->get_supported_formats();
 187  foreach ($formats as $fid) {
 188      $formats[$fid] = $strformats[$fid];
 189  }
 190  $options = array();
 191  $options['trusttext'] = false;
 192  $options['forcehttps'] = false;
 193  $options['subdirs'] = false;
 194  $options['maxfiles'] = 0;
 195  $options['maxbytes'] = 0;
 196  $options['changeformat'] = 0;
 197  $options['noclean'] = false;
 198  
 199  echo '<form id="tempform" action="templates.php?d='.$data->id.'&amp;mode='.$mode.'" method="post">';
 200  echo '<div>';
 201  echo '<input name="sesskey" value="'.sesskey().'" type="hidden" />';
 202  // Print button to autogen all forms, if all templates are empty
 203  
 204  if (!$resettemplate) {
 205      // Only reload if we are not resetting the template to default.
 206      $data = $DB->get_record('data', array('id'=>$d));
 207  }
 208  echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
 209  echo '<table cellpadding="4" cellspacing="0" border="0">';
 210  
 211  /// Add the HTML editor(s).
 212  $usehtmleditor = ($mode != 'csstemplate') && ($mode != 'jstemplate') && !$disableeditor;
 213  if ($mode == 'listtemplate'){
 214      // Print the list template header.
 215      echo '<tr>';
 216      echo '<td>&nbsp;</td>';
 217      echo '<td>';
 218      echo '<div class="template_heading"><label for="edit-listtemplateheader">'.get_string('header','data').'</label></div>';
 219  
 220      $field = 'listtemplateheader';
 221      $editor->set_text($data->listtemplateheader);
 222      $editor->use_editor($field, $options);
 223      echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->listtemplateheader).'</textarea></div>';
 224  
 225      echo '</td>';
 226      echo '</tr>';
 227  }
 228  
 229  // Print the main template.
 230  
 231  echo '<tr><td valign="top">';
 232  if ($mode != 'csstemplate' and $mode != 'jstemplate') {
 233      // Add all the available fields for this data.
 234      echo '<label for="availabletags">'.get_string('availabletags','data').'</label>';
 235      echo $OUTPUT->help_icon('availabletags', 'data');
 236      echo '<br />';
 237  
 238      echo '<div class="no-overflow" id="availabletags_wrapper">';
 239      echo '<select name="fields1[]" id="availabletags" size="12" onclick="insert_field_tags(this)">';
 240  
 241      $fields = $DB->get_records('data_fields', array('dataid'=>$data->id));
 242      echo '<optgroup label="'.get_string('fields', 'data').'">';
 243      foreach ($fields as $field) {
 244          echo '<option value="[['.$field->name.']]" title="'.$field->description.'">'.$field->name.' - [['.$field->name.']]</option>';
 245      }
 246      echo '</optgroup>';
 247  
 248      if ($mode == 'addtemplate') {
 249          echo '<optgroup label="'.get_string('fieldids', 'data').'">';
 250          foreach ($fields as $field) {
 251              if (in_array($field->type, array('picture', 'checkbox', 'date', 'latlong', 'radiobutton'))) {
 252                  continue; //ids are not usable for these composed items
 253              }
 254              echo '<option value="[['.$field->name.'#id]]" title="'.$field->description.' id">'.$field->name.' id - [['.$field->name.'#id]]</option>';
 255          }
 256          echo '</optgroup>';
 257      }
 258  
 259      // Print special tags. fix for MDL-7031
 260      if ($mode != 'addtemplate' && $mode != 'asearchtemplate') {             //Don't print special tags when viewing the advanced search template and add template.
 261          echo '<optgroup label="'.get_string('buttons', 'data').'">';
 262          echo '<option value="##edit##">' .get_string('edit', 'data'). ' - ##edit##</option>';
 263          echo '<option value="##delete##">' .get_string('delete', 'data'). ' - ##delete##</option>';
 264          echo '<option value="##approve##">' .get_string('approve', 'data'). ' - ##approve##</option>';
 265          echo '<option value="##disapprove##">' .get_string('disapprove', 'data'). ' - ##disapprove##</option>';
 266          if ($mode != 'rsstemplate') {
 267              echo '<option value="##export##">' .get_string('export', 'data'). ' - ##export##</option>';
 268          }
 269          if ($mode != 'singletemplate') {
 270              // more points to single template - not useable there
 271              echo '<option value="##more##">' .get_string('more', 'data'). ' - ##more##</option>';
 272              echo '<option value="##moreurl##">' .get_string('moreurl', 'data'). ' - ##moreurl##</option>';
 273              echo '<option value="##delcheck##">' .get_string('delcheck', 'data'). ' - ##delcheck##</option>';
 274          }
 275          echo '</optgroup>';
 276          echo '<optgroup label="'.get_string('other', 'data').'">';
 277          echo '<option value="##timeadded##">'.get_string('timeadded', 'data'). ' - ##timeadded##</option>';
 278          echo '<option value="##timemodified##">'.get_string('timemodified', 'data'). ' - ##timemodified##</option>';
 279          echo '<option value="##user##">' .get_string('user'). ' - ##user##</option>';
 280          if ($mode != 'singletemplate') {
 281              // more points to single template - not useable there
 282              echo '<option value="##comments##">' .get_string('comments', 'data'). ' - ##comments##</option>';
 283          }
 284          echo '</optgroup>';
 285      }
 286  
 287      if ($mode == 'asearchtemplate') {
 288          echo '<optgroup label="'.get_string('other', 'data').'">';
 289          echo '<option value="##firstname##">' .get_string('authorfirstname', 'data'). ' - ##firstname##</option>';
 290          echo '<option value="##lastname##">' .get_string('authorlastname', 'data'). ' - ##lastname##</option>';
 291          echo '</optgroup>';
 292      }
 293  
 294      echo '</select>';
 295      echo '</div>';
 296      echo '<br /><br /><br /><br /><input type="submit" name="defaultform" value="'.get_string('resettemplate','data').'" />';
 297      echo '<br /><br />';
 298      if ($usehtmleditor) {
 299          $switcheditor = get_string('editordisable', 'data');
 300          echo '<input type="submit" name="switcheditor" value="'.s($switcheditor).'" />';
 301      } else {
 302          $switcheditor = get_string('editorenable', 'data');
 303          echo '<input type="submit" name="useeditor" value="'.s($switcheditor).'" />';
 304      }
 305  } else {
 306      echo '<br /><br /><br /><br /><input type="submit" name="defaultform" value="'.get_string('resettemplate','data').'" />';
 307  }
 308  echo '</td>';
 309  
 310  echo '<td valign="top">';
 311  if ($mode == 'listtemplate'){
 312      echo '<div class="template_heading"><label for="edit-template">'.get_string('multientry','data').'</label></div>';
 313  } else {
 314      echo '<div class="template_heading"><label for="edit-template">'.get_string($mode,'data').'</label></div>';
 315  }
 316  
 317  $field = 'template';
 318  $editor->set_text($data->{$mode});
 319  $editor->use_editor($field, $options);
 320  echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->{$mode}).'</textarea></div>';
 321  echo '</td>';
 322  echo '</tr>';
 323  
 324  if ($mode == 'listtemplate'){
 325      echo '<tr>';
 326      echo '<td>&nbsp;</td>';
 327      echo '<td>';
 328      echo '<div class="template_heading"><label for="edit-listtemplatefooter">'.get_string('footer','data').'</label></div>';
 329  
 330      $field = 'listtemplatefooter';
 331      $editor->set_text($data->listtemplatefooter);
 332      $editor->use_editor($field, $options);
 333      echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->listtemplatefooter).'</textarea></div>';
 334      echo '</td>';
 335      echo '</tr>';
 336  } else if ($mode == 'rsstemplate') {
 337      echo '<tr>';
 338      echo '<td>&nbsp;</td>';
 339      echo '<td>';
 340      echo '<div class="template_heading"><label for="edit-rsstitletemplate">'.get_string('rsstitletemplate','data').'</label></div>';
 341  
 342      $field = 'rsstitletemplate';
 343      $editor->set_text($data->rsstitletemplate);
 344      $editor->use_editor($field, $options);
 345      echo '<div><textarea id="'.$field.'" name="'.$field.'" rows="15" cols="80">'.s($data->rsstitletemplate).'</textarea></div>';
 346      echo '</td>';
 347      echo '</tr>';
 348  }
 349  
 350  echo '<tr><td class="save_template" colspan="2">';
 351  echo '<input type="submit" value="'.get_string('savetemplate','data').'" />&nbsp;';
 352  
 353  echo '</td></tr></table>';
 354  
 355  
 356  echo $OUTPUT->box_end();
 357  echo '</div>';
 358  echo '</form>';
 359  
 360  /// Finish the page
 361  echo $OUTPUT->footer();

Search This Site: