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); }
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; }
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; }
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; }
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); }
@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);
}), '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));
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; }
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));
$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 {
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'); }