Пример #1
0
function wikipedia_search($procd_descr)
{
    profiling_start('wikipedia_search');
    $TERMS = wikipedia_process_term($procd_descr);
    $url = wikipedia_url($TERMS);
    $data = cached_file_get_contents($url);
    Error::setPrepend($data);
    Error::generate('debug', 'WIKIPEDIA');
    eval('$arr = ' . $data . ';');
    foreach ($arr['query']['pages'] as $k => $v) {
        $title = urlencode($v['title']);
        $url = urlencode($v['fullurl']);
        // https://dgl.cx/2008/10/wikipedia-summary-dns
        if ($k == -1) {
            // not found
            return array();
        }
        break;
    }
    // this is probably a topic from a random unintended field like "frequency analysis (cryptoanalysis)"
    if (strlen($title) < strlen($TERMS) - 5 || strlen($title) > strlen($TERMS) + 5 || strrchr($title, '%28')) {
        return array();
    }
    $store = array('title' => urldecode(str_replace('+', ' ', $title)), 'link' => urldecode($url), 'source' => 'wikipedia');
    profiling_end('wikipedia_search');
    return array($store);
}
Пример #2
0
function google_search($procd_descr)
{
    profiling_start('google_search');
    $TERMS = urlencode($procd_descr . " Lecture Notes");
    $USERIP = $_SERVER['REMOTE_ADDR'];
    $url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q={$TERMS}&rsz=small";
    $data = cached_file_get_contents($url);
    $arr = json_decode($data, true);
    $results = $arr['responseData']['results'];
    $store = array();
    foreach ($results as $elem) {
        $link = $elem['url'];
        $title = $elem['titleNoFormatting'];
        array_push($store, array('title' => $title, 'link' => $link, 'source' => 'google'));
    }
    profiling_end('google_search');
    return $store;
}
Пример #3
0
function khanacad_search($procd_descr, $tags = array())
{
    global $CONFIG;
    global $ROOT;
    profiling_start('khanacad_search');
    $TERMS = urlencode($procd_descr);
    $URL = "{$ROOT}/scraping/khan.xml";
    $data = file_get_contents($URL);
    $parser = xml_parser_create();
    $status = xml_parse_into_struct($parser, $data, $xml);
    if ($status == 0) {
        echo xml_error_string(xml_get_error_code($parser));
    }
    xml_parser_free($parser);
    $terms = preg_split("/\\s+|\\+/", $TERMS, null, PREG_SPLIT_NO_EMPTY);
    $ret = search_with_tags($terms, $tags, 'khanacad_query', $xml);
    profiling_end('khanacad_search');
    return $ret;
}
Пример #4
0
function itunesu_search($procd_descr)
{
    $TERMS = urlencode($procd_descr);
    $USERIP = $_SERVER['REMOTE_ADDR'];
    $NRESULTS = 4;
    profiling_start('itunesu_search');
    ini_set('user_agent', 'iTunes/8.1');
    $url = "http://ax.search.itunes.apple.com/WebObjects/MZSearch.woa/wa/advancedSearch?descriptionTerm={$TERMS}&media=iTunesU";
    $data = cached_file_get_contents($url);
    $parser = xml_parser_create();
    xml_parse_into_struct($parser, $data, $xml);
    xml_parser_free($parser);
    $store = array();
    foreach ($xml as $key => $elem) {
        if ($elem['tag'] == 'GOTOURL' && $elem['level'] == 21 && $elem['type'] == 'open' && count($store) < $NRESULTS) {
            array_push($store, array('source' => 'itunesu', 'url' => $elem['attributes']['URL'], 'title' => $elem['attributes']['DRAGGINGNAME'], 'art' => $xml[$key + 2]['attributes']['URL']));
        }
    }
    profiling_end('itunesu_search');
    return $store;
}
Пример #5
0
                define('NO_MOODLE_COOKIES', false);
            }
        }
    }
}
// start session and prepare global $SESSION, $USER
session_get_instance();
$SESSION =& $_SESSION['SESSION'];
$USER =& $_SESSION['USER'];
// initialise ME's
// This must presently come AFTER $USER has been set up.
initialise_fullme();
// Late profiling, only happening if early one wasn't started
if (!empty($CFG->profilingenabled)) {
    require_once $CFG->libdir . '/xhprof/xhprof_moodle.php';
    if (profiling_start()) {
        register_shutdown_function('profiling_stop');
    }
}
// Process theme change in the URL.
if (!empty($CFG->allowthemechangeonurl) and !empty($_GET['theme'])) {
    // we have to use _GET directly because we do not want this to interfere with _POST
    $urlthemename = optional_param('theme', '', PARAM_SAFEDIR);
    try {
        $themeconfig = theme_config::load($urlthemename);
        // Makes sure the theme can be loaded without errors.
        if ($themeconfig->name === $urlthemename) {
            $SESSION->theme = $urlthemename;
        } else {
            unset($SESSION->theme);
        }
Пример #6
0
            @header('Content-type: application/json; charset=utf-8');
        }
    }
} else {
    if (!CLI_SCRIPT) {
        @header('Content-type: text/html; charset=utf-8');
    }
}
// Initialise some variables that are supposed to be set in config.php only.
if (!isset($CFG->filelifetime)) {
    $CFG->filelifetime = 60 * 60 * 6;
}
// Late profiling, only happening if early one wasn't started
if (!empty($CFG->profilingenabled)) {
    require_once $CFG->libdir . '/xhprof/xhprof_moodle.php';
    profiling_start();
}
// Hack to get around max_input_vars restrictions,
// we need to do this after session init to have some basic DDoS protection.
workaround_max_input_vars();
// Process theme change in the URL.
if (!empty($CFG->allowthemechangeonurl) and !empty($_GET['theme'])) {
    // we have to use _GET directly because we do not want this to interfere with _POST
    $urlthemename = optional_param('theme', '', PARAM_PLUGIN);
    try {
        $themeconfig = theme_config::load($urlthemename);
        // Makes sure the theme can be loaded without errors.
        if ($themeconfig->name === $urlthemename) {
            $SESSION->theme = $urlthemename;
        } else {
            unset($SESSION->theme);
Пример #7
0
         }), 'wikipedia' => array_filter($results, function ($elem) {
             return filter_result($elem, array('source' => 'wikipedia', 'rating' => 0));
         }), 'khanacad' => array_filter($results, function ($elem) {
             return filter_result($elem, array('source' => 'khanacad', 'rating' => 1.1));
         }), 'itunesu' => array_filter($results, function ($elem) {
             return filter_result($elem, array('source' => 'itunesu', 'rating' => 1));
         }), 'comment_id' => $topicid, 'comments' => array_map(function ($a) {
             return $a['id'];
         }, Comment::ListAll($topicid))));
         Error::generate('debug', "finishing deal with tags and procd_descr, topic {$topicid}/{$topicsubject}, result:");
         Error::generate('debug', $search_results);
     }
     $memcached->set('' . $icrs->cid, $search_results);
 }
 profiling_end('deal with tags and procd_descr');
 profiling_start('wrap up processing and package data for the view');
 $args['pagetitle'] = "{$icrs->title} ({$icrs->code})";
 $args['pageurl'] = $_SERVER['REQUEST_URI'];
 $args['course'] = array('id' => (int) $icrs->id, 'title' => $icrs->title, 'code' => $icrs->code, 'descr' => $icrs->descr);
 $args['searchresults'] = $search_results;
 $args['comment_id'] = $icrs->cid;
 $args['comments'] = array_map(function ($a) {
     return $a['id'];
 }, Comment::ListAll($icrs->cid));
 $args['actions'] = $ACTIONS;
 $_SESSION['lastargs'] = $args;
 preg_match('/^[a-zA-Z]+/', $icrs->code, $matches);
 $args['code'] = $matches[0];
 $args['university'] = array('id' => $icrs->university, 'name' => University::GetName($icrs->university));
 $args['area'] = array('id' => $areaid = University::GetAreaID($args['university']['id']), 'name' => Area::GetName($areaid));
 $args['country'] = array('id' => $countryid = Area::GetCountryID($args['area']), 'name' => Country::GetName($countryid));
Пример #8
0
function youtube_query($TERMS, $srch, $crs)
{
    global $CONFIG;
    profiling_start('youtube_query');
    $TAGS = $srch;
    $rtags = get_full_tags($crs);
    $str = urlencode($TERMS);
    //."+".implode("+", $srch);
    $url = "http://gdata.youtube.com/feeds/api/videos?q={$str}&orderby=relevance&start-index=1&max-results=2&v=2&format=5";
    $data = cached_file_get_contents($url);
    $parser = xml_parser_create();
    xml_parse_into_struct($parser, $data, $xml);
    xml_parser_free($parser);
    $store = array();
    foreach ($xml as $elem) {
        switch ($elem['tag']) {
            case 'MEDIA:THUMBNAIL':
                $content['thumbnail_url'] = $elem['attributes']['URL'];
                $content['thumbnail_width'] = $elem['attributes']['WIDTH'];
                $content['thumbnail_height'] = $elem['attributes']['HEIGHT'];
                break;
            case 'MEDIA:PLAYER':
                $content['link'] = $elem['attributes']['URL'];
                break;
            case 'CONTENT':
                if ($elem['attributes']['TYPE'] == 'application/x-shockwave-flash') {
                    $val = $elem['attributes']['SRC'];
                } else {
                    continue 2;
                }
                $content['src'] = $val;
                break;
            case 'MEDIA:CATEGORY':
                if ($val != 'Howto' && $val != 'Education' && $val != 'News' && $val != 'Tech') {
                    continue 2;
                } else {
                    if ($val == 'Education') {
                        $content['rating'] += 5;
                    }
                }
                $val = $elem['value'];
                $content[strtolower($elem['tag'])] = $val;
                break;
            case 'CATEGORY':
                if ($elem['attributes']['SCHEME'] != 'http://gdata.youtube.com/schemas/2007/categories.cat') {
                    continue 2;
                } else {
                    $val = $elem['attributes']['TERM'];
                    if ($val != 'Howto' && $val != 'Education' && $val != 'News' && $val != 'Tech') {
                        continue 2;
                    } else {
                        if ($val == 'Education') {
                            $content['rating'] += 5;
                        }
                    }
                    $content[strtolower($elem['tag'])] = $val;
                }
                break;
            case 'MEDIA:KEYWORDS':
                $val = $elem['value'];
                if (!$val) {
                    continue 2;
                }
                if ($rtags) {
                    $matches = count_matches(explode(', ', $val), explode(',', $rtags));
                } else {
                    $matches = false;
                }
                if ($matches > 0) {
                    $content[strtolower($elem['tag'])] = $val;
                    $content['rating'] += 5;
                } else {
                    $content['rating'] -= 5;
                    continue 2;
                }
                break;
            case 'MEDIA:DESCRIPTION':
                // YT:RATING : attributes : NUMDISLIKES, NUMLIKES
                $val = $elem['value'];
                if ($rtags) {
                    $matches = count_matches(explode(' ', $val), explode(',', $rtags));
                } else {
                    $matches = false;
                }
                if ($matches && $matches > 0) {
                    $content[strtolower($elem['tag'])] = $val;
                    $content['rating'] += 2;
                } else {
                    $content['rating'] -= 2;
                    continue 2;
                }
                break;
            case 'TITLE':
                $val = $elem['value'];
                $content[strtolower($elem['tag'])] = $val;
                break;
            case 'ENTRY':
                if ($elem['type'] == 'open') {
                    $content = array('src' => false, 'title' => false, 'media:keywords' => false, 'media:description' => false, 'category' => false, 'rating' => 10, 'thumbnail_url' => false, 'thumbnail_width' => false, 'thumbnail_height' => false, 'link' => false, 'source' => 'youtube');
                } else {
                    if ($elem['type'] == 'close') {
                        if ($content['rating'] > 8) {
                            if ($CONFIG['debug']) {
                                $content['title'] .= ' - rating=' . $content['rating'];
                            }
                            array_push($store, $content);
                        }
                    }
                }
            default:
        }
    }
    profiling_end('youtube_query');
    return $store;
}
Пример #9
0
profiling_start('create regions');
foreach ($areas['Canada'] as $a) {
    Area::Create($a, $country_id);
}
profiling_end('create regions');
$area_id = Area::GetID('Ontario', $country_id);
profiling_start('create universities');
foreach ($universities['Canada']['Ontario'] as $uni) {
    University::Create($uni, $area_id);
}
profiling_end('create universities');
$code = "";
$title = "";
$descr = "";
$uni_id = University::GetID('University of Waterloo');
profiling_start('create courses');
foreach ($xml as $a) {
    if ($a['tag'] == "CODE") {
        $code = $a['value'];
    } else {
        if ($a['tag'] == "TITLE") {
            $title = $a['value'];
        } else {
            if ($a['tag'] == "DESCRIPTION") {
                $descr = $a['value'];
                $code = ltrim(rtrim($code));
                $title = ltrim(rtrim($title));
                $descr = ltrim(rtrim($descr));
                $cid = Comment::Create(array('subject' => $code, 'id' => 1));
                $cd = new CourseDefn(mysql_real_escape_string(htmlspecialchars($code)));
                $cd->title = db_real_escape_string(htmlspecialchars($title));
Пример #10
0
                     $mcr = curl_multi_exec($mch, $active);
                     Error::generate('debug', 'starting');
                 } else {
                     // preempted
                     // lock *was* acquired if blocking
                     if ($blocking) {
                         db_end_transaction('primitive_cache', $md5top);
                     }
                     $n_preempted_reqs++;
                 }
                 profiling_end('start of cycle');
             }
         }
     }
 } else {
     profiling_start('IPC');
     foreach ($r as $s) {
         if ($s == $sock) {
             // new connection
             if (!($newsock = socket_accept($sock))) {
                 Error::generate('debug', "Error in classmate{$argv['1']}: " . socket_strerror(socket_last_error()));
             } else {
                 $clients[intval($newsock)] = $newsock;
                 $data[intval($newsock)] = '';
             }
         } else {
             // established connection
             if (($read = socket_read($s, 1024)) === false || $read == '') {
                 if ($read != '') {
                     Error::generate('debug', "Error in classmate{$argv['1']}: " . socket_strerror(socket_last_error()));
                 } else {
Пример #11
0
 public static function generate($priority, $error, $flags = 'none')
 {
     global $CONFIG;
     global $ROOT;
     profiling_start('error::generate');
     $class = '';
     if (!self::$logging_enabled) {
         goto end;
     }
     //$class .= 'hidden';
     if (is_string($priority)) {
         $priority = self::$PRIORITY[$priority];
     }
     if ($CONFIG['debug'] === false && $priority == self::$PRIORITY['debug']) {
         goto end;
     }
     if (session_id() != "" && isset($_SESSION['errors'])) {
         self::$errors = $_SESSION['errors'];
     }
     if ($flags & self::$FLAGS['single'] && count(self::$errors) > 0) {
         goto end;
     }
     if ($flags & self::$FLAGS['override'] && count(self::$errors) > 0) {
         self::$errors = array();
     }
     // format string
     $pname = 'notice';
     foreach (self::$PRIORITY as $k => $v) {
         if ($v == $priority) {
             $pname = $k;
             break;
         }
     }
     $bgcolour = self::$bgcolour;
     $fmt = "<div class=\"{$pname} {$class}\" style=\"background-color: {$bgcolour}\">%s</div>\r\n";
     // log it
     $fp = fopen($ROOT . '/admin/debug.html', 'a');
     static::_output($fp, $fmt, $priority, $error);
     fclose($fp);
     // behaviour on error
     switch ($priority) {
         case self::$PRIORITY['fatal']:
             die($error);
             break;
         case self::$PRIORITY['warn']:
         case self::$PRIORITY['notice']:
         case self::$PRIORITY['success']:
             array_push(self::$errors, array('priority' => $priority, 'msg' => $error));
             break;
         case self::$PRIORITY['prod_debug']:
         case self::$PRIORITY['suspicious']:
             $fp = fopen($ROOT . '/admin/debug_special.html', 'a');
             static::_output($fp, $fmt, $priority, $error);
             fclose($fp);
             break;
         case self::$PRIORITY['debug']:
             break;
     }
     if (session_id() != "") {
         $_SESSION['errors'] = self::$errors;
     }
     end:
     profiling_end('error::generate');
 }