* - https://github.com/sebsauvage/Shaarli
*
* Licence: http://www.opensource.org/licenses/zlib-license.php
- *
- * Requires: PHP 5.5.x
*/
// Set 'UTC' as the default timezone if it is not defined in php.ini
// Ensure the PHP version is supported
try {
- ApplicationUtils::checkPHPVersion('5.5', PHP_VERSION);
+ ApplicationUtils::checkPHPVersion('7.1', PHP_VERSION);
} catch (Exception $exc) {
header('Content-Type: text/plain; charset=utf-8');
echo $exc->getMessage();
$conf = new ConfigManager();
$sessionManager = new SessionManager($_SESSION, $conf);
-$loginManager = new LoginManager($GLOBALS, $conf, $sessionManager);
+$loginManager = new LoginManager($conf, $sessionManager);
$loginManager->generateStaySignedInToken($_SERVER['REMOTE_ADDR']);
$clientIpId = client_ip_id($_SERVER);
*/
function showDaily($pageBuilder, $LINKSDB, $conf, $pluginManager, $loginManager)
{
- $day = date('Ymd', strtotime('-1 day')); // Yesterday, in format YYYYMMDD.
if (isset($_GET['day'])) {
$day = $_GET['day'];
+ if ($day === date('Ymd', strtotime('now'))) {
+ $pageBuilder->assign('dayDesc', t('Today'));
+ } elseif ($day === date('Ymd', strtotime('-1 days'))) {
+ $pageBuilder->assign('dayDesc', t('Yesterday'));
+ }
+ } else {
+ $day = date('Ymd', strtotime('now')); // Today, in format YYYYMMDD.
+ $pageBuilder->assign('dayDesc', t('Today'));
}
$days = $LINKSDB->days();
// Description: 836 characters gives roughly 342 pixel height.
// This is not perfect, but it's usually OK.
$length = strlen($link['title']) + (342 * strlen($link['description'])) / 836;
- if ($link['thumbnail']) {
+ if (! empty($link['thumbnail'])) {
$length += 100; // 1 thumbnails roughly takes 100 pixels height.
}
// Then put in column which is the less filled:
$conf->set('general.timezone', $tz);
$conf->set('general.title', escape($_POST['title']));
$conf->set('general.header_link', escape($_POST['titleLink']));
+ $conf->set('general.retrieve_description', !empty($_POST['retrieveDescription']));
$conf->set('resource.theme', escape($_POST['theme']));
$conf->set('security.session_protection_disabled', !empty($_POST['disablesessionprotection']));
$conf->set('privacy.default_private_links', !empty($_POST['privateLinkByDefault']));
);
$PAGE->assign('continents', $continents);
$PAGE->assign('cities', $cities);
+ $PAGE->assign('retrieve_description', $conf->get('general.retrieve_description'));
$PAGE->assign('private_links_default', $conf->get('privacy.default_private_links', false));
$PAGE->assign('session_protection_disabled', $conf->get('security.session_protection_disabled', false));
$PAGE->assign('enable_rss_permalinks', $conf->get('feed.rss_permalinks', false));
// lf_id should only be present if the link exists.
$id = isset($_POST['lf_id']) ? intval(escape($_POST['lf_id'])) : $LINKSDB->getNextId();
+ $link['id'] = $id;
// Linkdate is kept here to:
// - use the same permalink for notes as they're displayed when creating them
// - let users hack creation date of their posts
// See: https://shaarli.readthedocs.io/en/master/guides/various-hacks/#changing-the-timestamp-for-a-shaare
$linkdate = escape($_POST['lf_linkdate']);
+ $link['created'] = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $linkdate);
if (isset($LINKSDB[$id])) {
// Edit
- $created = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $linkdate);
- $updated = new DateTime();
- $shortUrl = $LINKSDB[$id]['shorturl'];
+ $link['updated'] = new DateTime();
+ $link['shorturl'] = $LINKSDB[$id]['shorturl'];
+ $link['sticky'] = isset($LINKSDB[$id]['sticky']) ? $LINKSDB[$id]['sticky'] : false;
$new = false;
} else {
// New link
- $created = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $linkdate);
- $updated = null;
- $shortUrl = link_small_hash($created, $id);
+ $link['updated'] = null;
+ $link['shorturl'] = link_small_hash($link['created'], $id);
+ $link['sticky'] = false;
$new = true;
}
}
$url = whitelist_protocols(trim($_POST['lf_url']), $conf->get('security.allowed_protocols'));
- $link = array(
- 'id' => $id,
+ $link = array_merge($link, [
'title' => trim($_POST['lf_title']),
'url' => $url,
'description' => $_POST['lf_description'],
'private' => (isset($_POST['lf_private']) ? 1 : 0),
- 'created' => $created,
- 'updated' => $updated,
'tags' => str_replace(',', ' ', $tags),
- 'shorturl' => $shortUrl,
- );
+ ]);
// If title is empty, use the URL as title.
if ($link['title'] == '') {
$link['thumbnail'] = $thumbnailer->get($url);
}
- $link['sticky'] = isset($link['sticky']) ? $link['sticky'] : false;
-
$pluginManager->executeHooks('save_link', $link);
$LINKSDB[$id] = $link;
// If this is an HTTP(S) link, we try go get the page to extract
// the title (otherwise we will to straight to the edit form.)
if (empty($title) && strpos(get_url_scheme($url), 'http') !== false) {
+ $retrieveDescription = $conf->get('general.retrieve_description');
// Short timeout to keep the application responsive
// The callback will fill $charset and $title with data from the downloaded page.
get_http_response(
$url,
$conf->get('general.download_timeout', 30),
$conf->get('general.download_max_size', 4194304),
- get_curl_download_callback($charset, $title)
+ get_curl_download_callback($charset, $title, $description, $tags, $retrieveDescription)
);
if (! empty($title) && strtolower($charset) != 'utf-8') {
$title = mb_convert_encoding($title, 'utf-8', $charset);
if ($targetPage == Router::$PAGE_SAVE_PLUGINSADMIN) {
try {
if (isset($_POST['parameters_form'])) {
+ $pluginManager->executeHooks('save_plugin_parameters', $_POST);
unset($_POST['parameters_form']);
foreach ($_POST as $param => $value) {
$conf->set('plugins.'. $param, escape($value));