function showDaily() { $LINKSDB = new linkdb(isLoggedIn() || $GLOBALS['config']['OPEN_SHAARLI']); // Read links from database (and filter private links if used it not logged in). $day = Date('Ymd', strtotime('-1 day')); // Yesterday, in format YYYYMMDD. if (isset($_GET['day'])) { $day = $_GET['day']; } $days = $LINKSDB->days(); $i = array_search($day, $days); if ($i == false) { $i = count($days) - 1; $day = $days[$i]; } $previousday = ''; $nextday = ''; if ($i !== false) { if ($i > 1) { $previousday = $days[$i - 1]; } if ($i < count($days) - 1) { $nextday = $days[$i + 1]; } } $linksToDisplay = $LINKSDB->filterDay($day); // We pre-format some fields for proper output. foreach ($linksToDisplay as $key => $link) { $linksToDisplay[$key]['taglist'] = explode(' ', $link['tags']); $linksToDisplay[$key]['formatedDescription'] = nl2br(keepMultipleSpaces(text2clickable(htmlspecialchars($link['description'])))); $linksToDisplay[$key]['thumbnail'] = thumbnail($link['url']); } /* We need to spread the articles on 3 columns. I did not want to use a javascript lib like http://masonry.desandro.com/ so I manually spread entries with a simple method: I roughly evaluate the height of a div according to title and description length. */ $columns = array(array(), array(), array()); // Entries to display, for each column. $fill = array(0, 0, 0); // Rough estimate of columns fill. foreach ($linksToDisplay as $key => $link) { // Roughly estimate length of entry (by counting characters) // Title: 30 chars = 1 line. 1 line is 30 pixels height. // 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']) { $length += 100; } // 1 thumbnails roughly takes 100 pixels height. // Then put in column which is the less filled: $smallest = min($fill); // find smallest value in array. $index = array_search($smallest, $fill); // find index of this smallest value. array_push($columns[$index], $link); // Put entry in this column. $fill[$index] += $length; } $PAGE = new pageBuilder(); $PAGE->assign('linksToDisplay', $linksToDisplay); $PAGE->assign('linkcount', count($LINKSDB)); $PAGE->assign('col1', $columns[0]); $PAGE->assign('col1', $columns[0]); $PAGE->assign('col2', $columns[1]); $PAGE->assign('col3', $columns[2]); $PAGE->assign('day', utf8_encode(strftime('%A %d, %B %Y', linkdate2timestamp($day . '_000000')))); $PAGE->assign('previousday', $previousday); $PAGE->assign('nextday', $nextday); $PAGE->renderPage('daily'); exit; }