Example #1
0
 /**
  * Tests the static strpos method.
  */
 public function test_strpos()
 {
     $str = "Žluťoučký koníček";
     $this->assertSame(10, core_text::strpos($str, 'koníč'));
 }
Example #2
0
 /**
  * Retrieves the list of students to be graded for the assignment.
  *
  * @param int $assignid the assign instance id
  * @param int $groupid the current group id
  * @param string $filter search string to filter the results.
  * @param int $skip Number of records to skip
  * @param int $limit Maximum number of records to return
  * @param bool $onlyids Only return user ids.
  * @return array of warnings and status result
  * @since Moodle 3.1
  * @throws moodle_exception
  */
 public static function list_participants($assignid, $groupid, $filter, $skip, $limit, $onlyids)
 {
     global $DB, $CFG;
     require_once $CFG->dirroot . "/mod/assign/locallib.php";
     require_once $CFG->dirroot . "/user/lib.php";
     $params = self::validate_parameters(self::list_participants_parameters(), array('assignid' => $assignid, 'groupid' => $groupid, 'filter' => $filter, 'skip' => $skip, 'limit' => $limit, 'onlyids' => $onlyids));
     $warnings = array();
     list($assign, $course, $cm, $context) = self::validate_assign($params['assignid']);
     require_capability('mod/assign:view', $context);
     $assign->require_view_grades();
     $participants = $assign->list_participants_with_filter_status_and_group($params['groupid']);
     $result = array();
     $index = 0;
     foreach ($participants as $record) {
         // Preserve the fullname set by the assignment.
         $fullname = $record->fullname;
         $searchable = $fullname;
         $match = false;
         if (empty($filter)) {
             $match = true;
         } else {
             $filter = core_text::strtolower($filter);
             $value = core_text::strtolower($searchable);
             if (is_string($value) && core_text::strpos($value, $filter) !== false) {
                 $match = true;
             }
         }
         if ($match) {
             $index++;
             if ($index <= $params['skip']) {
                 continue;
             }
             if ($params['limit'] > 0 && $index - $params['skip'] > $params['limit']) {
                 break;
             }
             // Now we do the expensive lookup of user details because we completed the filtering.
             if (!$assign->is_blind_marking() && !$params['onlyids']) {
                 $userdetails = user_get_user_details($record, $course);
             } else {
                 $userdetails = array('id' => $record->id);
             }
             $userdetails['fullname'] = $fullname;
             $userdetails['submitted'] = $record->submitted;
             $userdetails['requiregrading'] = $record->requiregrading;
             if (!empty($record->groupid)) {
                 $userdetails['groupid'] = $record->groupid;
             }
             if (!empty($record->groupname)) {
                 $userdetails['groupname'] = $record->groupname;
             }
             $result[] = $userdetails;
         }
     }
     return $result;
 }
 /**
  * Splits text into words.
  * Note: This is not really intended to be public as such, but it needs to be called
  * within ousearch_search.
  * @param string $text Text to split
  * @param bool $query If true, text is treated as a query (preserve +, -,
  *   and ")
  * @param bool $positions If true, returns positions
  * @return array If $positions is false, returns an array of words. If it
  *   is true, returns a two-element array, first being an array of words,
  *   second being a corresponding array of start positions of each word
  *   (in characters) with one extra value holding end position/length
  *   in characters
  */
 public static function split_words($text, $query = false, $positions = false)
 {
     // Treat single right quote as apostrophe.
     $text = str_replace("’", "'", $text);
     // Words include all letters, numbers, and apostrophes. Though this is
     // expressed with Unicode it is likely to work properly only for English and
     // some other European languages.
     $text = preg_replace($query ? '/[^\\pL\\pN\\x27+"-]/u' : '/[^\\pL\\pN\\x27]/u', '_', core_text::strtolower($text));
     if (!$positions) {
         $text = preg_replace('/\\x27+(_|$)/u', '_', $text);
         $text = preg_replace('/(^|_)\\x27+/u', '_', $text);
         $text = preg_replace('/_+/u', '_', $text);
         $result = explode('_', $text);
         $words = array();
         foreach ($result as $word) {
             if ($word !== '') {
                 $words[] = $word;
             }
         }
         return $words;
     } else {
         $text = self::replace_with_underline('/\\x27+(_|$)/u', $text);
         $text = self::replace_with_underline('/(^|_)\\x27+/u', $text);
         $words = array();
         $positions = array();
         $pos = 0;
         while ($pos < core_text::strlen($text)) {
             if (core_text::substr($text, $pos, 1) === '_') {
                 $pos++;
                 continue;
             }
             $nextunderline = core_text::strpos($text, '_', $pos + 1);
             if ($nextunderline === false) {
                 $nextunderline = core_text::strlen($text);
             }
             $words[] = core_text::substr($text, $pos, $nextunderline - $pos);
             $positions[] = $pos;
             $pos = $nextunderline + 1;
         }
         $positions[] = core_text::strlen($text);
         return array($words, $positions);
     }
 }
Example #4
0
function rcontent_get_urlviewresults_link($urlviewresults)
{
    if (core_text::strpos($urlviewresults, 'http://') === false && core_text::strpos($urlviewresults, 'https://') === false) {
        $urlviewresults = 'http://' . $urlviewresults;
    }
    return '<a href="' . $urlviewresults . '" target="_blank">' . get_string('rcontent:viewresult', 'rcontent') . '</a>';
}
function game_strpos($haystack, $needle, $offset = 0)
{
    if (game_get_moodle_version() >= '02.08') {
        return core_text::strpos($haystack, $needle, $offset);
    }
    if (game_get_moodle_version() >= '02.04') {
        return textlib::strpos($haystack, $needle, $offset);
    }
    return textlib_get_instance()->strpos($haystack, $needle, $offset);
}
Example #6
0
    /**
     * Retrieves the list of students to be graded for the assignment.
     *
     * @param int $assignid the assign instance id
     * @param int $groupid the current group id
     * @param string $filter search string to filter the results.
     * @param int $skip Number of records to skip
     * @param int $limit Maximum number of records to return
     * @param bool $onlyids Only return user ids.
     * @param bool $includeenrolments Return courses where the user is enrolled.
     * @return array of warnings and status result
     * @since Moodle 3.1
     * @throws moodle_exception
     */
    public static function list_participants($assignid, $groupid, $filter, $skip, $limit, $onlyids, $includeenrolments) {
        global $DB, $CFG;
        require_once($CFG->dirroot . "/mod/assign/locallib.php");
        require_once($CFG->dirroot . "/user/lib.php");

        $params = self::validate_parameters(self::list_participants_parameters(),
                                            array(
                                                'assignid' => $assignid,
                                                'groupid' => $groupid,
                                                'filter' => $filter,
                                                'skip' => $skip,
                                                'limit' => $limit,
                                                'onlyids' => $onlyids,
                                                'includeenrolments' => $includeenrolments
                                            ));
        $warnings = array();

        list($assign, $course, $cm, $context) = self::validate_assign($params['assignid']);

        require_capability('mod/assign:view', $context);

        $assign->require_view_grades();

        $participants = array();
        if (groups_group_visible($params['groupid'], $course, $cm)) {
            $participants = $assign->list_participants_with_filter_status_and_group($params['groupid']);
        }

        $userfields = user_get_default_fields();
        if (!$params['includeenrolments']) {
            // Remove enrolled courses from users fields to be returned.
            $key = array_search('enrolledcourses', $userfields);
            if ($key !== false) {
                unset($userfields[$key]);
            } else {
                throw new moodle_exception('invaliduserfield', 'error', '', 'enrolledcourses');
            }
        }

        $result = array();
        $index = 0;
        foreach ($participants as $record) {
            // Preserve the fullname set by the assignment.
            $fullname = $record->fullname;
            $searchable = $fullname;
            $match = false;
            if (empty($filter)) {
                $match = true;
            } else {
                $filter = core_text::strtolower($filter);
                $value = core_text::strtolower($searchable);
                if (is_string($value) && (core_text::strpos($value, $filter) !== false)) {
                    $match = true;
                }
            }
            if ($match) {
                $index++;
                if ($index <= $params['skip']) {
                    continue;
                }
                if (($params['limit'] > 0) && (($index - $params['skip']) > $params['limit'])) {
                    break;
                }
                // Now we do the expensive lookup of user details because we completed the filtering.
                if (!$assign->is_blind_marking() && !$params['onlyids']) {
                    $userdetails = user_get_user_details($record, $course, $userfields);
                } else {
                    $userdetails = array('id' => $record->id);
                }
                $userdetails['fullname'] = $fullname;
                $userdetails['submitted'] = $record->submitted;
                $userdetails['requiregrading'] = $record->requiregrading;
                if (!empty($record->groupid)) {
                    $userdetails['groupid'] = $record->groupid;
                }
                if (!empty($record->groupname)) {
                    $userdetails['groupname'] = $record->groupname;
                }

                $result[] = $userdetails;
            }
        }
        return $result;
    }
Example #7
0
$PAGE->navbar->add(get_string('modulenameplural', 'rcontent'), new moodle_url('/mod/rcontent/index.php', array('id' => $course->id)));
$PAGE->navbar->add($rcontent->name);
$PAGE->set_url($url);
//call to autentification web services
require_once $CFG->dirroot . '/local/rcommon/WebServices/AuthenticateContent.php';
$rcontent->module = 'rcontent';
$rcontent->cmid = $cm->id;
$return = AuthenticateUserContent($rcontent);
if ($return->AutenticarUsuarioContenidoResult->Codigo <= 0 || !isset($return->AutenticarUsuarioContenidoResult->URL) || empty($return->AutenticarUsuarioContenidoResult->URL)) {
    print_error(get_string('error_authentication', 'local_rcommon') . $return->AutenticarUsuarioContenidoResult->Codigo . ', ' . $return->AutenticarUsuarioContenidoResult->Descripcion);
}
$url = $return->AutenticarUsuarioContenidoResult->URL;
if ($rcontent->popup == 1) {
    $options = $rcontent->popup_options;
    if (core_text::strpos($options, ',height') !== false) {
        $options = core_text::substr($options, 0, core_text::strpos($options, ',height'));
    }
    $PAGE->requires->data_for_js('rcontentplayerdata', array('cwidth' => str_replace('%', '', $rcontent->width), 'cheight' => str_replace('%', '', $rcontent->height), 'popupoptions' => $options, 'courseid' => $rcontent->course, 'launch' => true, 'launch_url' => $url), true);
    echo $OUTPUT->header();
    echo $OUTPUT->heading(format_string($rcontent->name));
    $content = '<a target="_blank" href="' . $url . '">' . get_string('popupblockedlinkname', 'rcontent') . '</a>';
    echo $OUTPUT->box(get_string('popupblocked', 'rcontent', $content));
    $PAGE->requires->js('/mod/rcontent/view.js');
    $PAGE->requires->js_init_call('M.mod_rcontentform.init');
} else {
    echo $OUTPUT->header();
    echo $OUTPUT->heading(format_string($rcontent->name));
    $framesize = get_config('rcontent', 'framesize');
    echo '<iframe height="' . $framesize . 'px" width="100%" src="' . $url . '" id="rcontent_iframe"> <a href="' . $url . '" target="_blank">Resource</a></iframe>';
    echo '<script type="text/javascript">
        //<![CDATA[
 /**
  * Test whether a course shortname matches a string. Use regex if indicated by the admin settings.
  *
  * @param string $coursename The shortname of a course
  * @param string $teststring The string to match against
  * @return bool
  */
 private function _satisfies_match($coursename, $teststring)
 {
     if ($this->fclconfig->useregex == BLOCK_FILTERED_COURSE_LIST_FALSE) {
         $satisfies = core_text::strpos($coursename, $teststring) !== false ?: false;
     } else {
         $teststring = str_replace('`', '', $teststring);
         $satisfies = preg_match("`{$teststring}`i", $coursename) == 1 ?: false;
     }
     return $satisfies;
 }
Example #9
0
     if ($rcontentuser->urlviewresults != "") {
         $href = rcontent_get_urlviewresults_link($rcontentuser->urlviewresults);
     }
     // Show update activity link
     if ($canupdatescore) {
         $href .= ' | ' . rcontent_get_uploadscore_link($id, $rcontentuser->userid, $rcontentuser->attempt, $rcontentuser->id);
     }
     if (!empty($href)) {
         $row[] = $href;
         $showhreffield = true;
     }
     // Filter by status
     if ($filterby != '' && $status[0] != $filterby || $status[1] == '') {
         $realstat = $status[0] != '' ? get_string($status[0], 'rcontent') : '';
         $stat = $filterby != '' ? get_string($filterby, 'rcontent') : $realstat;
         $fieldstoreset = core_text::strpos($row[0], '<input') === false ? array(3 => "", 4 => "", 5 => $stat, 6 => "", 7 => "", 8 => "") : array(4 => "", 5 => "", 6 => $stat, 7 => "", 8 => "", 9 => "");
         foreach ($fieldstoreset as $key => $val) {
             $row[$key] = $val;
         }
     }
     $table->data[] = $row;
     // If original status is POR_CORREGIR set background to red
     if ($status[1] == "POR_CORREGIR") {
         $table->rowclasses[] = 'uuerror';
     } else {
         $table->rowclasses[] = '';
     }
 }
 if (isset($table->data) && count($table->data) > 0) {
     // Now the theader
     $table->head = array();
/**
 * Web Service to authenticate users credentials
 * @param object $data -> mod values
 * @return obj -> web service response
 */
function AuthenticateUserContent($data, $usr_creden = false, $showurl = true)
{
    global $CFG, $DB, $USER, $OUTPUT;
    $from = optional_param('from', '', PARAM_TEXT);
    if (!isset($data->bookid) || ($book = $DB->get_record('rcommon_books', array('id' => $data->bookid))) == false) {
        print_error(get_string('nobookid', 'local_rcommon'));
        //save error on bd
    } elseif (($publisher = $DB->get_record('rcommon_publisher', array('id' => $book->publisherid))) == false) {
        print_error(get_string('nopublisher', 'local_rcommon'));
        //save error on bd
    }
    if (!$usr_creden) {
        $usr_creden = credentials::get_by_user_isbn($USER->id, $book->isbn);
    }
    if (!$usr_creden) {
        // Moved $url variable to use it also in the else clause and changed the default behavior
        /*set url*/
        if (isset($_SERVER)) {
            $SERVER_NAME = $_SERVER['SERVER_NAME'];
            $SERVER_PORT = $_SERVER['SERVER_PORT'];
            $SCRIPT_NAME = $_SERVER['REQUEST_URI'];
            $HTTPS = isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : (isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off');
        } elseif (isset($HTTP_SERVER_VARS)) {
            $SERVER_NAME = $HTTP_SERVER_VARS['SERVER_NAME'];
            $SERVER_PORT = $HTTP_SERVER_VARS['SERVER_PORT'];
            $SCRIPT_NAME = $HTTP_SERVER_VARS['REQUEST_URI'];
            $HTTPS = isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off';
        }
        if ($SERVER_PORT == 80) {
            $SERVER_PORT = '';
        } else {
            $SERVER_PORT = ':' . $SERVER_PORT;
        }
        if ($HTTPS == '1' || $HTTPS == 'on') {
            $SCHEME = 'https';
        } else {
            $SCHEME = 'http';
        }
        $url = "{$SCHEME}://{$SERVER_NAME}{$SERVER_PORT}{$SCRIPT_NAME}";
        redirect($CFG->wwwroot . '/local/rcommon/formInsert.php?url=' . base64_encode($url) . '&isbn=' . $book->isbn);
        exit;
        //save error on bd
    } else {
        if (!empty($data->unitid) && ($unit = $DB->get_record('rcommon_books_units', array('id' => $data->unitid))) == false) {
            print_error(get_string('nounit', 'block_rcommon'));
            //save error on bd
        } else {
            if (!empty($data->activityid) && ($activ = $DB->get_record('rcommon_books_activities', array('id' => $data->activityid))) == false) {
                print_error('noactivity', 'block_rcommon');
                //save error on bd
            }
        }
    }
    //look for the group if he has anyone assigned
    $grupo = $DB->get_recordset_sql("SELECT GRUPO.id\r\n                        FROM {user} USERS\r\n                        JOIN {role_assignments} ra ON ra.userid = USERS.id\r\n                        JOIN {role} r ON ra.roleid = r.id\r\n                        JOIN {context} con ON ra.contextid = con.id\r\n                        JOIN {course} COURSE ON COURSE.id = con.instanceid\r\n                        AND con.contextlevel =50\r\n                        JOIN {groups} GRUPO ON GRUPO.courseid = COURSE.id\r\n                        JOIN {groups_members} MEMBER ON MEMBER.groupid = GRUPO.id\r\n                        AND MEMBER.userid = USERS.id\r\n                        WHERE COURSE.id = {$data->course}\r\n                        AND USERS.id = {$USER->id}");
    foreach ($grupo as $grp) {
        $grupoid = $grp->id;
    }
    try {
        $client = get_marsupial_ws_client($publisher, true);
        $params = new stdClass();
        $params->Credencial = new SoapVar($usr_creden->credentials, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        $params->ISBN = new SoapVar($book->isbn, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        $params->IdUsuario = new SoapVar($usr_creden->euserid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        //$params->NombreApe = new SoapVar($USER->firstname." ".$USER->lastname, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        //convert rcommon_teacherroles to array
        $rcommon_teacherroles = explode(',', get_config('rcommon', 'teacherroles'));
        //get user role
        // To avoid problems because in some cases the courseid was null
        $context = context_course::instance($data->course);
        $iduserrole = array();
        if ($roles = get_user_roles($context, $USER->id)) {
            foreach ($roles as $role) {
                $iduserrole = $role->roleid;
            }
        }
        //set role string
        $rolestring = "ESTUDIANTE";
        if (in_array($iduserrole, $rcommon_teacherroles)) {
            $rolestring = "PROFESOR";
        }
        //check if the web service is prepared to receive rol parameter
        $parsed_wsdl = rcommon_get_wsdl($publisher->urlwsauthentication . '?wsdl');
        if (core_text::strpos($parsed_wsdl, 'name="Rol"') && $rolestring == "PROFESOR") {
            $params->Rol = new SoapVar($rolestring, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        }
        $params->IdCurso = new SoapVar($data->course, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        $centerid = isset($CFG->center) ? $CFG->center : '';
        $params->IdCentro = new SoapVar($centerid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        $params->URLResultado = new SoapVar("{$CFG->wwwroot}/mod/rcontent/WebServices/wsSeguimiento.php", XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        $params->IdContenidoLMS = new SoapVar($data->id, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        $unitid = isset($unit->code) ? $unit->code : '';
        $params->IdUnidad = new SoapVar($unitid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        $activid = isset($activ->code) ? $activ->code : '';
        $params->IdActividad = new SoapVar($activid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        // He has been assigned a group
        if (isset($grupoid)) {
            $params->IdGrupo = new SoapVar($grupoid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema");
        }
        $response = $client->__soapCall("AutenticarUsuarioContenido", array($params));
        log_to_file("wsAutenthication request: " . $client->__getLastRequest());
        log_to_file("wsAutenthication response: " . $client->__getLastResponse());
    } catch (Exception $e) {
        log_to_file("wsAutenthication exception: " . get_string('bad_wsdl_connection', 'local_rcommon'));
        echo '<script type="text/javascript">window.alert("' . get_string('bad_wsdl_connection', 'local_rcommon') . '"); history.go(-1);</script>';
        echo $OUTPUT->notification(get_string('bad_wsdl_connection', 'local_rcommon'));
        die;
    }
    //test the response to set parameters name to the standars
    foreach ($response->AutenticarUsuarioContenidoResult as $key => $value) {
        switch (core_text::strtolower($key)) {
            case "descripcion":
                $response->AutenticarUsuarioContenidoResult->Descripcion = $value;
                break;
            case "codigo":
                $response->AutenticarUsuarioContenidoResult->Codigo = $value;
                break;
            case "url":
                $response->AutenticarUsuarioContenidoResult->URL = $value;
                break;
        }
    }
    //check if there are any response error
    if ($response->AutenticarUsuarioContenidoResult->Codigo <= 0) {
        //test if isset the url
        //
        $urlok = false;
        $message = "Instance ID: " . $data->id . ", Text: " . get_string('wsautenticationerror', $data->module == 'check_credentials' ? 'rcontent' : $data->module) . ", Code: " . $response->AutenticarUsuarioContenidoResult->Codigo . ", Detail: " . $response->AutenticarUsuarioContenidoResult->Descripcion;
        if (isset($response->AutenticarUsuarioContenidoResult->URL)) {
            $urlok = test_ws_url($response->AutenticarUsuarioContenidoResult->URL);
        }
        if ($urlok) {
            $message .= ", URL: " . $urlok;
        }
        rcommon_ws_error('AuthenticateUserContent', $message, $data->module, $data->cmid, $data->course);
        if ($urlok && $showurl) {
            $msg = '<br><br>' . @get_string('urlmoreinfo', 'local_rcommon', $urlok);
        } else {
            $msg = "";
        }
        //set the description to show
        $desctext = get_string('error_code_' . $response->AutenticarUsuarioContenidoResult->Codigo, 'local_rcommon');
        if (core_text::substr($desctext, 0, 2) == '[[') {
            $desctext = $response->AutenticarUsuarioContenidoResult->Codigo;
        }
        if (isset($response->AutenticarUsuarioContenidoResult->Descripcion) && !empty($response->AutenticarUsuarioContenidoResult->Descripcion)) {
            $desctext .= '<br>' . $response->AutenticarUsuarioContenidoResult->Descripcion;
        }
        print_error(get_string('error_authentication', 'local_rcommon', $response->AutenticarUsuarioContenidoResult->Codigo) . '<br>' . $desctext . $msg);
    } else {
        return $response;
    }
}
Example #11
0
 $record = new stdClass();
 $record->code = $fromform->code;
 $record->name = empty($fromform->name) ? $fromform->code : $fromform->name;
 $record->urlwsauthentication = str_replace("\\", "/", $fromform->urlwsauthentication);
 $record->urlwsbookstructure = str_replace("\\", "/", $fromform->urlwsbookstructure);
 $record->username = $fromform->username;
 $record->password = $fromform->password;
 $record->timemodified = time();
 //extra controls
 if (empty($record->name)) {
     print_error(get_string('savekoemptyvalues', 'local_rcommon'), $CFG->wwwroot . '/local/rcommon/publishers.php');
 }
 if (!empty($record->urlwsauthentication) && ($pos = core_text::strpos(core_text::strtolower($record->urlwsauthentication), '?wsdl'))) {
     $record->urlwsauthentication = core_text::substr($record->urlwsauthentication, 0, $pos);
 }
 if (!empty($record->urlwsbookstructure) && ($pos = core_text::strpos(core_text::strtolower($record->urlwsbookstructure), '?wsdl'))) {
     $record->urlwsbookstructure = core_text::substr($record->urlwsbookstructure, 0, $pos);
 }
 //do save
 if (empty($publisher)) {
     $record->timecreated = $record->timemodified;
     if (!$DB->insert_record('rcommon_publisher', $record)) {
         redirect($CFG->wwwroot . '/local/rcommon/publishers.php?action=edit&publisher=' . $publisher, get_string('saveko', 'local_rcommon'), 5);
     }
 } else {
     $record->id = $publisher;
     if (!$DB->update_record('rcommon_publisher', $record)) {
         redirect($CFG->wwwroot . '/local/rcommon/publishers.php?action=edit&publisher=' . $publisher, get_string('saveko', 'local_rcommon'), 5);
     }
 }
 redirect($CFG->wwwroot . '/local/rcommon/publishers.php', get_string('saveok', 'local_rcommon'), 2);