/**
  * Initialize demanded controller.
  * 
  * @param Registry $registry Registry object.
  * @return Controller | void
  * @author anza
  */
 public static function create($registry)
 {
     $parser = new URLParser();
     $controller = $parser->getController();
     $actions = $parser->getActions();
     if ($controller == null) {
         $controller = self::$inSession[0];
     }
     if ($controller == 'logout') {
         $registry->session->destroy();
         $controller = self::$inSession[0];
     }
     $controllerName = $controller . 'Controller';
     $modelName = $controller . 'Model';
     $allowedControllers = $registry->session->isStarted() ? self::$inSession : self::$noSession;
     $target = $registry->session->isStarted() ? self::$inSession[0] : self::$noSession[0];
     if (in_array($controller, $allowedControllers)) {
         $registry->controllerName = $controller;
         $controller = new $controllerName($actions, $registry);
         $controller->model = new $modelName($registry);
         return $controller;
     } else {
         Navigator::redirectTo($target);
     }
 }
Ejemplo n.º 2
0
function addMOProperty($unifiedName, $client)
{
    $mysqli = new mysqli(HOSTNAME, USERNAME, PASSWD, DATABASE);
    if ($mysqli->connect_errno) {
        die("error: " . $mysqli->connect_error);
    }
    $localTable = "MOSpacePeople";
    $parser = new HumanNameParser_Parser($unifiedName);
    $last = $parser->getLast();
    $first = $parser->getFirst();
    //@Debug
    //echo "Checking ".$last.", ".$first.".....";
    $q = "SELECT * from " . $localTable . " where firstname='" . $mysqli->real_escape_string($first) . "' and lastname='" . $mysqli->real_escape_string($last) . "'";
    $fromMU = 0;
    $isProfessor = 0;
    if ($result = $mysqli->query($q)) {
        if ($result->num_rows == 1) {
            //@Debug
            //echo "found in local database.....";
            $fromMU = 1;
            if ($resAssocArray = $result->fetch_assoc()) {
                if (isset($resAssocArray['Title'])) {
                    $isProfessor = findIfProfessor($resAssocArray['Title']) == 1 ? 1 : 0;
                    //@Debug
                    //if($isProfessor == 1) echo "is a prof\n"; else echo "NOT a prof\n";
                } else {
                    $isProfessor = 0;
                    //@Debu
                    //echo "NOT a prof\n";
                }
            } else {
                die("fetch result from MOSpacePeople failed");
            }
        } else {
            $peopleFinderURL = "https://webservices.doit.missouri.edu/peoplefinderWS/peoplefinderws.asmx/PeopleFinderXml?firstName=" . urlencode($first) . "&lastname=" . urlencode($last) . "&department=&phoneno=&email=";
            $url_parser = new URLParser($peopleFinderURL);
            $retArr = $url_parser->XMLToArray();
            if (intval($retArr['@attributes']['found']) == 1) {
                //@Debug
                //echo "found in Peoplefinder...";
                $fromMU = 1;
                $title = array_key_exists("Title", $retArr['Person']) && !empty($retArr['Person']['Title']) ? $retArr['Person']['Title'] : "";
                $isProfessor = findIfProfessor($title) == 1 ? 1 : 0;
                //@Debug
                //if($isProfessor == 1) echo "is a prof\n"; else echo "NOT a prof\n";
            } else {
                $isProfessor = 0;
                //@Debug
                //echo "NOT a prof\n";
            }
        }
    } else {
        die("query: " . $q . "\nFailed");
    }
    $q_str = "match (u:Person {name: \"" . $unifiedName . "\"}) set u.fromMU = " . $fromMU . ", u.isProfessor = " . $isProfessor;
    $query = new Query($client, $q_str);
    $client->executeCypherQuery($query);
}
 /**
  * @see EventListener::execute()
  */
 public function execute($eventObj, $className, $eventName)
 {
     if (empty(URLParser::$text)) {
         return;
     }
     // search pattern for finding all urls without title
     $urlPattern = "~\\[url\\](.*?)\\[/url\\]~i";
     URLParser::$text = preg_replace_callback($urlPattern, array($this, 'makeURLTitle'), URLParser::$text);
 }
 /**
  * @see EventListener::execute()
  */
 public function execute($eventObj, $className, $eventName)
 {
     if (empty(URLParser::$text)) {
         return;
     }
     // reset data
     $this->postIDToThreadID = $this->threads = array();
     $threadIDs = $postIDs = array();
     // get page urls
     $pageURLs = URLBBCode::getPageURLs();
     $pageURLs = '(?:' . implode('|', array_map(create_function('$a', 'return preg_quote($a, \'~\');'), $pageURLs)) . ')';
     // build search pattern
     $threadIDPattern = "~\\[url\\](" . $pageURLs . "/?" . $this->threadURLPattern . ".*?)\\[/url\\]~i";
     $postIDPattern = "~\\[url\\](" . $pageURLs . "/?" . $this->postURLPattern . ".*?)\\[/url\\]~i";
     // find thread ids
     if (preg_match_all($threadIDPattern, URLParser::$text, $matches)) {
         $threadIDs = $matches[2];
     }
     // find post ids
     if (preg_match_all($postIDPattern, URLParser::$text, $matches)) {
         $postIDs = $matches[2];
     }
     if (count($threadIDs) > 0 || count($postIDs) > 0) {
         // get thread ids
         if (count($postIDs)) {
             $sql = "SELECT\tpostID, threadID\n\t\t\t\t\tFROM \twbb" . WBB_N . "_post\n\t\t\t\t\tWHERE \tpostID IN (" . implode(",", $postIDs) . ")";
             $result = WCF::getDB()->sendQuery($sql);
             while ($row = WCF::getDB()->fetchArray($result)) {
                 $this->postIDToThreadID[$row['postID']] = $row['threadID'];
                 $threadIDs[] = $row['threadID'];
             }
         }
         // get accessible boards
         require_once WBB_DIR . 'lib/data/board/Board.class.php';
         $boardIDs = Board::getAccessibleBoards();
         if (empty($boardIDs)) {
             return;
         }
         // get topics and prefixes :)
         if (count($threadIDs)) {
             // remove duplicates
             $threadIDs = array_unique($threadIDs);
             $sql = "SELECT\tthreadID, prefix, topic\n\t\t\t\t\tFROM \twbb" . WBB_N . "_thread\n\t\t\t\t\tWHERE \tthreadID IN (" . implode(",", $threadIDs) . ")\n\t\t\t\t \t\tAND boardid IN (0" . $boardIDs . ")";
             $result = WCF::getDB()->sendQuery($sql);
             while ($row = WCF::getDB()->fetchArray($result)) {
                 $this->threads[$row['threadID']] = $row;
             }
         }
         if (count($this->threads) > 0) {
             // insert topics
             URLParser::$text = preg_replace_callback($threadIDPattern, array($this, 'buildThreadURLCallback'), URLParser::$text);
             URLParser::$text = preg_replace_callback($postIDPattern, array($this, 'buildPostURLCallback'), URLParser::$text);
         }
     }
 }
Ejemplo n.º 5
0
 /**
  * Caches code bbcodes to avoid parsing of urls inside them.
  * 
  * @param	string		$text
  * @return	string
  */
 private static function cacheCodes($text)
 {
     if (self::$sourceCodeRegEx === null) {
         self::$sourceCodeRegEx = implode('|', WCF::getCache()->get('bbcodes', 'sourceCodes'));
     }
     if (!empty(self::$sourceCodeRegEx)) {
         self::$cachedCodes = array();
         $text = preg_replace_callback("~(\\[(" . self::$sourceCodeRegEx . ")\n\t\t\t\t(?:=\n\t\t\t\t\t(?:\\'[^\\'\\\\]*(?:\\\\.[^\\'\\\\]*)*\\'|[^,\\]]*)\n\t\t\t\t\t(?:,(?:\\'[^\\'\\\\]*(?:\\\\.[^\\'\\\\]*)*\\'|[^,\\]]*))*\n\t\t\t\t)?\\])\n\t\t\t\t(.*?)\n\t\t\t\t(?:\\[/\\2\\])~six", array('URLParser', 'cacheCodesCallback'), $text);
     }
     return $text;
 }
 /**
  * @see EventListener::execute()
  */
 public function execute($eventObj, $className, $eventName)
 {
     if (!MODULE_CONTEST || empty(URLParser::$text)) {
         return;
     }
     // reset data
     $this->classes = $this->entries = array();
     $classIDArray = $contestIDArray = array();
     // get page urls
     $pageURLs = URLBBCode::getPageURLs();
     $pageURLs = '(?:' . implode('|', array_map('preg_quote', $pageURLs)) . ')';
     // build search pattern
     $classIDPattern = "!\\[url\\](" . $pageURLs . "/?" . $this->classURLPattern . ".*?)\\[/url\\]!i";
     $contestIDPattern = "!\\[url\\](" . $pageURLs . "/?" . $this->entryURLPattern . ".*?)\\[/url\\]!i";
     // find class ids
     if (preg_match_all($classIDPattern, URLParser::$text, $matches)) {
         $classIDArray = $matches[2];
     }
     // find entry ids
     if (preg_match_all($contestIDPattern, URLParser::$text, $matches)) {
         $contestIDArray = $matches[2];
     }
     // get classes
     if (count($classIDArray) > 0) {
         // remove duplicates
         $classIDArray = array_unique($classIDArray);
         $sql = "SELECT\tclassID, title\n\t\t\t\tFROM \twcf" . WCF_N . "_contest_class\n\t\t\t\tWHERE \tclassID IN (" . implode(",", $classIDArray) . ")";
         $result = WCF::getDB()->sendQuery($sql);
         while ($row = WCF::getDB()->fetchArray($result)) {
             $this->classes[$row['classID']] = $row['title'];
         }
         if (count($this->classes) > 0) {
             // insert classes
             URLParser::$text = preg_replace_callback($classIDPattern, array($this, 'buildClassURLTagCallback'), URLParser::$text);
         }
     }
     // get entries
     if (count($contestIDArray) > 0) {
         // remove duplicates
         $contestIDArray = array_unique($contestIDArray);
         $sql = "SELECT\tcontestID, subject\n\t\t\t\tFROM \twcf" . WCF_N . "_contest\n\t\t\t\tWHERE \tcontestID IN (" . implode(",", $contestIDArray) . ")";
         $result = WCF::getDB()->sendQuery($sql);
         while ($row = WCF::getDB()->fetchArray($result)) {
             $this->entries[$row['contestID']] = $row['subject'];
         }
         if (count($this->entries) > 0) {
             // insert classes
             URLParser::$text = preg_replace_callback($contestIDPattern, array($this, 'buildEntryURLTagCallback'), URLParser::$text);
         }
     }
 }
Ejemplo n.º 7
0
function IEEEHandler($query_str, $sphinxPort, $numOfResults = 10)
{
    $table_name = "ieee";
    $mysqli = sphinxDB_connect($sphinxPort);
    $IEEE_url_prefix = "http://ieeexplore.ieee.org/gateway/ipsSearch.jsp?hc=" . $numOfResults . "&ti=";
    $url_parser = new URLParser($IEEE_url_prefix . urlencode($query_str));
    $IEEE_item_array = $url_parser->XMLToArray();
    $ins_qry = "INSERT INTO {$table_name} (id,title, authors, pubtitle, pubtype, volume, issue, abstract, affiliation, issn, mdurl, pdf) VALUES";
    if (array_key_exists('document', $IEEE_item_array) && !empty($IEEE_item_array['document'])) {
        $IEEE_item_array['document'] = oneRecordArrayFormation($IEEE_item_array['document']);
        $id = 1;
        foreach ($IEEE_item_array['document'] as $ind => $attr_array) {
            $title = array_key_exists('title', $attr_array) ? $attr_array['title'] : "";
            $authors = array_key_exists('authors', $attr_array) ? $attr_array['authors'] : "";
            if (!is_string($authors) || empty($authors)) {
                continue;
            }
            $pubtitle = array_key_exists('pubtitle', $attr_array) ? $attr_array['pubtitle'] : "";
            $pubtype = array_key_exists('pubtype', $attr_array) ? $attr_array['pubtype'] : "";
            $volume = array_key_exists('volume', $attr_array) ? $attr_array['volume'] : "";
            $issue = array_key_exists('issue', $attr_array) ? $attr_array['issue'] : "";
            $abstract = array_key_exists('abstract', $attr_array) ? $attr_array['abstract'] : "";
            if ($abstract != strip_tags($abstract)) {
                $abstract = "";
            }
            $affiliation = array_key_exists('affiliation', $attr_array) ? $attr_array['affiliation'] : "";
            $issn = array_key_exists('issn', $attr_array) ? $attr_array['issn'] : "";
            $mdurl = array_key_exists('mdurl', $attr_array) ? $attr_array['mdurl'] : "";
            $pdf = array_key_exists('pdf', $attr_array) ? $attr_array['pdf'] : "";
            $title = $mysqli->real_escape_string($title);
            $authors = $mysqli->real_escape_string($authors);
            $pubtitle = $mysqli->real_escape_string($pubtitle);
            $pubtype = $mysqli->real_escape_string($pubtype);
            $volume = $mysqli->real_escape_string($volume);
            $issue = $mysqli->real_escape_string($issue);
            $abstract = $mysqli->real_escape_string($abstract);
            $affiliation = $mysqli->real_escape_string($affiliation);
            $issn = $mysqli->real_escape_string($issn);
            $mdurl = $mysqli->real_escape_string($mdurl);
            $pdf = $mysqli->real_escape_string($pdf);
            $ins_qry .= "({$id}, '{$title}', '{$authors}','{$pubtitle}','{$pubtype}','{$volume}','{$issue}','{$abstract}', '{$affiliation}', '{$issn}','{$mdurl}','{$pdf}'),";
            ++$id;
        }
        $ins_qry = rtrim($ins_qry, ",");
        if (!$mysqli->query("TRUNCATE RTINDEX " . $table_name)) {
            exit("Error truncate: " . $mysqli->error);
        }
        if (!$mysqli->query($ins_qry)) {
            exit("Error insert: " . $mysqli->error);
        }
        //Rerank the result
        $rank_query = "SELECT *,weight() AS weight FROM {$table_name} where MATCH('{$query_str}') LIMIT 0,1000 OPTION ranker=MATCHANY;";
        if (!($ranked_result = $mysqli->query($rank_query))) {
            exit("Error rank: " . $mysqli->error);
        }
        //Fetch the re-ranked result
        while ($row = $ranked_result->fetch_assoc()) {
            $IEEEResultArray[] = array("title" => $row['title'], "authors" => $row['authors'], "pubtitle" => $row['pubtitle'], "pubtyle" => $row['pubtype'], "volume" => $row['volume'], "issue" => $row['issue'], "abstract" => $row['abstract'], "issn" => $row['issn'], "mdurl" => $row['mdurl'], "pdf" => $row['pdf']);
        }
        return $IEEEResultArray;
    }
}
Ejemplo n.º 8
0
function pubmedHandler($query_str, $sphinxPort, $numOfResults = 10)
{
    $table_name = "pubmed";
    $mysqli = sphinxDB_connect($sphinxPort);
    $pubmedSearchURLPrefix = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?RetMax=" . $numOfResults . "&db=pubmed&term=";
    $url_parser = new URLParser($pubmedSearchURLPrefix . urlencode($query_str));
    $pubmedSearchResultArray = $url_parser->XMLToArray();
    if (array_key_exists('Count', $pubmedSearchResultArray) && $pubmedSearchResultArray['Count'] > 0) {
        //if pubmed search returns results
        if ($pubmedSearchResultArray['Count'] == 1 || $pubmedSearchResultArray['RetMax'] == 1) {
            $pubmedSearchResultArray['IdList']['Id'] = array($pubmedSearchResultArray['IdList']['Id']);
        }
        $pubmedFetchURL = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&id=";
        foreach ($pubmedSearchResultArray['IdList']['Id'] as $ind => $pubid) {
            $pubmedFetchURL .= $pubid . ",";
        }
        $pubmedFetchURL = rtrim($pubmedFetchURL, ",");
        $pubmedFetchXML = file_get_contents($pubmedFetchURL);
        if ($pubmedFetchXML == FALSE) {
            die("file_get_contents pubmed fetch failed");
        }
        $pubmedFetchResult = simplexml_load_string($pubmedFetchXML);
        $pubmedFetchResultArray = json_decode(json_encode($pubmedFetchResult), TRUE);
        if (!array_key_exists('PubmedArticle', $pubmedFetchResultArray)) {
            trigger_error("PubmedArticle not set in pubmedFetchResultArray", E_USER_ERROR);
            return FALSE;
        }
        $pubmedFetchResultArray['PubmedArticle'] = isset($pubmedFetchResultArray['PubmedArticle'][0]) ? $pubmedFetchResultArray['PubmedArticle'] : array($pubmedFetchResultArray['PubmedArticle']);
        $id = 1;
        $ins_qry = "INSERT INTO {$table_name} (id,pubid,title,authors,abstract,url,date,keywords,affiliations) VALUES";
        foreach ($pubmedFetchResultArray['PubmedArticle'] as $record) {
            if (!array_key_exists('MedlineCitation', $record)) {
                trigger_error("MedlineCitation not set in one pubmed record", E_USER_ERROR);
                return FALSE;
            }
            $pubid = $record['MedlineCitation']['PMID'];
            $title = $record['MedlineCitation']['Article']['ArticleTitle'];
            $abstract = "";
            if (array_key_exists("Abstract", $record['MedlineCitation']['Article']) && array_key_exists("AbstractText", $record['MedlineCitation']['Article']['Abstract'])) {
                $record['MedlineCitation']['Article']['Abstract']['AbstractText'] = is_array($record['MedlineCitation']['Article']['Abstract']['AbstractText']) ? $record['MedlineCitation']['Article']['Abstract']['AbstractText'] : array($record['MedlineCitation']['Article']['Abstract']['AbstractText']);
                foreach ($record['MedlineCitation']['Article']['Abstract']['AbstractText'] as $ab) {
                    if (is_string($ab)) {
                        $abstract .= $ab . " ";
                    }
                }
            }
            $authors = "";
            $affiliations = "";
            if (array_key_exists('AuthorList', $record['MedlineCitation']['Article']) && array_key_exists('Author', $record['MedlineCitation']['Article']['AuthorList']) && !empty($record['MedlineCitation']['Article']['AuthorList'])) {
                $record['MedlineCitation']['Article']['AuthorList']['Author'] = isset($record['MedlineCitation']['Article']['AuthorList']['Author'][0]) ? $record['MedlineCitation']['Article']['AuthorList']['Author'] : array($record['MedlineCitation']['Article']['AuthorList']['Author']);
                foreach ($record['MedlineCitation']['Article']['AuthorList']['Author'] as $a) {
                    if (array_key_exists('LastName', $a) && array_key_exists('ForeName', $a)) {
                        $authors .= $a['LastName'] . ", " . $a['ForeName'] . " | ";
                        if (array_key_exists('AffiliationInfo', $a) && !empty($a['AffiliationInfo'])) {
                            $a['AffiliationInfo'] = isset($a['AffiliationInfo'][0]) ? $a['AffiliationInfo'] : array($a['AffiliationInfo']);
                            foreach ($a['AffiliationInfo'] as $af) {
                                $affiliations .= $af['Affiliation'] . ";";
                            }
                            $affiliations = rtrim($affiliations, ";");
                            $affiliations .= " | ";
                        } else {
                            $affiliations .= "NULL" . " | ";
                        }
                    }
                }
                $authors = rtrim($authors, "|");
                $affiliations = rtrim($affiliations, "|");
            }
            $keywords = "";
            if (array_key_exists("KeywordList", $record['MedlineCitation']) && !empty($record['MedlineCitation']['KeywordList'])) {
                $record['MedlineCitation']['KeywordList']['Keyword'] = isset($record['MedlineCitation']['KeywordList']['Keyword'][0]) ? $record['MedlineCitation']['KeywordList']['Keyword'] : array($record['MedlineCitation']['KeywordList']['Keyword']);
                foreach ($record['MedlineCitation']['KeywordList']['Keyword'] as $k) {
                    $keywords .= $k . " | ";
                }
                $keywords = rtrim($keywords, "|");
            }
            $date = "";
            if (array_key_exists("ArticleDate", $record['MedlineCitation']['Article']) && !empty($record['MedlineCitation']['Article']['ArticleDate'])) {
                $date = $record['MedlineCitation']['Article']['ArticleDate']['Year'] . "-" . $record['MedlineCitation']['Article']['ArticleDate']['Month'] . "-" . $record['MedlineCitation']['Article']['ArticleDate']['Day'];
            }
            $url = 'http://www.ncbi.nlm.nih.gov/pubmed/' . $pubid;
            $title = $mysqli->real_escape_string($title);
            $abstract = $mysqli->real_escape_string($abstract);
            $authors = $mysqli->real_escape_string($authors);
            $affiliations = $mysqli->real_escape_string($affiliations);
            $keywords = $mysqli->real_escape_string($keywords);
            $ins_qry .= "({$id}, {$pubid}, '{$title}', '{$authors}', '{$abstract}', '{$url}', '{$date}', '{$keywords}', '{$affiliations}'),";
            ++$id;
        }
        $ins_qry = rtrim($ins_qry, ",");
        if (!$mysqli->query("TRUNCATE RTINDEX " . $table_name)) {
            exit("Error truncate: " . $mysqli->error);
        }
        if (!$mysqli->query($ins_qry)) {
            exit("Error insert: " . $mysqli->error);
        }
        //Rerank the result
        $rank_query = "SELECT *,weight() AS weight FROM {$table_name} where MATCH('{$query_str}') LIMIT 0,1000 OPTION ranker=MATCHANY;";
        if (!($ranked_result = $mysqli->query($rank_query))) {
            exit("Error rank: " . $mysqli->error);
        }
        //Fetch the re-ranked result
        while ($row = $ranked_result->fetch_assoc()) {
            $pubmedResultArray[] = array("pubid" => $row['pubid'], "title" => $row['title'], "abstract" => $row['abstract'], "authors" => $row['authors'], "keywords" => $row['keywords'], "date" => $row['date'], "url" => $row['url'], "affiliations" => $row['affiliations']);
        }
        return $pubmedResultArray;
    }
    return FALSE;
}
 /**
  * @see Form::save()
  */
 public function save()
 {
     parent::save();
     // parse URLs
     if ($this->parseURL == 1) {
         require_once WCF_DIR . 'lib/data/message/bbcode/URLParser.class.php';
         $this->text = URLParser::parse($this->text);
     }
     $this->saveOptions();
 }
Ejemplo n.º 10
0
             if ($isProfessor == 1) {
                 echo "is a prof\n";
             } else {
                 echo "NOT a prof\n";
             }
         } else {
             $isProfessor = 0;
             //@Debu
             echo "NOT a prof\n";
         }
     } else {
         die("fetch result from MOSpacePeople failed");
     }
 } else {
     $peopleFinderURL = "https://webservices.doit.missouri.edu/peoplefinderWS/peoplefinderws.asmx/PeopleFinderXml?firstName=" . urlencode($first) . "&lastname=" . urlencode($last) . "&department=&phoneno=&email=";
     $url_parser = new URLParser($peopleFinderURL);
     $retArr = $url_parser->XMLToArray();
     if (intval($retArr['@attributes']['found']) == 1) {
         //@Debug
         echo "found in Peoplefinder...";
         $fromMU = 1;
         $title = array_key_exists("Title", $retArr['Person']) && !empty($retArr['Person']['Title']) ? $retArr['Person']['Title'] : "";
         $isProfessor = findIfProfessor($title) == 1 ? 1 : 0;
         //@Debug
         if ($isProfessor == 1) {
             echo "is a prof\n";
         } else {
             echo "NOT a prof\n";
         }
     } else {
         $isProfessor = 0;
 public function crawlPubmed()
 {
     $search_url = $this->pubmed_search_url . "&term=" . urlencode($this->firstName . " " . $this->lastName . "[Author]" . " AND " . $this->affiliation . "[Affiliation]");
     $search_url_parser = new URLParser($search_url);
     $pubmedSearch_item_array = $search_url_parser->XMLToArray();
     $returnVal = array();
     if (array_key_exists('Count', $pubmedSearch_item_array) && $pubmedSearch_item_array['Count'] > 0) {
         if ($pubmedSearch_item_array['Count'] == 1 || $pubmedSearch_item_array['RetMax'] == 1) {
             $pubmedSearch_item_array['IdList']['Id'] = array($pubmedSearch_item_array['IdList']['Id']);
         }
         $pid_url = "";
         foreach ($pubmedSearch_item_array['IdList']['Id'] as $ind => $pubid) {
             $pid_url .= $pubid . ",";
         }
         $pid_url = rtrim($pid_url, ",");
         $fetch_url = $this->pubmed_fetch_url . $pid_url;
         $fetch_url_parser = new URLParser($fetch_url);
         $pubmedFetchResultArray = $fetch_url_parser->XMLToArray();
         if (!array_key_exists('PubmedArticle', $pubmedFetchResultArray)) {
             trigger_error("PubmedArticle not set in pubmedFetchResultArray", E_USER_ERROR);
             return null;
         }
         $pubmedFetchResultArray['PubmedArticle'] = isset($pubmedFetchResultArray['PubmedArticle'][0]) ? $pubmedFetchResultArray['PubmedArticle'] : array($pubmedFetchResultArray['PubmedArticle']);
         foreach ($pubmedFetchResultArray['PubmedArticle'] as $record) {
             if (!array_key_exists('MedlineCitation', $record)) {
                 trigger_error("MedlineCitation not set in one pubmed record", E_USER_ERROR);
                 continue;
             }
             $coauthorList = array();
             $title = $record['MedlineCitation']['Article']['ArticleTitle'];
             $url = 'http://www.ncbi.nlm.nih.gov/pubmed/' . $record['MedlineCitation']['PMID'];
             if (array_key_exists('AuthorList', $record['MedlineCitation']['Article']) && array_key_exists('Author', $record['MedlineCitation']['Article']['AuthorList']) && !empty($record['MedlineCitation']['Article']['AuthorList'])) {
                 $authorList = $record['MedlineCitation']['Article']['AuthorList']['Author'];
             } else {
                 trigger_error("authorlist/author not set or author is empty", E_USER_ERROR);
                 continue;
             }
             if (!isset($authorList[0])) {
                 continue;
             }
             if (count($authorList) > 20) {
                 continue;
             }
             foreach ($authorList as $a) {
                 //converting pubmed name to neo4j compatible format
                 $parser = new HumanNameParser_Parser($a['LastName'] . ", " . $a['ForeName']);
                 $first = $parser->getFirst();
                 $last = $parser->getLast();
                 if (array_key_exists('AffiliationInfo', $a)) {
                     if (array_key_exists('Affiliation', $a['AffiliationInfo'])) {
                         $affi = $a['AffiliationInfo']['Affiliation'];
                     } else {
                         if (array_key_exists(0, $a['AffiliationInfo']) && array_key_exists('Affiliation', $a['AffiliationInfo'][0])) {
                             $affi = $a['AffiliationInfo'][0]['Affiliation'];
                         }
                     }
                 } else {
                     $affi = "";
                 }
                 $coauthorList[] = array("firstName" => $first, "lastName" => $last, "affiliation" => $affi);
             }
             $returnVal[] = array("title" => $title, "url" => $url, "people" => $coauthorList);
         }
     }
     return $returnVal;
 }