DATE,
'isdraft' => PUBLISH . '/' . DRAFT,
'a.realname' => AUTHOR,
'category_name' => CATEGORY,
'last_modified' => LAST_UPDATED,
'title' => TITLE,
'id' => 'ID');
$per_page = array('12', '16', '50', '100');
/**
* Shows the entry panel overview
*
* Shows a list of existing entries, with pagination and cookie-remember settings.
*
* @access public
* @return null
*/
function serendipity_drawList() {
global $serendipity, $sort_order, $per_page;
$filter_import = array('author', 'category', 'isdraft');
$sort_import = array('perPage', 'ordermode', 'order');
foreach($filter_import AS $f_import) {
serendipity_restoreVar($serendipity['COOKIE']['entrylist_filter_' . $f_import], $serendipity['GET']['filter'][$f_import]);
serendipity_JSsetCookie('entrylist_filter_' . $f_import, $serendipity['GET']['filter'][$f_import]);
}
foreach($sort_import AS $s_import) {
serendipity_restoreVar($serendipity['COOKIE']['entrylist_sort_' . $s_import], $serendipity['GET']['sort'][$s_import]);
serendipity_JSsetCookie('entrylist_sort_' . $s_import, $serendipity['GET']['sort'][$s_import]);
}
$perPage = (!empty($serendipity['GET']['sort']['perPage']) ? $serendipity['GET']['sort']['perPage'] : $per_page[0]);
$page = (int)$serendipity['GET']['page'];
$offSet = $perPage*$page;
if (empty($serendipity['GET']['sort']['ordermode']) || $serendipity['GET']['sort']['ordermode'] != 'ASC') {
$serendipity['GET']['sort']['ordermode'] = 'DESC';
}
if (!empty($serendipity['GET']['sort']['order']) && !empty($sort_order[$serendipity['GET']['sort']['order']])) {
$orderby = serendipity_db_escape_string($serendipity['GET']['sort']['order'] . ' ' . $serendipity['GET']['sort']['ordermode']);
} else {
$orderby = 'timestamp ' . serendipity_db_escape_string($serendipity['GET']['sort']['ordermode']);
}
$filter = array();
if (!empty($serendipity['GET']['filter']['author'])) {
$filter[] = "e.authorid = '" . serendipity_db_escape_string($serendipity['GET']['filter']['author']) . "'";
}
if (!empty($serendipity['GET']['filter']['category'])) {
$filter[] = "ec.categoryid = '" . serendipity_db_escape_string($serendipity['GET']['filter']['category']) . "'";
}
if (!empty($serendipity['GET']['filter']['isdraft'])) {
if ($serendipity['GET']['filter']['isdraft'] == 'draft') {
$filter[] = "e.isdraft = 'true'";
} elseif ($serendipity['GET']['filter']['isdraft'] == 'publish') {
$filter[] = "e.isdraft = 'false'";
}
}
if (!empty($serendipity['GET']['filter']['body'])) {
if ($serendipity['dbType'] == 'mysql') {
$filter[] = "MATCH (title,body,extended) AGAINST ('" . serendipity_db_escape_string($serendipity['GET']['filter']['body']) . "')";
$full = true;
}
}
$filter_sql = implode(' AND ', $filter);
// Fetch the entries
$entries = serendipity_fetchEntries(
false,
false,
serendipity_db_limit(
$offSet,
$perPage + 1
),
true,
false,
$orderby,
$filter_sql
);
$users = serendipity_fetchUsers('', 'hidden', true);
$categories = serendipity_fetchCategories();
$categories = serendipity_walkRecursive($categories, 'categoryid', 'parentid', VIEWMODE_THREADED);
// ToDo: set smarty flag $config_booleanize = true; in backend only? how? or does it not matter?
$serendipity['smarty']->assign( array(
'drawList' => true,
'entries' => $entries,
'sort_order' => $sort_order,
'per_page' => $per_page,
'urltoken' => serendipity_setFormToken('url'),
'formtoken' => serendipity_setFormToken(),
'users' => $users,
'categories' => $categories,
'offSet' => $offSet,
'use_iframe' => $serendipity['use_iframe']
)
);
if (is_array($entries)) {
$data['is_entries'] = true;
$data['count'] = count($entries);
$qString = '?serendipity[adminModule]=entries&serendipity[adminAction]=editSelect';
foreach ((array)$serendipity['GET']['sort'] as $k => $v) {
$qString .= '&serendipity[sort]['. $k .']='. $v;
}
foreach ((array)$serendipity['GET']['filter'] as $k => $v) {
$qString .= '&serendipity[filter]['. $k .']='. $v;
}
$data['linkPrevious'] = $qString . '&serendipity[page]=' . ($page-1);
$data['linkNext'] = $qString . '&serendipity[page]=' . ($page+1);
// Print the entries
$entry = array();
foreach ($entries as $ey) {
// Find out if the entry has been modified later than 30 minutes after creation
if ($ey['timestamp'] <= ($ey['last_modified'] - 60*30)) {
$lm = '';
} else {
$lm = '';
}
if (!$serendipity['showFutureEntries'] && $ey['timestamp'] >= serendipity_serverOffsetHour()) {
$entry_pre = '
';
} else {
$entry_pre = '';
}
if (serendipity_db_bool($ey['properties']['ep_is_sticky'])) {
$entry_pre .= ' ' . STICKY_POSTINGS . ': ';
}
if (count($ey['categories'])) {
$cats = array();
foreach ($ey['categories'] as $cat) {
$caturl = serendipity_categoryURL($cat);
$cats[] = '' . htmlspecialchars($cat['category_name']) . '';
}
$entry_cats = implode(', ', $cats);
}
$entry[] = array(
'clock' => $entry_pre,
'id' => $ey['id'],
'title' => htmlspecialchars($ey['title']),
'pubdate' => date("c", (int)$ey['timestamp']),
'stime' => serendipity_formatTime(DATE_FORMAT_SHORT, $ey['timestamp']) . ' ' .$lm,
'author' => htmlspecialchars($ey['author']),
'cats' => $entry_cats,
'link' => serendipity_archiveURL($ey['id'], $ey['title'], 'serendipityHTTPPath', true, array('timestamp' => $ey['timestamp'])),
'draft_pre' => ((serendipity_db_bool($ey['isdraft']) || (!$serendipity['showFutureEntries'] && $ey['timestamp'] >= serendipity_serverOffsetHour())) ? true : false),
'link' => serendipity_archiveURL($ey['id'], $ey['title'], 'serendipityHTTPPath', true, array('timestamp' => $ey['timestamp'])),
'preview_link' => '?serendipity[noBanner]=true&serendipity[noSidebar]=true&serendipity[action]=admin&serendipity[adminModule]=entries&serendipity[adminAction]=preview&serendipity[id]=' . $ey['id']
);
} // end entries output
$serendipity['smarty']->assign(
array( 'urltoken' => serendipity_setFormToken('url'),
'formtoken' => serendipity_setFormToken(),
'serverOffsetHours' => serendipity_serverOffsetHour(),
'showFutureEntries' => $serendipity['showFutureEntries']
));
} // entries end
} // End function serendipity_drawList()
if (!empty($serendipity['GET']['editSubmit'])) {
$serendipity['GET']['adminAction'] = 'edit'; // does this change smarty.get vars?
}
$preview_only = false;
// very sticky smartification to origin, could be done better, I assume!
switch($serendipity['GET']['adminAction']) {
case 'preview':
$entry = serendipity_fetchEntry('id', $serendipity['GET']['id'], 1, 1);
$serendipity['POST']['preview'] = true;
$preview_only = true;
case 'save':
if (!$preview_only) {
$entry = array(
'id' => $serendipity['POST']['id'],
'title' => $serendipity['POST']['title'],
'timestamp' => $serendipity['POST']['timestamp'],
'body' => $serendipity['POST']['body'],
'extended' => $serendipity['POST']['extended'],
'categories' => $serendipity['POST']['categories'],
'isdraft' => $serendipity['POST']['isdraft'],
'allow_comments' => $serendipity['POST']['allow_comments'],
'moderate_comments' => $serendipity['POST']['moderate_comments'],
'exflag' => (!empty($serendipity['POST']['extended']) ? true : false),
// Messing with other attributes causes problems when entry is saved
);
}
if ($entry['allow_comments'] != 'true' && $entry['allow_comments'] !== true) {
$entry['allow_comments'] = 'false';
}
if ($entry['moderate_comments'] != 'true' && $entry['moderate_comments'] !== true) {
$entry['moderate_comments'] = 'false';
}
// Check if the user changed the timestamp.
if (isset($serendipity['allowDateManipulation']) && $serendipity['allowDateManipulation'] && isset($serendipity['POST']['new_timestamp']) && $serendipity['POST']['new_timestamp'] != date(DATE_FORMAT_2, $serendipity['POST']['chk_timestamp'])) {
// The user changed the timestamp, now set the DB-timestamp to the user's date
$entry['timestamp'] = strtotime($serendipity['POST']['new_timestamp']);
if ($entry['timestamp'] == -1) {
$data['switched_output'] = true;
$data['dateval'] = false;
#echo DATE_INVALID . '
';
// The date given by the user is not convertable. Reset the timestamp.
$entry['timestamp'] = $serendipity['POST']['timestamp'];
}
}
// Save server timezone in database always, so substract the offset we added for display; otherwise it would be added time and again
if (!empty($entry['timestamp'])) {
$entry['timestamp'] = serendipity_serverOffsetHour($entry['timestamp'], true);
}
// Save the entry, or just display a preview
$use_legacy = true;
$data['use_legacy'] = $use_legacy;
serendipity_plugin_api::hook_event('backend_entry_iframe', $use_legacy);
if ($use_legacy) {
$data['switched_output'] = true;
if ($serendipity['POST']['preview'] != 'true') {
/* We don't need an iframe to save a draft */
if ( $serendipity['POST']['isdraft'] == 'true' ) {
$data['is_draft'] = true;
#echo '