Example #1
0
function question_find_file_links_from_html($html, $courseid)
{
    global $CFG;
    $baseurl = question_file_links_base_url($courseid);
    $searchfor = '!' . '(<\\s*(a|img)\\s[^>]*(href|src)\\s*=\\s*")' . $baseurl . '([^"]*)"' . '|' . '(<\\s*(a|img)\\s[^>]*(href|src)\\s*=\\s*\')' . $baseurl . '([^\']*)\'' . '!i';
    $matches = array();
    $no = preg_match_all($searchfor, $html, $matches);
    if ($no) {
        $rawurls = array_filter(array_merge($matches[5], $matches[10]));
        //array_filter removes empty elements
        //remove any links that point somewhere they shouldn't
        foreach (array_keys($rawurls) as $rawurlkey) {
            if (!($cleanedurl = question_url_check($rawurls[$rawurlkey]))) {
                unset($rawurls[$rawurlkey]);
            } else {
                $rawurls[$rawurlkey] = $cleanedurl;
            }
        }
        $urls = array_flip($rawurls);
        // array_flip removes duplicate files
        // and when we merge arrays will continue to automatically remove duplicates
    } else {
        $urls = array();
    }
    return $urls;
}
Example #2
0
 function find_file_links($question, $courseid)
 {
     $urls = array();
     /// Question image
     if ($question->image != '') {
         if (substr(strtolower($question->image), 0, 7) == 'http://') {
             $matches = array();
             //support for older questions where we have a complete url in image field
             if (preg_match('!^' . question_file_links_base_url($courseid) . '(.*)!i', $question->image, $matches)) {
                 if ($cleanedurl = question_url_check($urls[$matches[2]])) {
                     $urls[$cleanedurl] = null;
                 }
             }
         } else {
             if ($question->image != '') {
                 if ($cleanedurl = question_url_check($question->image)) {
                     $urls[$cleanedurl] = null;
                     //will be set later
                 }
             }
         }
     }
     /// Questiontext and general feedback.
     $urls += question_find_file_links_from_html($question->questiontext, $courseid);
     $urls += question_find_file_links_from_html($question->generalfeedback, $courseid);
     /// Answers, if this question uses them.
     if (isset($question->options->answers)) {
         foreach ($question->options->answers as $answerkey => $answer) {
             /// URLs in the answers themselves, if appropriate.
             if ($this->has_html_answers()) {
                 $urls += question_find_file_links_from_html($answer->answer, $courseid);
             }
             /// URLs in the answer feedback.
             $urls += question_find_file_links_from_html($answer->feedback, $courseid);
         }
     }
     /// Set all the values of the array to the question object
     if ($urls) {
         $urls = array_combine(array_keys($urls), array_fill(0, count($urls), array($question->id)));
     }
     return $urls;
 }
 function find_file_links($question, $courseid)
 {
     $urls = array();
     if ($question->options->backgroundmedia->media != '') {
         if (substr(strtolower($question->options->backgroundmedia->media), 0, 7) == 'http://') {
             $matches = array();
             //support for older questions where we have a complete url in image field
             if (preg_match('!^' . question_file_links_base_url($courseid) . '(.*)!i', $question->options->backgroundmedia->media, $matches)) {
                 if ($cleanedurl = question_url_check($urls[$matches[2]])) {
                     $urls[$cleanedurl] = null;
                 }
             }
         } else {
             if ($question->options->backgroundmedia->media != '') {
                 if ($cleanedurl = question_url_check($question->options->backgroundmedia->media)) {
                     $urls[$cleanedurl] = null;
                     //will be set later
                 }
             }
         }
     }
     foreach ($question->options->media as $media) {
         if ($media->media != '') {
             if (substr(strtolower($media->media), 0, 7) == 'http://') {
                 $matches = array();
                 if (preg_match('!^' . question_file_links_base_url($courseid) . '(.*)!i', $media->media, $matches)) {
                     if ($cleanedurl = question_url_check($urls[$matches[2]])) {
                         $urls[$cleanedurl] = null;
                     }
                 }
             } else {
                 if ($media->media != '') {
                     if ($cleanedurl = question_url_check($media->media)) {
                         $urls[$cleanedurl] = null;
                         //will be set later
                     }
                 }
             }
         }
         $urls += question_find_file_links_from_html($media->questiontext, $courseid);
     }
     $urls += question_find_file_links_from_html($question->options->feedbackok, $courseid);
     $urls += question_find_file_links_from_html($question->options->feedbackmissed, $courseid);
     //set all the values of the array to the question object
     if ($urls) {
         $urls = array_combine(array_keys($urls), array_fill(0, count($urls), array($question->id)));
     }
     $urls = array_merge_recursive($urls, parent::find_file_links($question, $courseid));
     return $urls;
 }