/** * Tests the static strpos method. */ public function test_strpos() { $str = "Žluťoučký koníček"; $this->assertSame(10, core_text::strpos($str, 'koníč')); }
/** * 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); } }
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); }
/** * 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; }
$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; }
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; } }
$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);