Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   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 the csv exporter for a competency framework.
  19   *
  20   * @package   tool_lpimportcsv
  21   * @copyright 2015 Damyon Wiese
  22   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  namespace tool_lpimportcsv;
  26  
  27  defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.');
  28  
  29  use core_competency\api;
  30  use stdClass;
  31  use csv_export_writer;
  32  
  33  /**
  34   * Export Competency framework.
  35   *
  36   * @package   tool_lpimportcsv
  37   * @copyright 2015 Damyon Wiese
  38   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  39   */
  40  class framework_exporter {
  41  
  42      /** @var $framework \core_competency\competency_framework */
  43      protected $framework = null;
  44  
  45      /** @var $error string */
  46      protected $error = '';
  47  
  48      /**
  49       * Constructor
  50       * @param int $frameworkid The framework id
  51       */
  52      public function __construct($frameworkid) {
  53          $this->framework = api::read_framework($frameworkid);
  54      }
  55  
  56      /**
  57       * Export all the competencies from this framework to a csv file.
  58       */
  59      public function export() {
  60          global $CFG;
  61          require_once($CFG->libdir . '/csvlib.class.php');
  62  
  63          $writer = new csv_export_writer();
  64          $filename = clean_param($this->framework->get('shortname') . '-' . $this->framework->get('idnumber'), PARAM_FILE);
  65          $writer->set_filename($filename);
  66  
  67          $headers = framework_importer::list_required_headers();
  68  
  69          $writer->add_data($headers);
  70  
  71          // Order and number of columns must match framework_importer::list_required_headers().
  72          $row = array(
  73              '',
  74              $this->framework->get('idnumber'),
  75              $this->framework->get('shortname'),
  76              $this->framework->get('description'),
  77              $this->framework->get('descriptionformat'),
  78              $this->framework->get_scale()->compact_items(),
  79              $this->framework->get('scaleconfiguration'),
  80              '',
  81              '',
  82              '',
  83              '',
  84              '',
  85              true,
  86              implode(',', $this->framework->get('taxonomies'))
  87          );
  88          $writer->add_data($row);
  89  
  90          $filters = array('competencyframeworkid' => $this->framework->get('id'));
  91          $competencies = api::list_competencies($filters);
  92          // Index by id so we can lookup parents.
  93          $indexed = array();
  94          foreach ($competencies as $competency) {
  95              $indexed[$competency->get('id')] = $competency;
  96          }
  97          foreach ($competencies as $competency) {
  98              $parentidnumber = '';
  99              if ($competency->get('parentid') > 0) {
 100                  $parent = $indexed[$competency->get('parentid')];
 101                  $parentidnumber = $parent->get('idnumber');
 102              }
 103  
 104              $scalevalues = '';
 105              $scaleconfig = '';
 106              if ($competency->get('scaleid') !== null) {
 107                  $scalevalues = $competency->get_scale()->compact_items();
 108                  $scaleconfig = $competency->get('scaleconfiguration');
 109              }
 110  
 111              $ruleconfig = $competency->get('ruleconfig');
 112              if ($ruleconfig === null) {
 113                  $ruleconfig = "null";
 114              }
 115  
 116              $allrelated = $competency->get_related_competencies();
 117  
 118              $relatedidnumbers = array();
 119              foreach ($allrelated as $onerelated) {
 120                  $relatedidnumbers[] = str_replace(',', '%2C', $onerelated->get('idnumber'));
 121              }
 122              $relatedidnumbers = implode(',', $relatedidnumbers);
 123  
 124              // Order and number of columns must match framework_importer::list_required_headers().
 125              $row = array(
 126                  $parentidnumber,
 127                  $competency->get('idnumber'),
 128                  $competency->get('shortname'),
 129                  $competency->get('description'),
 130                  $competency->get('descriptionformat'),
 131                  $scalevalues,
 132                  $scaleconfig,
 133                  $competency->get('ruletype'),
 134                  $competency->get('ruleoutcome'),
 135                  $ruleconfig,
 136                  $relatedidnumbers,
 137                  $competency->get('id'),
 138                  false,
 139                  ''
 140              );
 141  
 142              $writer->add_data($row);
 143          }
 144  
 145          $writer->download_file();
 146      }
 147  }