X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=index.php;h=47bae6e87a943a1b26d5af2d1558053e2909f2fb;hb=70860f30d5023837def0b146ac0c44a45a41899a;hp=79c66648fdb882944060dbdf1ac624f48095b3f8;hpb=528a6f8a232c060faf024008e4f8a09b4aa8dabc;p=github%2Fshaarli%2FShaarli.git diff --git a/index.php b/index.php index 79c66648..47bae6e8 100644 --- a/index.php +++ b/index.php @@ -100,6 +100,7 @@ $GLOBALS['config']['ENABLE_LOCALCACHE'] = true; $GLOBALS['config']['UPDATECHECK_BRANCH'] = 'stable'; $GLOBALS['config']['UPDATECHECK_INTERVAL'] = 86400; +$GLOBALS['config']['REDIRECTOR_URLENCODE'] = true; /* * Plugin configuration @@ -160,6 +161,7 @@ require_once 'application/HttpUtils.php'; require_once 'application/LinkDB.php'; require_once 'application/LinkFilter.php'; require_once 'application/LinkUtils.php'; +require_once 'application/NetscapeBookmarkUtils.php'; require_once 'application/TimeZone.php'; require_once 'application/Url.php'; require_once 'application/Utils.php'; @@ -484,7 +486,7 @@ if (isset($_POST['login'])) if (isset($_POST['returnurl'])) { // Prevent loops over login screen. if (strpos($_POST['returnurl'], 'do=login') === false) { - header('Location: '. escape($_POST['returnurl'])); + header('Location: '. generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST'])); exit; } } @@ -706,7 +708,8 @@ function showDailyRSS() { $GLOBALS['config']['DATASTORE'], isLoggedIn(), $GLOBALS['config']['HIDE_PUBLIC_LINKS'], - $GLOBALS['redirector'] + $GLOBALS['redirector'], + $GLOBALS['config']['REDIRECTOR_URLENCODE'] ); /* Some Shaarlies may have very few links, so we need to look @@ -791,16 +794,10 @@ function showDailyRSS() { * Show the 'Daily' page. * * @param PageBuilder $pageBuilder Template engine wrapper. + * @param LinkDB $LINKSDB LinkDB instance. */ -function showDaily($pageBuilder) +function showDaily($pageBuilder, $LINKSDB) { - $LINKSDB = new LinkDB( - $GLOBALS['config']['DATASTORE'], - isLoggedIn(), - $GLOBALS['config']['HIDE_PUBLIC_LINKS'], - $GLOBALS['redirector'] - ); - $day=Date('Ymd',strtotime('-1 day')); // Yesterday, in format YYYYMMDD. if (isset($_GET['day'])) $day=$_GET['day']; @@ -892,7 +889,8 @@ function renderPage() $GLOBALS['config']['DATASTORE'], isLoggedIn(), $GLOBALS['config']['HIDE_PUBLIC_LINKS'], - $GLOBALS['redirector'] + $GLOBALS['redirector'], + $GLOBALS['config']['REDIRECTOR_URLENCODE'] ); $updater = new Updater( @@ -1015,11 +1013,16 @@ function renderPage() return strcasecmp($a, $b); }); - $tagList=array(); - foreach($tags as $key=>$value) - // Tag font size scaling: default 15 and 30 logarithm bases affect scaling, 22 and 6 are arbitrary font sizes for max and min sizes. - { - $tagList[$key] = array('count'=>$value,'size'=>log($value, 15) / log($maxcount, 30) * (22-6) + 6); + $tagList = array(); + foreach($tags as $key => $value) { + // Tag font size scaling: + // default 15 and 30 logarithm bases affect scaling, + // 22 and 6 are arbitrary font sizes for max and min sizes. + $size = log($value, 15) / log($maxcount, 30) * 2.2 + 0.8; + $tagList[$key] = array( + 'count' => $value, + 'size' => number_format($size, 2, '.', ''), + ); } $data = array( @@ -1038,7 +1041,7 @@ function renderPage() // Daily page. if ($targetPage == Router::$PAGE_DAILY) { - showDaily($PAGE); + showDaily($PAGE, $LINKSDB); } // ATOM and RSS feed. @@ -1054,7 +1057,7 @@ function renderPage() startsWith($query,'do='. $targetPage) && !isLoggedIn() ); $cached = $cache->cachedVersion(); - if (false && !empty($cached)) { + if (!empty($cached)) { echo $cached; exit; } @@ -1274,11 +1277,15 @@ function renderPage() { if (!empty($_POST['title']) ) { - if (!tokenOk($_POST['token'])) die('Wrong token.'); // Go away! + if (!tokenOk($_POST['token'])) { + die('Wrong token.'); // Go away! + } $tz = 'UTC'; - if (!empty($_POST['continent']) && !empty($_POST['city'])) - if (isTimeZoneValid($_POST['continent'],$_POST['city'])) - $tz = $_POST['continent'].'/'.$_POST['city']; + if (!empty($_POST['continent']) && !empty($_POST['city']) + && isTimeZoneValid($_POST['continent'], $_POST['city']) + ) { + $tz = $_POST['continent'] . '/' . $_POST['city']; + } $GLOBALS['timezone'] = $tz; $GLOBALS['title']=$_POST['title']; $GLOBALS['titleLink']=$_POST['titleLink']; @@ -1516,7 +1523,7 @@ function renderPage() // -------- User want to post a new link: Display link edit form. if (isset($_GET['post'])) { - $url = cleanup_url(escape($_GET['post'])); + $url = cleanup_url($_GET['post']); $link_is_new = false; // Check if URL is not already in database (in this case, we will edit the existing link) @@ -1541,8 +1548,8 @@ function renderPage() // Extract title. $title = html_extract_title($content); // Re-encode title in utf-8 if necessary. - if (! empty($title) && $charset != 'utf-8') { - $title = mb_convert_encoding($title, $charset, 'utf-8'); + if (! empty($title) && strtolower($charset) != 'utf-8') { + $title = mb_convert_encoding($title, 'utf-8', $charset); } } } @@ -1551,6 +1558,8 @@ function renderPage() $url = '?' . smallHash($linkdate); $title = 'Note: '; } + $url = escape($url); + $title = escape($title); $link = array( 'linkdate' => $linkdate, @@ -1582,44 +1591,36 @@ function renderPage() } // -------- Export as Netscape Bookmarks HTML file. - if ($targetPage == Router::$PAGE_EXPORT) - { - if (empty($_GET['what'])) - { + if ($targetPage == Router::$PAGE_EXPORT) { + if (empty($_GET['selection'])) { $PAGE->assign('linkcount',count($LINKSDB)); $PAGE->renderPage('export'); exit; } - $exportWhat=$_GET['what']; - if (!array_intersect(array('all','public','private'),array($exportWhat))) die('What are you trying to export???'); - header('Content-Type: text/html; charset=utf-8'); - header('Content-disposition: attachment; filename=bookmarks_'.$exportWhat.'_'.strval(date('Ymd_His')).'.html'); - $currentdate=date('Y/m/d H:i:s'); - echo << - - - -Bookmarks -

Bookmarks

-HTML; - foreach($LINKSDB as $link) - { - if ($exportWhat=='all' || - ($exportWhat=='private' && $link['private']!=0) || - ($exportWhat=='public' && $link['private']==0)) - { - $date = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $link['linkdate']); - echo '
'.$link['title']."\n"; - if ($link['description']!='') echo '
'.$link['description']."\n"; - } + // export as bookmarks_(all|private|public)_YYYYmmdd_HHMMSS.html + $selection = $_GET['selection']; + try { + $PAGE->assign( + 'links', + NetscapeBookmarkUtils::filterAndFormat($LINKSDB, $selection) + ); + } catch (Exception $exc) { + header('Content-Type: text/plain; charset=utf-8'); + echo $exc->getMessage(); + exit; } - exit; + $now = new DateTime(); + header('Content-Type: text/html; charset=utf-8'); + header( + 'Content-disposition: attachment; filename=bookmarks_' + .$selection.'_'.$now->format(LinkDB::LINK_DATE_FORMAT).'.html' + ); + $PAGE->assign('date', $now->format(DateTime::RFC822)); + $PAGE->assign('eol', PHP_EOL); + $PAGE->assign('selection', $selection); + $PAGE->renderPage('export.bookmarks'); + exit; } // -------- User is uploading a file for import @@ -1633,7 +1634,7 @@ HTML; exit; } if (!tokenOk($_POST['token'])) die('Wrong token.'); - importFile(); + importFile($LINKSDB); exit; } @@ -1702,15 +1703,10 @@ HTML; // ----------------------------------------------------------------------------------------------- // Process the import file form. -function importFile() +function importFile($LINKSDB) { if (!isLoggedIn()) { die('Not allowed.'); } - $LINKSDB = new LinkDB( - $GLOBALS['config']['DATASTORE'], - isLoggedIn(), - $GLOBALS['config']['HIDE_PUBLIC_LINKS'], - $GLOBALS['redirector'] - ); + $filename=$_FILES['filetoupload']['name']; $filesize=$_FILES['filetoupload']['size']; $data=file_get_contents($_FILES['filetoupload']['tmp_name']); @@ -2116,10 +2112,10 @@ function install() if (!empty($_POST['setlogin']) && !empty($_POST['setpassword'])) { $tz = 'UTC'; - if (!empty($_POST['continent']) && !empty($_POST['city'])) { - if (isTimeZoneValid($_POST['continent'], $_POST['city'])) { - $tz = $_POST['continent'].'/'.$_POST['city']; - } + if (!empty($_POST['continent']) && !empty($_POST['city']) + && isTimeZoneValid($_POST['continent'], $_POST['city']) + ) { + $tz = $_POST['continent'].'/'.$_POST['city']; } $GLOBALS['timezone'] = $tz; // Everything is ok, let's create config file.