Search moodle.org's
Developer Documentation


  • Bug fixes for general core bugs in 2.8.x ended 9 November 2015 (12 months).
  • Bug fixes for security issues in 2.8.x ended 9 May 2016 (18 months).
  • minimum PHP 5.4.4 (always use latest PHP 5.4.x or 5.5.x on Windows - http://windows.php.net/download/), PHP 7 is NOT supported
  • Differences Between: [Versions 28 and 29] [Versions 28 and 30] [Versions 28 and 31] [Versions 28 and 32] [Versions 28 and 33] [Versions 28 and 34] [Versions 28 and 35] [Versions 28 and 36] [Versions 28 and 37]

       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: