コード例 #1
0
ファイル: index.php プロジェクト: archcidburnziso/Bilboplanet
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;
}