Beispiel #1
0
/**
 * Handles the sending of file data to the user's browser, including support for
 * byteranges etc.
 *
 * The $options parameter supports the following keys:
 *  (string|null) preview - send the preview of the file (e.g. "thumb" for a thumbnail)
 *  (string|null) filename - overrides the implicit filename
 *  (bool) dontdie - return control to caller afterwards. this is not recommended and only used for cleanup tasks.
 *      if this is passed as true, ignore_user_abort is called.  if you don't want your processing to continue on cancel,
 *      you must detect this case when control is returned using connection_aborted. Please not that session is closed
 *      and should not be reopened.
 *
 * @category files
 * @param stored_file $stored_file local file object
 * @param int $lifetime Number of seconds before the file should expire from caches (null means $CFG->filelifetime)
 * @param int $filter 0 (default)=no filtering, 1=all files, 2=html files only
 * @param bool $forcedownload If true (default false), forces download of file rather than view in browser/plugin
 * @param array $options additional options affecting the file serving
 * @return null script execution stopped unless $options['dontdie'] is true
 */
function send_stored_file($stored_file, $lifetime = null, $filter = 0, $forcedownload = false, array $options = array())
{
    global $CFG, $COURSE;
    if (empty($options['filename'])) {
        $filename = null;
    } else {
        $filename = $options['filename'];
    }
    if (empty($options['dontdie'])) {
        $dontdie = false;
    } else {
        $dontdie = true;
    }
    if ($lifetime === 'default' or is_null($lifetime)) {
        $lifetime = $CFG->filelifetime;
    }
    if (!empty($options['preview'])) {
        // replace the file with its preview
        $fs = get_file_storage();
        $preview_file = $fs->get_file_preview($stored_file, $options['preview']);
        if (!$preview_file) {
            // unable to create a preview of the file, send its default mime icon instead
            if ($options['preview'] === 'tinyicon') {
                $size = 24;
            } else {
                if ($options['preview'] === 'thumb') {
                    $size = 90;
                } else {
                    $size = 256;
                }
            }
            $fileicon = file_file_icon($stored_file, $size);
            send_file($CFG->dirroot . '/pix/' . $fileicon . '.png', basename($fileicon) . '.png');
        } else {
            // preview images have fixed cache lifetime and they ignore forced download
            // (they are generated by GD and therefore they are considered reasonably safe).
            $stored_file = $preview_file;
            $lifetime = DAYSECS;
            $filter = 0;
            $forcedownload = false;
        }
    }
    // handle external resource
    if ($stored_file && $stored_file->is_external_file() && !isset($options['sendcachedexternalfile'])) {
        $stored_file->send_file($lifetime, $filter, $forcedownload, $options);
        die;
    }
    if (!$stored_file or $stored_file->is_directory()) {
        // nothing to serve
        if ($dontdie) {
            return;
        }
        die;
    }
    if ($dontdie) {
        ignore_user_abort(true);
    }
    \core\session\manager::write_close();
    // Unlock session during file serving.
    // Use given MIME type if specified, otherwise guess it using mimeinfo.
    // IE, Konqueror and Opera open html file directly in browser from web even when directed to save it to disk :-O
    // only Firefox saves all files locally before opening when content-disposition: attachment stated
    $filename = is_null($filename) ? $stored_file->get_filename() : $filename;
    $isFF = core_useragent::is_firefox();
    // only FF properly tested
    $mimetype = ($forcedownload and !$isFF) ? 'application/x-forcedownload' : ($stored_file->get_mimetype() ? $stored_file->get_mimetype() : mimeinfo('type', $filename));
    // if user is using IE, urlencode the filename so that multibyte file name will show up correctly on popup
    if (core_useragent::is_ie()) {
        $filename = rawurlencode($filename);
    }
    if ($forcedownload) {
        header('Content-Disposition: attachment; filename="' . $filename . '"');
    } else {
        if ($mimetype !== 'application/x-shockwave-flash') {
            // If this is an swf don't pass content-disposition with filename as this makes the flash player treat the file
            // as an upload and enforces security that may prevent the file from being loaded.
            header('Content-Disposition: inline; filename="' . $filename . '"');
        }
    }
    if ($lifetime > 0) {
        $private = '';
        if (isloggedin() and !isguestuser()) {
            $private = ' private,';
        }
        header('Cache-Control:' . $private . ' max-age=' . $lifetime . ', no-transform');
        header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $lifetime) . ' GMT');
        header('Pragma: ');
    } else {
        // Do not cache files in proxies and browsers
        if (is_https()) {
            // HTTPS sites - watch out for IE! KB812935 and KB316431.
            header('Cache-Control: private, max-age=10, no-transform');
            header('Expires: ' . gmdate('D, d M Y H:i:s', 0) . ' GMT');
            header('Pragma: ');
        } else {
            //normal http - prevent caching at all cost
            header('Cache-Control: private, must-revalidate, pre-check=0, post-check=0, max-age=0, no-transform');
            header('Expires: ' . gmdate('D, d M Y H:i:s', 0) . ' GMT');
            header('Pragma: no-cache');
        }
    }
    // Allow cross-origin requests only for Web Services.
    // This allow to receive requests done by Web Workers or webapps in different domains.
    if (WS_SERVER) {
        header('Access-Control-Allow-Origin: *');
    }
    if (empty($filter)) {
        // send the contents
        readfile_accel($stored_file, $mimetype, !$dontdie);
    } else {
        // Try to put the file through filters
        if ($mimetype == 'text/html') {
            $options = new stdClass();
            $options->noclean = true;
            $options->nocache = true;
            // temporary workaround for MDL-5136
            $text = $stored_file->get_content();
            $text = file_modify_html_header($text);
            $output = format_text($text, FORMAT_HTML, $options, $COURSE->id);
            readstring_accel($output, $mimetype, false);
        } else {
            if ($mimetype == 'text/plain' and $filter == 1) {
                // only filter text if filter all files is selected
                $options = new stdClass();
                $options->newlines = false;
                $options->noclean = true;
                $text = $stored_file->get_content();
                $output = '<pre>' . format_text($text, FORMAT_MOODLE, $options, $COURSE->id) . '</pre>';
                readstring_accel($output, $mimetype, false);
            } else {
                // Just send it out raw
                readfile_accel($stored_file, $mimetype, !$dontdie);
            }
        }
    }
    if ($dontdie) {
        return;
    }
    die;
    //no more chars to output!!!
}
Beispiel #2
0
 public function list_supported_urls(array $urls, array $options = array())
 {
     $extensions = $this->get_supported_extensions();
     $result = array();
     foreach ($urls as $url) {
         $ext = core_media::get_extension($url);
         if (in_array($ext, $extensions)) {
             if ($ext === 'ogg' || $ext === 'oga') {
                 // Formats .ogg and .oga are not supported in IE, Edge, or Safari.
                 if (core_useragent::is_ie() || core_useragent::is_edge() || core_useragent::is_safari()) {
                     continue;
                 }
             } else {
                 // Formats .aac, .mp3, and .m4a are not supported in Opera.
                 if (core_useragent::is_opera()) {
                     continue;
                 }
                 // Formats .mp3 and .m4a were not reliably supported in Firefox before 27.
                 // https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
                 // has the details. .aac is still not supported.
                 if (core_useragent::is_firefox() && ($ext === 'aac' || !core_useragent::check_firefox_version(27))) {
                     continue;
                 }
             }
             // Old Android versions (pre 2.3.3) 'support' audio tag but no codecs.
             if (core_useragent::is_webkit_android() && !core_useragent::is_webkit_android('533.1')) {
                 continue;
             }
             $result[] = $url;
         }
     }
     return $result;
 }
Beispiel #3
0
 public function list_supported_urls(array $urls, array $options = array())
 {
     $extensions = $this->get_supported_extensions();
     $result = array();
     foreach ($urls as $url) {
         $ext = core_media::get_extension($url);
         if (in_array($ext, $extensions)) {
             if ($ext === 'ogg' || $ext === 'oga') {
                 // Formats .ogg and .oga are not supported in IE or Safari.
                 if (core_useragent::is_ie() || core_useragent::is_safari()) {
                     continue;
                 }
             } else {
                 // Formats .aac, .mp3, and .m4a are not supported in Firefox or Opera.
                 if (core_useragent::is_firefox() || core_useragent::is_opera()) {
                     continue;
                 }
             }
             // Old Android versions (pre 2.3.3) 'support' audio tag but no codecs.
             if (core_useragent::is_webkit_android() && !core_useragent::is_webkit_android('533.1')) {
                 continue;
             }
             $result[] = $url;
         }
     }
     return $result;
 }
 /**
  * Modifies $_SERVER['HTTP_USER_AGENT'] manually to check if check_browser_version
  * works as expected.
  */
 public function test_check_browser_version()
 {
     core_useragent::instance(true, $this->user_agents['Safari']['412']['Mac OS X']);
     $this->assertTrue(core_useragent::is_safari());
     $this->assertTrue(core_useragent::check_safari_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_safari_ios());
     $this->assertFalse(core_useragent::check_safari_ios_version());
     core_useragent::instance(true, $this->user_agents['Safari iOS']['528']['iPhone']);
     $this->assertTrue(core_useragent::is_safari_ios());
     $this->assertTrue(core_useragent::check_safari_ios_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_ios_version('527'));
     $this->assertFalse(core_useragent::check_safari_ios_version(590));
     $this->assertFalse(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['530']['Nexus']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Samsung GT-9505']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Nexus 5']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_chrome_version(8));
     $this->assertFalse(core_useragent::check_chrome_version(10));
     $this->assertFalse(core_useragent::check_safari_version('1'));
     core_useragent::instance(true, $this->user_agents['Opera']['9.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_opera());
     $this->assertTrue(core_useragent::check_opera_version());
     $this->assertTrue(core_useragent::check_opera_version('8.0'));
     $this->assertFalse(core_useragent::check_opera_version('10.0'));
     core_useragent::instance(true, $this->user_agents['MSIE']['6.0']['Windows XP SP2']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     core_useragent::instance(true, $this->user_agents['MSIE']['5.0']['Windows 98']);
     $this->assertFalse(core_useragent::is_ie());
     $this->assertFalse(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0i']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0i']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0i']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     core_useragent::instance(true, $this->user_agents['Firefox']['1.0.6']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertFalse(core_useragent::check_gecko_version(20030516));
     $this->assertFalse(core_useragent::check_gecko_version(20051106));
     $this->assertFalse(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertFalse(core_useragent::check_gecko_version('2'));
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('4'));
     core_useragent::instance(true, $this->user_agents['Firefox']['15.0a2']['Windows']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('18'));
     core_useragent::instance(true, $this->user_agents['Firefox']['18.0']['Mac OS X']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version('18.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertTrue(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_firefox_version('19'));
     $this->assertFalse(core_useragent::check_gecko_version('19'));
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.0']['Windows']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_gecko_version('3.6'));
     $this->assertFalse(core_useragent::check_gecko_version('4.0'));
     $this->assertFalse(core_useragent::is_firefox());
     $this->assertFalse(core_useragent::check_firefox_version());
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.1']['Linux']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('4.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version(4.0));
     $this->assertFalse(core_useragent::check_firefox_version(5));
     $this->assertFalse(core_useragent::check_gecko_version('18.0'));
 }
Beispiel #5
0
 /**
  * @dataProvider user_agents_providers
  */
 public function test_useragent_firefox($useragent, $tests)
 {
     // Setup the core_useragent instance.
     core_useragent::instance(true, $useragent);
     if (isset($tests['is_firefox']) && $tests['is_firefox']) {
         $this->assertTrue(core_useragent::is_firefox(), "Browser was not identified as a firefox browser");
         $this->assertTrue(core_useragent::check_firefox_version());
     } else {
         $this->assertFalse(core_useragent::is_firefox(), "Browser was incorrectly identified as a firefox browser");
         $this->assertFalse(core_useragent::check_firefox_version());
     }
     $versions = array('1.5' => false, '3.0' => false, '4' => false, '10' => false, '15' => false, '18' => false, '19' => false, '33' => false);
     if (isset($tests['check_firefox_version'])) {
         // The test provider has overwritten some of the above checks.
         // Must use the '+' operator, because array_merge will incorrectly rewrite the array keys for integer-based indexes.
         $versions = $tests['check_firefox_version'] + $versions;
     }
     foreach ($versions as $version => $result) {
         $this->assertEquals($result, core_useragent::check_firefox_version($version), "Version incorrectly determined for Firefox version '{$version}'");
     }
 }
Beispiel #6
0
 /**
  * Modifies $_SERVER['HTTP_USER_AGENT'] manually to check if check_browser_version
  * works as expected.
  */
 public function test_check_browser_version()
 {
     core_useragent::instance(true, $this->user_agents['Safari']['412']['Mac OS X']);
     $this->assertTrue(core_useragent::is_safari());
     $this->assertTrue(core_useragent::check_safari_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_safari_ios());
     $this->assertFalse(core_useragent::check_safari_ios_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Safari iOS']['528']['iPhone']);
     $this->assertTrue(core_useragent::is_safari_ios());
     $this->assertTrue(core_useragent::check_safari_ios_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_ios_version('527'));
     $this->assertFalse(core_useragent::check_safari_ios_version(590));
     $this->assertFalse(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['530']['Nexus']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Samsung GT-9505']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Nexus 5']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_chrome_version(8));
     $this->assertFalse(core_useragent::check_chrome_version(10));
     $this->assertFalse(core_useragent::check_safari_version('1'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Opera']['9.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_opera());
     $this->assertTrue(core_useragent::check_opera_version());
     $this->assertTrue(core_useragent::check_opera_version('8.0'));
     $this->assertFalse(core_useragent::check_opera_version('10.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['6.0']['Windows XP SP2']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['5.0']['Windows 98']);
     $this->assertFalse(core_useragent::is_ie());
     $this->assertFalse(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['7.0']['Windows XP SP2']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('8.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['7.0b']['Windows XP']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('8.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0i']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0i']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0i']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['1.0.6']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertFalse(core_useragent::check_gecko_version(20030516));
     $this->assertFalse(core_useragent::check_gecko_version(20051106));
     $this->assertFalse(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertFalse(core_useragent::check_gecko_version('2'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('4'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['15.0a2']['Windows']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('18'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['18.0']['Mac OS X']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version('18.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertTrue(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_firefox_version('19'));
     $this->assertFalse(core_useragent::check_gecko_version('19'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.0']['Windows']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_gecko_version('3.6'));
     $this->assertFalse(core_useragent::check_gecko_version('4.0'));
     $this->assertFalse(core_useragent::is_firefox());
     $this->assertFalse(core_useragent::check_firefox_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.1']['Linux']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('4.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version(4.0));
     $this->assertFalse(core_useragent::check_firefox_version(5));
     $this->assertFalse(core_useragent::check_gecko_version('18.0'));
     $this->assertFalse(core_useragent::is_msword());
     // We're not really interested in what MS Word gets identified as beyond MS Word itself.
     core_useragent::instance(true, $this->user_agents['MS Word']['2010']['Windows 7']);
     $this->assertTrue(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MS Word']['2010']['Mac OS X']);
     $this->assertTrue(core_useragent::is_msword());
     // Outlook should not be considered to be MS Word.
     core_useragent::instance(true, $this->user_agents['MS Outlook']['2010']['Windows 7']);
     $this->assertFalse(core_useragent::is_msword());
     // Meridio should not be considered to be MS Word.
     core_useragent::instance(true, $this->user_agents['Meridio']['5.0.251']['Windows XP']);
     $this->assertFalse(core_useragent::is_msword());
 }