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 33] [Versions 28 and 34] [Versions 28 and 35] [Versions 28 and 36] [Versions 28 and 37]

       1  <?php
       2  
       3  ///////////////////////////////////////////////////////////////////////////
       4  //                                                                       //
       5  // This file is part of Moodle - http://moodle.org/                      //
       6  // Moodle - Modular Object-Oriented Dynamic Learning Environment         //
       7  //                                                                       //
       8  // Moodle is free software: you can redistribute it and/or modify        //
       9  // it under the terms of the GNU General Public License as published by  //
      10  // the Free Software Foundation, either version 3 of the License, or     //
      11  // (at your option) any later version.                                   //
      12  //                                                                       //
      13  // Moodle is distributed in the hope that it will be useful,             //
      14  // but WITHOUT ANY WARRANTY; without even the implied warranty of        //
      15  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
      16  // GNU General Public License for more details.                          //
      17  //                                                                       //
      18  // You should have received a copy of the GNU General Public License     //
      19  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.       //
      20  //                                                                       //
      21  ///////////////////////////////////////////////////////////////////////////
      22  
      23  /*
      24   * @package    course
      25   * @subpackage publish
      26   * @author     Jerome Mouneyrac <jerome@mouneyrac.com>
      27   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL
      28   * @copyright  (C) 1999 onwards Martin Dougiamas  http://dougiamas.com
      29   *
      30   * This page display the publication metadata form
      31   */
      32  
      33  require_once('../../config.php');
      34  require_once($CFG->dirroot . '/course/publish/forms.php');
      35  require_once($CFG->dirroot . '/' . $CFG->admin . '/registration/lib.php');
      36  require_once($CFG->dirroot . '/course/publish/lib.php');
      37  require_once($CFG->libdir . '/filelib.php');
      38  
      39  
      40  //check user access capability to this page
      41  $id = required_param('id', PARAM_INT);
      42  
      43  $course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST);
      44  require_login($course);
      45  
      46  //page settings
      47  $PAGE->set_url('/course/publish/metadata.php', array('id' => $course->id));
      48  $PAGE->set_pagelayout('incourse');
      49  $PAGE->set_title(get_string('course') . ': ' . $course->fullname);
      50  $PAGE->set_heading($course->fullname);
      51  
      52  //check that the PHP xmlrpc extension is enabled
      53  if (!extension_loaded('xmlrpc')) {
      54      $errornotification = $OUTPUT->doc_link('admin/environment/php_extension/xmlrpc', '');
      55      $errornotification .= get_string('xmlrpcdisabledpublish', 'hub');
      56      $context = context_course::instance($course->id);
      57      $shortname = format_string($course->shortname, true, array('context' => $context));
      58      echo $OUTPUT->header();
      59      echo $OUTPUT->heading(get_string('publishcourse', 'hub', $shortname), 3, 'main');
      60      echo $OUTPUT->notification($errornotification);
      61      echo $OUTPUT->footer();
      62      die();
      63  }
      64  
      65  if (has_capability('moodle/course:publish', context_course::instance($id))) {
      66  
      67      //retrieve hub name and hub url
      68      $huburl = optional_param('huburl', '', PARAM_URL);
      69      $hubname = optional_param('hubname', '', PARAM_TEXT);
      70      if (empty($huburl) or !confirm_sesskey()) {
      71          throw new moodle_exception('missingparameter');
      72      }
      73  
      74      //set the publication form
      75      $advertise = optional_param('advertise', false, PARAM_BOOL);
      76      $share = optional_param('share', false, PARAM_BOOL);
      77      $coursepublicationform = new course_publication_form('',
      78                      array('huburl' => $huburl, 'hubname' => $hubname, 'sesskey' => sesskey(),
      79                          'course' => $course, 'advertise' => $advertise, 'share' => $share,
      80                          'id' => $id, 'page' => $PAGE));
      81      $fromform = $coursepublicationform->get_data();
      82  
      83      //retrieve the token to call the hub
      84      $registrationmanager = new registration_manager();
      85      $registeredhub = $registrationmanager->get_registeredhub($huburl);
      86  
      87      //setup web service xml-rpc client
      88      $serverurl = $huburl . "/local/hub/webservice/webservices.php";
      89      require_once($CFG->dirroot . "/webservice/xmlrpc/lib.php");
      90      $xmlrpcclient = new webservice_xmlrpc_client($serverurl, $registeredhub->token);
      91  
      92      if (!empty($fromform)) {
      93  
      94          $publicationmanager = new course_publish_manager();
      95  
      96          //retrieve the course information
      97          $courseinfo = new stdClass();
      98          $courseinfo->fullname = $fromform->name;
      99          $courseinfo->shortname = $fromform->courseshortname;
     100          $courseinfo->description = $fromform->description;
     101          $courseinfo->language = $fromform->language;
     102          $courseinfo->publishername = $fromform->publishername;
     103          $courseinfo->publisheremail = $fromform->publisheremail;
     104          $courseinfo->contributornames = $fromform->contributornames;
     105          $courseinfo->coverage = $fromform->coverage;
     106          $courseinfo->creatorname = $fromform->creatorname;
     107          $courseinfo->licenceshortname = $fromform->licence;
     108          $courseinfo->subject = $fromform->subject;
     109          $courseinfo->audience = $fromform->audience;
     110          $courseinfo->educationallevel = $fromform->educationallevel;
     111          $creatornotes = $fromform->creatornotes;
     112          $courseinfo->creatornotes = $creatornotes['text'];
     113          $courseinfo->creatornotesformat = $creatornotes['format'];
     114          $courseinfo->sitecourseid = $id;
     115          if (!empty($fromform->deletescreenshots)) {
     116              $courseinfo->deletescreenshots = $fromform->deletescreenshots;
     117          }
     118          if ($share) {
     119              $courseinfo->demourl = $fromform->demourl;
     120              $courseinfo->enrollable = false;
     121          } else {
     122              $courseinfo->courseurl = $fromform->courseurl;
     123              $courseinfo->enrollable = true;
     124          }
     125  
     126          //retrieve the outcomes of this course
     127          require_once($CFG->libdir . '/grade/grade_outcome.php');
     128          $outcomes = grade_outcome::fetch_all_available($id);
     129          if (!empty($outcomes)) {
     130              foreach ($outcomes as $outcome) {
     131                  $sentoutcome = new stdClass();
     132                  $sentoutcome->fullname = $outcome->fullname;
     133                  $courseinfo->outcomes[] = $sentoutcome;
     134              }
     135          }
     136  
     137          //retrieve the content information from the course
     138          $coursecontext = context_course::instance($course->id);
     139          $courseblocks = $publicationmanager->get_block_instances_by_context($coursecontext->id, 'blockname');
     140  
     141          if (!empty($courseblocks)) {
     142              $blockname = '';
     143              foreach ($courseblocks as $courseblock) {
     144                  if ($courseblock->blockname != $blockname) {
     145                      if (!empty($blockname)) {
     146                          $courseinfo->contents[] = $content;
     147                      }
     148  
     149                      $blockname = $courseblock->blockname;
     150                      $content = new stdClass();
     151                      $content->moduletype = 'block';
     152                      $content->modulename = $courseblock->blockname;
     153                      $content->contentcount = 1;
     154                  } else {
     155                      $content->contentcount = $content->contentcount + 1;
     156                  }
     157              }
     158              $courseinfo->contents[] = $content;
     159          }
     160  
     161          $activities = get_fast_modinfo($course, $USER->id);
     162          foreach ($activities->instances as $activityname => $activitydetails) {
     163              $content = new stdClass();
     164              $content->moduletype = 'activity';
     165              $content->modulename = $activityname;
     166              $content->contentcount = count($activities->instances[$activityname]);
     167              $courseinfo->contents[] = $content;
     168          }
     169  
     170          //save into screenshots field the references to the screenshot content hash
     171          //(it will be like a unique id from the hub perspective)
     172          if (!empty($fromform->deletescreenshots) or $share) {
     173              $courseinfo->screenshots = 0;
     174          } else {
     175              $courseinfo->screenshots = $fromform->existingscreenshotnumber;
     176          }
     177          if (!empty($fromform->screenshots)) {
     178              $screenshots = $fromform->screenshots;
     179              $fs = get_file_storage();
     180              $files = $fs->get_area_files(context_user::instance($USER->id)->id, 'user', 'draft', $screenshots);
     181              if (!empty($files)) {
     182                  $courseinfo->screenshots = $courseinfo->screenshots + count($files) - 1; //minus the ./ directory
     183              }
     184          }
     185  
     186          // PUBLISH ACTION
     187  
     188          //publish the course information
     189          $function = 'hub_register_courses';
     190          $params = array('courses' => array($courseinfo));
     191          try {
     192              $courseids = $xmlrpcclient->call($function, $params);
     193          } catch (Exception $e) {
     194              throw new moodle_exception('errorcoursepublish', 'hub',
     195                      new moodle_url('/course/view.php', array('id' => $id)), $e->getMessage());
     196          }
     197  
     198          if (count($courseids) != 1) {
     199              throw new moodle_exception('errorcoursewronglypublished', 'hub');
     200          }
     201  
     202          //save the record into the published course table
     203          $publication = $publicationmanager->get_publication($courseids[0], $huburl);
     204          if (empty($publication)) {
     205              //if never been published or if we share, we need to save this new publication record
     206              $publicationmanager->add_course_publication($registeredhub->huburl, $course->id, !$share, $courseids[0]);
     207          } else {
     208              //if we update the enrollable course publication we update the publication record
     209              $publicationmanager->update_enrollable_course_publication($publication->id);
     210          }
     211  
     212          // SEND FILES
     213          $curl = new curl();
     214  
     215          // send screenshots
     216          if (!empty($fromform->screenshots)) {
     217  
     218              if (!empty($fromform->deletescreenshots) or $share) {
     219                  $screenshotnumber = 0;
     220              } else {
     221                  $screenshotnumber = $fromform->existingscreenshotnumber;
     222              }
     223              foreach ($files as $file) {
     224                  if ($file->is_valid_image()) {
     225                      $screenshotnumber = $screenshotnumber + 1;
     226                      $params = array();
     227                      $params['filetype'] = HUB_SCREENSHOT_FILE_TYPE;
     228                      $params['file'] = $file;
     229                      $params['courseid'] = $courseids[0];
     230                      $params['filename'] = $file->get_filename();
     231                      $params['screenshotnumber'] = $screenshotnumber;
     232                      $params['token'] = $registeredhub->token;
     233                      $curl->post($huburl . "/local/hub/webservice/upload.php", $params);
     234                  }
     235              }
     236          }
     237  
     238          //redirect to the backup process page
     239          if ($share) {
     240              $params = array('sesskey' => sesskey(), 'id' => $id, 'hubcourseid' => $courseids[0],
     241                  'huburl' => $huburl, 'hubname' => $hubname);
     242              $backupprocessurl = new moodle_url("/course/publish/backup.php", $params);
     243              redirect($backupprocessurl);
     244          } else {
     245              //redirect to the index publis page
     246              redirect(new moodle_url('/course/publish/index.php',
     247                              array('sesskey' => sesskey(), 'id' => $id, 'published' => true,
     248                                  'hubname' => $hubname, 'huburl' => $huburl)));
     249          }
     250      }
     251  
     252      /////// OUTPUT SECTION /////////////
     253  
     254      echo $OUTPUT->header();
     255      echo $OUTPUT->heading(get_string('publishcourseon', 'hub', !empty($hubname) ? $hubname : $huburl), 3, 'main');
     256  
     257      //display hub information (logo, name, description)
     258      $function = 'hub_get_info';
     259      $params = array();
     260      try {
     261          $hubinfo = $xmlrpcclient->call($function, $params);
     262      } catch (Exception $e) {
     263          //only print error log in apache (for backward compatibility)
     264          error_log(print_r($e->getMessage(), true));
     265      }
     266      $renderer = $PAGE->get_renderer('core', 'publish');
     267      if (!empty($hubinfo)) {
     268          echo $renderer->hubinfo($hubinfo);
     269      }
     270  
     271      //display metadata form
     272      $coursepublicationform->display();
     273      echo $OUTPUT->footer();
     274  }
    

    Search This Site: