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 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  // 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   * This file contains all the form definitions used by the portfolio code.
      19   *
      20   * @package core_portfolio
      21   * @copyright 2008 Penny Leach <penny@catalyst.net.nz>,
      22   *            Martin Dougiamas (http://dougiamas.com)
      23   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
      24   */
      25  
      26  defined('MOODLE_INTERNAL') || die();
      27  
      28  // make sure we include moodleform first!
      29  require_once ($CFG->libdir.'/formslib.php');
      30  
      31  /**
      32   * During-export config form.
      33   *
      34   * This is the form that is actually used while exporting.
      35   * Plugins and callers don't get to define their own class
      36   * as we have to handle form elements from both places
      37   * See the docs here for more information:
      38   * http://docs.moodle.org/dev/Writing_a_Portfolio_Plugin#has_export_config
      39   * http://docs.moodle.org/dev/Adding_a_Portfolio_Button_to_a_page#has_export_config
      40   *
      41   * @package core_portfolio
      42   * @category portfolio
      43   * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
      44   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
      45   */
      46  final class portfolio_export_form extends moodleform {
      47  
      48      /**
      49       * prepare form
      50       */
      51      public function definition() {
      52  
      53          $mform =& $this->_form;
      54          $mform->addElement('hidden', 'stage', PORTFOLIO_STAGE_CONFIG);
      55          $mform->addElement('hidden', 'id', $this->_customdata['id']);
      56          $mform->addElement('hidden', 'instance', $this->_customdata['instance']->get('id'));
      57          $mform->setType('instance', PARAM_INT);
      58          $mform->setType('stage', PARAM_INT);
      59          $mform->setType('id', PARAM_INT);
      60  
      61          if (array_key_exists('formats', $this->_customdata) && is_array($this->_customdata['formats'])) {
      62              if (count($this->_customdata['formats']) > 1) {
      63                  $options = array();
      64                  foreach ($this->_customdata['formats'] as $key) {
      65                      $options[$key] = get_string('format_' . $key, 'portfolio');
      66                  }
      67                  $mform->addElement('select', 'format', get_string('availableformats', 'portfolio'), $options);
      68              } else {
      69                  $f = array_shift($this->_customdata['formats']);
      70                  $mform->addElement('hidden', 'format', $f);
      71                  $mform->setType('format', PARAM_RAW);
      72              }
      73          }
      74  
      75          // only display the option to wait or not if it's applicable
      76          if (array_key_exists('expectedtime', $this->_customdata)
      77              && $this->_customdata['expectedtime'] != PORTFOLIO_TIME_LOW
      78              && $this->_customdata['expectedtime'] != PORTFOLIO_TIME_FORCEQUEUE) {
      79              $radioarray = array();
      80              $radioarray[] = $mform->createElement('radio', 'wait', '', get_string('wait', 'portfolio'), 1);
      81              $radioarray[] = $mform->createElement('radio', 'wait', '', get_string('dontwait', 'portfolio'),  0);
      82              $mform->addGroup($radioarray, 'radioar', get_string('wanttowait_' . $this->_customdata['expectedtime'], 'portfolio') , array(' '), false);
      83              $mform->setDefault('wait', 0);
      84          } else {
      85              if ($this->_customdata['expectedtime'] == PORTFOLIO_TIME_LOW) {
      86                  $mform->addElement('hidden', 'wait', 1);
      87              } else {
      88                  $mform->addElement('hidden', 'wait', 0);
      89              }
      90              $mform->setType('wait', PARAM_INT);
      91          }
      92  
      93          if (array_key_exists('plugin', $this->_customdata) && is_object($this->_customdata['plugin'])) {
      94              $this->_customdata['plugin']->export_config_form($mform, $this->_customdata['userid']);
      95          }
      96  
      97          if (array_key_exists('caller', $this->_customdata) && is_object($this->_customdata['caller'])) {
      98              $this->_customdata['caller']->export_config_form($mform, $this->_customdata['instance'], $this->_customdata['userid']);
      99          }
     100  
     101          $this->add_action_buttons(true, get_string('next'));
     102      }
     103  
     104      /**
     105       * Validate portfolio export form
     106       *
     107       * @param stdClass $data portfolio information from form data
     108       * @return array
     109       */
     110      public function validation($data, $files) {
     111  
     112          $errors = array();
     113  
     114          if (array_key_exists('plugin', $this->_customdata) && is_object($this->_customdata['plugin'])) {
     115              $pluginerrors = $this->_customdata['plugin']->export_config_validation($data);
     116              if (is_array($pluginerrors)) {
     117                  $errors = $pluginerrors;
     118              }
     119          }
     120          if (array_key_exists('caller', $this->_customdata) && is_object($this->_customdata['caller'])) {
     121              $callererrors = $this->_customdata['caller']->export_config_validation($data);
     122              if (is_array($callererrors)) {
     123                  $errors = array_merge($errors, $callererrors);
     124              }
     125          }
     126          return $errors;
     127      }
     128  }
     129  
     130  /**
     131   * Admin config form.
     132   *
     133   * This form is extendable by plugins who want the admin to be able to configure more than just the name of the instance.
     134   * This is NOT done by subclassing this class, see the docs for portfolio_plugin_base for more information:
     135   * {@link http://docs.moodle.org/dev/Writing_a_Portfolio_Plugin#has_admin_config}
     136   *
     137   * @package core_portfolio
     138   * @category portfolio
     139   * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
     140   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
     141   */
     142  final class portfolio_admin_form extends moodleform {
     143  
     144      /** @var object to hold porfolio instance configuration */
     145      protected $instance;
     146  
     147      /** @var string plugin name*/
     148      protected $plugin;
     149  
     150      /** @var string portfolio plugin name*/
     151      protected $portfolio;
     152  
     153      /** @var string plugin availability*/
     154      protected $action;
     155  
     156      /** @var int portfolio plugin visibility*/
     157      protected $visible;
     158  
     159      /**
     160       * prepare form
     161       */
     162      public function definition() {
     163          global $CFG;
     164          $this->plugin = $this->_customdata['plugin'];
     165          $this->instance = (isset($this->_customdata['instance'])
     166                  && is_subclass_of($this->_customdata['instance'], 'portfolio_plugin_base'))
     167              ? $this->_customdata['instance'] : null;
     168          $this->portfolio = $this->_customdata['portfolio'];
     169          $this->action = $this->_customdata['action'];
     170          $this->visible = $this->_customdata['visible'];
     171  
     172          $mform =& $this->_form;
     173          $strrequired = get_string('required');
     174  
     175          $mform->addElement('hidden', 'pf', $this->portfolio);
     176          $mform->setType('pf', PARAM_ALPHA);
     177          $mform->addElement('hidden', 'action', $this->action);
     178          $mform->setType('action', PARAM_ALPHA);
     179          $mform->addElement('hidden', 'visible', $this->visible);
     180          $mform->setType('visible', PARAM_INT);
     181          $mform->addElement('hidden', 'plugin', $this->plugin);
     182          $mform->setType('plugin', PARAM_PLUGIN);
     183  
     184          if (!$this->instance) {
     185              $insane = portfolio_instance_sanity_check($this->instance);
     186          } else {
     187              $insane = portfolio_plugin_sanity_check($this->plugin);
     188          }
     189  
     190          if (isset($insane) && is_array($insane)) {
     191              $insane = array_shift($insane);
     192          }
     193          if (isset($insane) && is_string($insane)) { // something went wrong, warn...
     194              $mform->addElement('warning', 'insane', null, get_string($insane, 'portfolio_' . $this->plugin));
     195          }
     196  
     197          $mform->addElement('text', 'name', get_string('name'), 'maxlength="100" size="30"');
     198          $mform->addRule('name', $strrequired, 'required', null, 'client');
     199          $mform->setType('name', PARAM_TEXT);
     200  
     201          // let the plugin add the fields they want (either statically or not)
     202          if (portfolio_static_function($this->plugin, 'has_admin_config')) {
     203              require_once($CFG->libdir . '/portfolio/plugin.php');
     204              require_once($CFG->dirroot . '/portfolio/' . $this->plugin .  '/lib.php');
     205              call_user_func(array('portfolio_plugin_' . $this->plugin, 'admin_config_form'), $mform);
     206          }
     207  
     208          // and set the data if we have some.
     209          if ($this->instance) {
     210              $data = array('name' => $this->instance->get('name'));
     211              foreach ($this->instance->get_allowed_config() as $config) {
     212                  $data[$config] = $this->instance->get_config($config);
     213              }
     214              $this->set_data($data);
     215          } else {
     216              $this->set_data(array('name' => portfolio_static_function($this->plugin, 'get_name')));
     217          }
     218  
     219          $this->add_action_buttons(true, get_string('save', 'portfolio'));
     220      }
     221  
     222      /**
     223       * Validate admin config form
     224       *
     225       * @param stdObject $data form data
     226       * @return array
     227       */
     228      public function validation($data, $files) {
     229          global $DB;
     230  
     231          $errors = array();
     232          if ($DB->count_records('portfolio_instance', array('name' => $data['name'], 'plugin' => $data['plugin'])) > 1) {
     233              $errors = array('name' => get_string('err_uniquename', 'portfolio'));
     234          }
     235  
     236          $pluginerrors = array();
     237          $pluginerrors = portfolio_static_function($this->plugin, 'admin_config_validation', $data);
     238          if (is_array($pluginerrors)) {
     239              $errors = array_merge($errors, $pluginerrors);
     240          }
     241          return $errors;
     242      }
     243  }
     244  
     245  /**
     246   * User config form.
     247   *
     248   * This is the form for letting the user configure an instance of a plugin.
     249   * In order to extend this, you don't subclass this in the plugin..
     250   * see the docs in portfolio_plugin_base for more information:
     251   * {@link http://docs.moodle.org/dev/Writing_a_Portfolio_Plugin#has_user_config}
     252   *
     253   * @package core_portfolio
     254   * @category portfolio
     255   * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
     256   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
     257   */
     258  final class portfolio_user_form extends moodleform {
     259  
     260      /** @var object  user porfolio instance */
     261      protected $instance;
     262  
     263      /** @var int hold user id */
     264      protected $userid;
     265  
     266      /**
     267       * prepare form
     268       */
     269      public function definition() {
     270          $this->instance = $this->_customdata['instance'];
     271          $this->userid = $this->_customdata['userid'];
     272  
     273          $this->_form->addElement('hidden', 'config', $this->instance->get('id'));
     274          $this->_form->setType('config', PARAM_INT);
     275  
     276          $this->instance->user_config_form($this->_form, $this->userid);
     277  
     278          $data = array();
     279          foreach ($this->instance->get_allowed_user_config() as $config) {
     280              $data[$config] = $this->instance->get_user_config($config, $this->userid);
     281          }
     282          $this->set_data($data);
     283          $this->add_action_buttons(true, get_string('save', 'portfolio'));
     284      }
     285  
     286      /**
     287       * User user config form.
     288       *
     289       * @param stdClass $data form data
     290       */
     291      public function validation($data, $files) {
     292  
     293          $errors = $this->instance->user_config_validation($data);
     294  
     295      }
     296  }
     297  
     298  
     299  /**
     300   * Form that just contains the dropdown menu of available instances.
     301   *
     302   * This is not used by portfolio_add_button, but on the first step of the export,
     303   * if the plugin instance has not yet been selected.
     304   *
     305   * @package core_portfolio
     306   * @category portfolio
     307   * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
     308   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
     309   */
     310  class portfolio_instance_select extends moodleform {
     311  
     312      /** @var portfolio_caller_base plugin instance */
     313      private $caller;
     314  
     315      /**
     316       * The required basic elements to the form.
     317       */
     318      function definition() {
     319          $this->caller = $this->_customdata['caller'];
     320          $options = $this->_customdata['options'];
     321          $mform =& $this->_form;
     322          $mform->addElement('select', 'instance', get_string('selectplugin', 'portfolio'), $options);
     323          $mform->addElement('hidden', 'id', $this->_customdata['id']);
     324          $mform->setType('id', PARAM_INT);
     325          $this->add_action_buttons(true, get_string('next'));
     326      }
     327  }
    

    Search This Site: