/**
  * Core function for creation of form defined in block_panopto_edit_form class
  */
 protected function specific_definition($mform)
 {
     global $COURSE, $CFG;
     // Construct the Panopto data proxy object.
     $panoptodata = new panopto_data($COURSE->id);
     if (!empty($panoptodata->servername) && !empty($panoptodata->instancename) && !empty($panoptodata->applicationkey)) {
         $mform->addElement('header', 'configheader', get_string('block_edit_header', 'block_panopto'));
         $params = new stdClass();
         $params->course_id = $COURSE->id;
         $params->return_url = $_SERVER['REQUEST_URI'];
         $querystring = http_build_query($params, '', '&');
         $provisionurl = "{$CFG->wwwroot}/blocks/panopto/provision_course.php?" . $querystring;
         $addtopanopto = get_string('add_to_panopto', 'block_panopto');
         $or = get_string('or', 'block_panopto');
         $mform->addElement('html', "<a href='{$provisionurl}'>{$addtopanopto}</a><br><br>-- {$or} --<br><br>");
         $courselist = $panoptodata->get_course_options();
         $mform->addElement('selectgroups', 'config_course', get_string('existing_course', 'block_panopto'), $courselist['courses']);
         $mform->setDefault('config_course', $courselist['selected']);
         // Set course context to get roles.
         $context = context_course::instance($COURSE->id);
         // Get current role mappings.
         $currentmappings = $panoptodata->get_course_role_mappings($COURSE->id);
         // Get roles that current user may assign in this course.
         $currentcourseroles = get_assignable_roles($context, $rolenamedisplay = ROLENAME_ALIAS, $withusercounts = false, $user = null);
         while ($role = current($currentcourseroles)) {
             $rolearray[key($currentcourseroles)] = $currentcourseroles[key($currentcourseroles)];
             next($currentcourseroles);
         }
         $mform->addElement('header', 'rolemapheader', get_string('role_map_header', 'block_panopto'));
         $mform->addElement('html', get_string('role_map_info_text', 'block_panopto'));
         $createselect = $mform->addElement('select', 'config_creator', get_string('creator', 'block_panopto'), $rolearray, null);
         $createselect->setMultiple(true);
         // Set default selected to previous setting.
         if (!empty($currentmappings['creator'])) {
             $createselect->setSelected($currentmappings['creator']);
         }
         $pubselect = $mform->addElement('select', 'config_publisher', get_string('publisher', 'block_panopto'), $rolearray, null);
         $pubselect->setMultiple(true);
         // Set default selected to previous setting.
         if (!empty($currentmappings['publisher'])) {
             $pubselect->setSelected($currentmappings['publisher']);
         }
     } else {
         $mform->addElement('static', 'error', '', get_string('block_edit_error', 'block_panopto'));
     }
 }
<?php

define('AJAX_SCRIPT', true);
require '../../config.php';
require_once "lib/panopto_data.php";
try {
    require_login();
    require_sesskey();
    header('Content-Type: text/html; charset=utf-8');
    global $CFG;
    $courseid = $_POST["courseid"];
    // Sync role mapping. In case this is the first time block is running we need to load old settings from db.
    // They will be the default values if this is the first time running.
    $mapping = panopto_data::get_course_role_mappings($courseid);
    panopto_data::set_course_role_permissions($courseid, $mapping['publisher'], $mapping['creator']);
    $content = new stdClass();
    //Initialize $content->text to an empty string here to avoid trying to append to it before
    //it has been initialized and throwing a warning. Bug 33163
    $content->text = "";
    // Construct the Panopto data proxy object.
    $panoptodata = new panopto_data($courseid);
    if (empty($panoptodata->servername) || empty($panoptodata->instancename) || empty($panoptodata->applicationkey)) {
        $content->text = get_string('unprovisioned', 'block_panopto') . "\n            <br/><br/>\n            <a href='{$CFG->wwwroot}/blocks/panopto/provision_course_internal.php?id={$courseid}'>" . get_string('provision_course_link_text', 'block_panopto') . "</a>";
        $content->footer = "";
        return $content;
    }
    try {
        if (!$panoptodata->sessiongroupid) {
            $content->text = get_string('no_course_selected', 'block_panopto');
        } else {
            // Get course info from SOAP service.