[
'displayErrorDetails' => true,
],
];
prof_flag("Init Cache");
$cache = new FileCache();
$configuration['notFoundHandler'] = function ($c) {
return function ($request, $response) use ($c) {
header("HTTP/1.1 404 Not Found");
$message = "Page not found!";
include("templates/error.php");
die();
};
};
$c = new \Slim\Container($configuration);
$app = new \Slim\App($c);
$app->get('/', function (Request $request, Response $response) {
global $cache;
prof_flag("Enter /");
$currentuser = getcurrentuser();
if ($currentuser->userid == -1 && empty($_GET)){
$cache_file = "./cache-index.html";
//print("cache");
if (file_exists($cache_file)) {
$cached = file_get_contents($cache_file);
if (strlen($cached) > 500){
print($cached);
print("Cache was last modified: " . date ("F d Y H:i:s.", filemtime($cache_file)) ."");
die();
}
}
}
$tab = $request->getParam('tab');
$sections = $request->getParam('s');
$valid_sections= array("cs","bio", "ph");
$sections = implode(",",array_intersect($valid_sections,explode(',',$sections)));
$page = 1*$request->getParam('page', 0);
$page = max($page,1);
//print $page;
if ($tab == "recent"){
$key = "getRecentVignettes 5, $page, $sections";
if (!$vignettes = $cache->fetch($key)) {
$vignettes = getRecentVignettes(5, $page, $sections);
$cache->store($key,$vignettes,1440);
}
}else if($tab == "best"){
$key = "getBestVignettes 5, $page, $sections";
if (!$vignettes = $cache->fetch($key)) {
$vignettes = getBestVignettes(5, $page, $sections);
$cache->store($key,$vignettes,1440);
}
}else{
$tab = ""; // to prevent XSS
$key = "getPopularVignettes 5, $page, $sections, 1";
if (!$vignettes = $cache->fetch($key)) {
$vignettes = getPopularVignettes(5, $page, $sections, 1);
$cache->store($key,$vignettes,1440);
}
}
prof_flag("Render page");
include("templates/home.php");
prof_flag("Done");
prof_print();
die();
});
$app->get('/welcome', function (Request $request, Response $response) {
include("templates/welcome.php");
die();
});
$app->get('/search', function (Request $request, Response $response) {
$term = $request->getParam('term');
die("Internal search disabled");
$results = performSearch($term);
//print_r($results);
// don't index search results
$extraheader = '';
include("templates/papers.php");
die();
});
$app->get('/internalsearch', function (Request $request, Response $response) {
$q = $request->getParam('q');
//print_r($results);
// don't index search results
$extraheader = '';
include("templates/internalsearch.php");
die();
});
// $app->get('/papers', function (Request $request, Response $response) {
// getPapers();
// });
$app->get('/paper', function (Request $request, Response $response) {
$bibtexKey = $request->getParam('bibtexKey');
$code = $request->getParam('code');
$authorfocus = $request->getParam('a');
$paper = getPaper($bibtexKey);
//When no paper is found redirect
if (!isset($paper->bibtexKey)){
header("HTTP/1.1 303 See Other");
header("Location: ./search?term=".$bibtexKey);
die();
}
$currentuser = getcurrentuser();
if (($paper->bibtexKey != "") && ($bibtexKey != "" && $bibtexKey) != ($paper->bibtexKey)){
$vignettes = getVignettes($bibtexKey);
// if there are no entries here then redirect to the better page
// otherwise just continue with the one that was linked
if (sizeof($vignettes) == 0){
header("HTTP/1.1 303 See Other");
header("Location: ./paper?bibtexKey=".$paper->bibtexKey);
//header("Refresh: 0; url=./paper?bibtexKey=".$paper->bibtexKey);
die();
}else{
$paper->bibtexKey = $bibtexKey;
}
}
$vignettes = getVignettes($paper->bibtexKey, $code=$code);
for ($v = 0; $v < sizeof($vignettes); $v++){
$vignette = $vignettes[$v];
$vignette->myvote = getMyVignettesVote($vignette->paperid, $vignette->userid);
if (!isset($vignette->vote)) $vignette->vote = 0;
//print_r($vignette);
if($vignette->userid == $currentuser->userid){
$myvignette = $vignette;
//print_r($myvignette);
}
}
// set first vignette to be this variable for the header
if (sizeof($vignettes) > 0){
$vignette = $vignettes[0];
}
if (!isset($myvignette)){
$myvignette = (object)[];
$myvignette->paperid = $paper->bibtexKey;
$myvignette->userid=getcurrentuser()->userid;
$myvignette->username=getcurrentuser()->username;
$myvignette->displayname=getcurrentuser()->displayname;
$myvignette->email=getcurrentuser()->email;
$myvignette->vote=0;
$myvignette->myvote=0;
}
// if no summaries then don't be in the search results
if (sizeof($vignettes) == 0){
header("HTTP/1.1 203 No Summaries Yet");
$extraheader = '';
}
include("templates/paper.php");
logVisit($paper->bibtexKey);
die();
});
$app->get('/random', function (Request $request, Response $response) {
$currentuser = getcurrentuser();
$vignettes = getOneRandomVignette();
//print_r($vignettes);
$bibtexKey = $vignettes[0]->paperid;
header("HTTP/1.1 303 See Other");
header("Location: ./paper?bibtexKey=".$bibtexKey);
//header("Refresh: 0; url=$DEFAULTBASEURL/paper?bibtexKey=$bibtexKey");
die();
});
$app->post('/vignette', function (Request $request, Response $response) {
$vignette = (object)[];
$vignette->paperid = $request->getParam('paperid');
$vignette->text = $request->getParam('text');
$vignette->priv = $request->getParam('priv');
$vignette->anon = $request->getParam('anon');
$vignette->userid=getcurrentuser()->userid;
addVignette($vignette);
echo "{}";
die();
});
$app->delete('/vignette', function (Request $request, Response $response) {
$userid = $request->getParam('userid');
if (getcurrentuser()->userid != $userid){
http_response_code(401);
die();
}
$vignette = (object)[];
$vignette->paperid = $request->getParam('paperid');
$vignette->userid = $userid;
delVignette($vignette);
echo "{}";
die();
});
$app->post('/vote', function (Request $request, Response $response) {
$vote = (object)[];
$vote->vote = $request->getParam('vote');
$vote->paperid = $request->getParam('paperid');
$vote->userid = $request->getParam('userid');
voteVignette($vote);
echo "{}";
die();
});
$app->post('/comment', function (Request $request, Response $response) {
$comment = (object)[];
$comment->text = $request->getParam('text');
$comment->paperid = $request->getParam('paperid');
$comment->summaryuserid = $request->getParam('summaryuserid');
addComment($comment);
echo "{}";
die();
});
$app->delete('/comment', function (Request $request, Response $response) {
$comment = (object)[];
$comment->commentid = $request->getParam('commentid');
delComment($comment);
echo "{}";
die();
});
$app->get('/user', function (Request $request, Response $response) {
$name = $request->getParam('name');
$tab = $request->getParam('tab');
$currentuser = getcurrentuser();
if ($name == "" && $currentuser->userid == -1){
header("HTTP/1.1 303 See Other");
header("Location: ./login");
//header("Refresh: 0; url=$DEFAULTBASEURL/login");
die();
}else if ($name == ""){
header("HTTP/1.1 303 See Other");
header("Location: ./user?name=".$currentuser->username);
//header("Refresh: 0; url=$DEFAULTBASEURL/user?name=".$currentuser->username);
die();
}
$user = getuser($name);
$vignettes = getUsersVignettes($user->userid);
if ($currentuser->userid == $user->userid){
$likedvignettes = getUsersLikedVignettes($user->userid);
$dislikedvignettes = getUsersDisLikedVignettes($user->userid);
}
$title = htmlspecialchars(($user->displayname)?$user->displayname:$user->username)."'s profile";
if ($user->description == ""){
$description = "Here are summaries of research papers by user ".htmlspecialchars(($user->displayname)?$user->displayname:$user->username);
}else{
$description = htmlspecialchars($user->description);
}
// we don't want this overview page showing up
$extraheader = '';
include("templates/user.php");
die();
});
$app->get('/settings', function (Request $request, Response $response) {
$name = $request->getParam('name');
$tab = $request->getParam('tab');
$currentuser = getcurrentuser();
if ($name == "" && $currentuser->userid == -1){
header("HTTP/1.1 303 See Other");
header("Location: ./login");
die();
}
$user = $currentuser;
$title = "Settings";
// we don't want this overview page showing up
$extraheader = '';
include("templates/settings.php");
die();
});
$app->get('/venue', function (Request $request, Response $response) {
global $cache;
prof_flag("Enter /venue");
$key = $request->getParam('key');
$year = $request->getParam('year');
if ($key == ""){
prof_flag("getVenues");
$cachekey = "getVenues";
if (!$venues = $cache->fetch($cachekey)) {
$venues = getVenues();
$cache->store($cachekey,$venues,2880);
}
$title = "All venues with summaries";
$description = "Browse papers with summaries from these conferences.";
include("templates/allvenues.php");
}else{
prof_flag("getTopVenueVignettes");
$cachekey = "getTopVenueVignettes, $key, $year";
if (!$years = $cache->fetch($cachekey)) {
$years = getTopVenueVignettes($key, $year);
$cache->store($cachekey,$years,2880);
}
prof_flag("krsort");
// if no year pick most recent year
krsort($years);
reset($years);
$defaultyear = key($years);
if ($year == "")
$year = $defaultyear;
prof_flag("getVenue(key)");
$venue = getVenue($key);
if ($venue == null){
$venue = (object)[];
$venue->name = $years[$defaultyear][0]->paper->venue." - ".$key;
$venue->id = $key;
}
prof_flag("ksort");
ksort($years);
//$year = $years->paper->year;
if (array_key_exists($year, $years)){
$vignettes = $years[$year];
}else{
$vignettes = [];
}
//print_r($years[$defaultyear][0]->a);die();
prof_flag("render");
//$title = "Summaries from ".$venue->name;
include("templates/venue.php");
}
prof_flag("Done");
prof_print();
die();
});
$app->get('/users', function (Request $request, Response $response) {
$users = getUsers();
$title = "All users";
$description = "Browse users with summaries";
include("templates/allusers.php");
die();
});
$app->post('/user', function (Request $request, Response $response) {
$useredit = (object)[];
$useredit->username = $request->getParam('username');
$useredit->displayname = $request->getParam('displayname');
$useredit->description = $request->getParam('description');
$useredit->password = $request->getParam('password');
$useredit->orcid = $request->getParam('orcid');
$useredit->email_receive_comments = $request->getParam('email_receive_comments') == "true";
if ($useredit->username != getcurrentuser()->username){
die("Hello");
}
$user = getuser($useredit->username);
editUser($user, $useredit);
echo "{}";
die();
});
$app->get('/export', function (Request $request, Response $response) {
//$name = $request->getParam('name');
$currentuser = getcurrentuser();
if ($currentuser->userid == -1){
header("HTTP/1.1 303 See Other");
header("Location: ./login");
//header("Refresh: 0; url=$DEFAULTBASEURL/login");
die();
}
$vignettes = getUsersVignettes($currentuser->userid);
include("templates/vignettecsv.php");
die();
});
$app->get('/install', function (Request $request, Response $response) {
//createDB();
});
$app->get('/login', function (Request $request, Response $response) {
$currentuser = getcurrentuser();
include("templates/login.php");
die();
});
$app->get('/logout', function (Request $request, Response $response) {
logoutcookie();
header("HTTP/1.1 303 See Other");
header("Location: ./");
//header("Refresh: 0; url=./");
die();
});
$app->post('/login', function (Request $request, Response $response) {
$login = (object)[];
$login->loginname = $request->getParam('loginname');
$login->password = $request->getParam('password');
$returnto = $request->getParam('returnto');
$loginresult = takelogin($login);
//print_r($loginresult);die();
if ($loginresult->message == "No user"){
header("HTTP/1.1 303 See Other");
header("Location: ./signup");
}else if ($loginresult->message != ""){
include("templates/login.php");
}else if ($returnto != ""){
header("HTTP/1.1 303 See Other");
header("Location: ./".$returnto);
//header("Refresh: 0; url=".$returnto);
die();
}else{
header("HTTP/1.1 303 See Other");
header("Location: ./user");
//header("Refresh: 0; url=./user");
die();
}
die();
});
$app->get('/signup', function (Request $request, Response $response) {
include("templates/signup.php");
die();
});
$app->get('/recover', function (Request $request, Response $response) {
include("templates/recover.php");
die();
});
$app->get('/confirmrecover', function (Request $request, Response $response) {
$confirm = (object)[];
$confirm->email = $request->getParam('email');
$confirm->psecret = $request->getParam('psecret');
$result = validaterecoveremail($confirm->email, $confirm->psecret);
if ($result){
header("HTTP/1.1 303 See Other");
header("Location: ./user");
//header("Refresh: 0; url=./user");
}else{
$message = "Your reset link may have expired!";
include("templates/error.php");
}
die();
});
$app->post('/recover', function (Request $request, Response $response) {
$recover = (object)[];
$recover->email = $request->getParam('email');
$recoverresult = recoverUser($recover);
include("templates/recover.php");
die();
});
$app->post('/signup', function (Request $request, Response $response) {
$signup = (object)[];
$signup->username = $request->getParam('username');
$signup->email = $request->getParam('email');
$signup->displayname = $request->getParam('displayname');
$signup->password = $request->getParam('password');
$signupresult = addUser($signup);
include("templates/signup.php");
die();
});
$app->get('/confirm', function (Request $request, Response $response) {
$confirm = (object)[];
$confirm->username = $request->getParam('username');
$confirm->psecret = $request->getParam('psecret');
$result = validatesignupemail($confirm->username, $confirm->psecret);
if ($result){
header("HTTP/1.1 303 See Other");
header("Location: ./user");
//header("Refresh: 0; url=./user");
}else{
$message = "Please contact us!";
include("templates/error.php");
}
die();
});
$app->get('/sitemap.xml', function (Request $request, Response $response) {
$vignettes = getVignettePapers();
$venues = getVenues();
header('Content-Type: text/xml');
include("templates/sitemapxml.php");
die();
});
$app->get('/rss-generate', function (Request $request, Response $response) {
ob_start();
$vignettes = getRecentVignettes(100, 1, "");
header('Content-Type: text/xml');
include("templates/rss.php");
$contents = ob_get_flush();
$contents = stripInvalidXml($contents);
$xml = new SimpleXMLElement($contents);
file_put_contents("rss.xml",$xml->asXML());
ob_start();
$vignettes = getRecentVignettes(1000000, 1, "");
header('Content-Type: text/xml');
include("templates/rss.php");
$contents = ob_get_flush();
$contents = stripInvalidXml($contents);
$xml = new SimpleXMLElement($contents);
file_put_contents("rss-all.xml",$xml->asXML());
ob_start();
$vignettes = getRecentVignettes(1000000, 1, "");
$full = True;
header('Content-Type: text/xml');
include("templates/rss.php");
$contents = ob_get_flush();
$contents = stripInvalidXml($contents);
$xml = new SimpleXMLElement($contents);
file_put_contents("rss-full.xml",$xml->asXML());
die();
});
$app->get('/about', function (Request $request, Response $response) {
include("templates/about.php");
die();
});
/// QA stuff
$app->post('/newquestion', function (Request $request, Response $response) {
$question = (object)[];
$question->paperid = $request->getParam('paperid');
$question->text = $request->getParam('text');
$question->category = $request->getParam('category');
addQuestion($question);
echo "{}";
die();
});
$app->post('/newanswer', function (Request $request, Response $response) {
$answer = (object)[];
$answer->questionid = $request->getParam('questionid');
$answer->text = $request->getParam('text');
addAnswer($answer);
echo "{}";
die();
});
// $app->post('/editquestion', function (Request $request, Response $response) {
// $question = (object)[];
// $question->questionid = $request->getParam('questionid');
// $question->status = $request->getParam('status');
// $question->category = $request->getParam('category');
// editQuestion($question);
// echo "{}";
// die();
// });
$app->get('/questions', function (Request $request, Response $response) {
$paperid = $request->getParam('paperid');
$questions = getQuestions($paperid);
for ($i = 0; $i < sizeof($questions); $i++) {
$questions[$i]->answers = getAnswers($questions[$i]->id);
}
echo json_encode($questions);
die();
});
$app->get('/visits', function (Request $request, Response $response) {
$bibtexKey = $request->getParam('bibtexKey');
$report = $request->getParam('report');
$userid = $request->getParam('userid');
$previousdays = 7;
if ($report == "1m"){
$previousdays = 30;
}
if ($bibtexKey){
$views = getVisitCounts($bibtexKey, $previousdays);
}
if ($userid){
$views = getVisitCountsUser($userid, $previousdays);
}
//print_r($views);
include("templates/visits.php");
die();
});
$app->run();