/** * @brief Send abstract about specific entry. * @see Tag, User, DBModel, Model_Context */ function sendAbstractToEolin() { // TODO : Rewrite routines to fit Textcube 1.8 or later. requireModel('blog.category'); $entryId = $_GET['entryId']; $context = Model_Context::getInstance(); $blogid = $context->getProperty('blog.id'); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<response>\r\n"; list($allComments, $allTrackbacks) = POD::queryRow("SELECT \n\t\t\tSUM(comments), SUM(trackbacks) \n\t\t\tFROM {$context->getProperty('database.prefix')}Entries \n\t\t\tWHERE blogid = " . $blogid . " AND draft = 0 AND visibility = 3", 'num'); if ($entry = POD::queryRow("SELECT e.*, c.name AS categoryName \n\t\t\t\tFROM {$context->getProperty('database.prefix')}Entries e \n\t\t\t\tLEFT JOIN {$context->getProperty('database.prefix')}Categories c ON e.blogid = c.blogid AND e.category = c.id \n\t\t\t\tWHERE e.blogid = " . $blogid . " AND e.id = " . $entryId . " AND e.draft = 0 AND e.visibility = 3" . getPrivateCategoryExclusionQuery($blogid))) { header('Content-Type: text/xml; charset=utf-8'); echo '<version>1.1</version>', "\r\n"; echo '<status>1</status>', "\r\n"; echo '<blog>', "\r\n"; echo '<generator>' . TEXTCUBE_NAME . '/' . TEXTCUBE_VERSION . '</generator>', "\r\n"; echo '<language>', htmlspecialchars($context->getProperty('blog.language')), '</language>', "\r\n"; echo '<url>', htmlspecialchars($context->getProperty('uri.default')), '</url>', "\r\n"; echo '<title>', htmlspecialchars($context->getProperty('blog.title')), '</title>', "\r\n"; echo '<description>', htmlspecialchars($context->getProperty('blog.description')), '</description>', "\r\n"; echo '<comments>', $allComments, '</comments>', "\r\n"; echo '<trackbacks>', $allTrackbacks, '</trackbacks>', "\r\n"; echo '</blog>', "\r\n"; echo '<entry>', "\r\n"; echo '<permalink>', htmlspecialchars($context->getProperty('uri.default') . "/" . ($context->getProperty('blog.useSloganOnPost') ? "entry/{$entry['slogan']}" : $entry['id'])), '</permalink>', "\r\n"; echo '<title>', htmlspecialchars($entry['title']), '</title>', "\r\n"; echo '<content>', htmlspecialchars(getEntryContentView($blogid, $entryId, $entry['content'], $entry['contentformatter'])), '</content>', "\r\n"; echo '<author>', htmlspecialchars(User::authorName($blogid, $entryId)), '</author>', "\r\n"; echo '<category>', htmlspecialchars($entry['categoryName']), '</category>', "\r\n"; $tags = Tag::getTagsWithEntryId($blogid, $entry); foreach ($tags as $tag) { echo '<tag>', htmlspecialchars($tag), '</tag>', "\r\n"; } echo '<location>', htmlspecialchars($entry['location']), '</location>', "\r\n"; echo '<comments>', $entry['comments'], '</comments>', "\r\n"; echo '<trackbacks>', $entry['trackbacks'], '</trackbacks>', "\r\n"; echo '<written>', Timestamp::getRFC1123($entry['published']), '</written>', "\r\n"; foreach (getAttachments($blogid, $entry['id']) as $attachment) { echo '<attachment>', "\r\n"; echo '<mimeType>', $attachment['mime'], '</mimeType>', "\r\n"; echo '<filename>', $attachment['label'], '</filename>', "\r\n"; echo '<length>', $attachment['size'], '</length>', "\r\n"; echo '<url>', $context->getProperty('uri.service'), '/attachment/', $attachment['name'], '</url>', "\r\n"; echo '</attachment>', "\r\n"; } echo '</entry>', "\r\n"; } else { echo '<version>1.1</version>', "\r\n", '<status>0</status>', "\r\n"; } echo "</response>"; exit; }
function getCalendar($blogid, $period) { global $database; $calendar = array('days' => array()); if ($period === true || !checkPeriod($period)) { $period = Timestamp::getYearMonth(); } $calendar['period'] = $period; $calendar['year'] = substr($period, 0, 4); $calendar['month'] = substr($period, 4, 2); $visibility = doesHaveOwnership() ? '' : 'AND e.visibility > 0' . getPrivateCategoryExclusionQuery($blogid); switch (POD::dbms()) { case 'Cubrid': $result = POD::queryAllWithDBCache("SELECT DISTINCT TO_CHAR(to_timestamp('09:00:00 AM 01/01/1970')+e.published, 'DD')\n\t\t\t\tFROM {$database['prefix']}Entries e\n\t\t\t\tWHERE e.blogid = {$blogid} AND e.draft = 0 {$visibility} AND e.category >= 0 AND\n\t\t\t\t\tTO_CHAR(to_timestamp('09:00:00 AM 01/01/1970')+e.published, 'YYYY') = '{$calendar['year']}' AND\n\t\t\t\t\tTO_CHAR(to_timestamp('09:00:00 AM 01/01/1970')+e.published, 'MM') = '{$calendar['month']}'", 'entry'); break; case 'MySQL': case 'MySQLi': case 'PostgreSQL': default: $result = POD::queryAllWithDBCache("SELECT DISTINCT DAYOFMONTH(FROM_UNIXTIME(e.published)) \n\t\t\t\tFROM {$database['prefix']}Entries e\n\t\t\t\tWHERE e.blogid = {$blogid} AND e.draft = 0 {$visibility} AND e.category >= 0 AND YEAR(FROM_UNIXTIME(e.published)) = {$calendar['year']} AND MONTH(FROM_UNIXTIME(e.published)) = {$calendar['month']}", 'entry'); break; } if ($result) { foreach ($result as $dayArray) { list($day) = $dayArray; array_push($calendar['days'], $day); } } $calendar['days'] = array_flip($calendar['days']); return $calendar; }
function getRecentRemoteResponses($blogid, $count = false, $guestShip = false, $type = null) { global $database, $skinSetting; if (!is_null($type)) { $typeFilter = " AND t.responsetype = '" . POD::escapeString($type) . "'"; } else { $typeFilter = ''; } $sql = doesHaveOwnership() && !$guestShip ? "SELECT t.*, e.slogan \n\t\tFROM \n\t\t\t{$database['prefix']}RemoteResponses t\n\t\t\tLEFT JOIN {$database['prefix']}Entries e ON t.blogid = e.blogid AND t.entry = e.id AND e.draft = 0\n\t\tWHERE \n\t\t\tt.blogid = {$blogid} AND t.isfiltered = 0 {$typeFilter} \n\t\tORDER BY \n\t\t\tt.written \n\t\tDESC LIMIT " . ($count != false ? $count : $skinSetting['trackbacksOnRecent']) : "SELECT t.*, e.slogan \n\t\tFROM \n\t\t\t{$database['prefix']}RemoteResponses t \n\t\t\tLEFT JOIN {$database['prefix']}Entries e ON t.blogid = e.blogid AND t.entry = e.id\n\t\tWHERE \n\t\t\tt.blogid = {$blogid} \n\t\t\tAND t.isfiltered = 0 \n\t\t\tAND e.draft = 0 \n\t\t\tAND e.visibility >= 2 " . getPrivateCategoryExclusionQuery($blogid) . "\n\t\t\t{$typeFilter}\n\t\tORDER BY \n\t\t\tt.written \n\t\tDESC LIMIT " . ($count != false ? $count : $skinSetting['trackbacksOnRecent']); if ($result = POD::queryAllWithDBCache($sql, 'remoteResponse')) { return $result; } else { return array(); } }
function printIphoneArchives($blogid) { global $database; $archives = array(); $visibility = doesHaveOwnership() ? '' : 'AND e.visibility > 0' . getPrivateCategoryExclusionQuery($blogid); $skinSetting = Setting::getSkinSettings($blogid); $result = POD::queryAllWithDBCache("SELECT EXTRACT(year_month FROM FROM_UNIXTIME(e.published)) period, COUNT(*) count \n\t\tFROM {$database['prefix']}Entries e\n\t\tWHERE e.blogid = {$blogid} AND e.draft = 0 {$visibility} AND e.category >= 0 \n\t\tGROUP BY period \n\t\tORDER BY period \n\t\tDESC "); if ($result) { foreach ($result as $archive) { array_push($archives, $archive); } } return $archives; }
function getRecentEntries($blogid) { global $database, $skinSetting; $entries = array(); $visibility = doesHaveOwnership() ? '' : 'AND e.visibility > 0' . getPrivateCategoryExclusionQuery($blogid); $result = POD::query("SELECT e.id, e.userid, e.title, e.slogan, e.comments, e.published \n\t\tFROM {$database['prefix']}Entries e\n\t\tWHERE e.blogid = {$blogid} AND e.draft = 0 {$visibility} AND e.category >= 0 \n\t\tORDER BY published DESC LIMIT {$skinSetting['entriesOnRecent']}"); while ($entry = POD::fetch($result)) { array_push($entries, $entry); } return $entries; }
function getRecentComments($blogid, $count = false, $isGuestbook = false, $guestShip = false) { global $skinSetting, $database; $comments = array(); if (!$isGuestbook && !Acl::check("group.editors")) { $userLimit = ' AND e.userid = ' . getUserId(); } else { $userLimit = ''; } $sql = doesHaveOwnership() && !$guestShip ? "SELECT r.*, e.title, e.slogan\n\t\tFROM\n\t\t\t{$database['prefix']}Comments r\n\t\t\tINNER JOIN {$database['prefix']}Entries e ON r.blogid = e.blogid AND r.entry = e.id AND e.draft = 0{$userLimit}\n\t\tWHERE\n\t\t\tr.blogid = {$blogid}" . ($isGuestbook != false ? " AND r.entry=0" : " AND r.entry>0") . " AND r.isfiltered = 0\n\t\tORDER BY\n\t\t\tr.written\n\t\tDESC LIMIT " . ($count != false ? $count : $skinSetting['commentsOnRecent']) : "SELECT r.*, e.title, e.slogan\n\t\tFROM\n\t\t\t{$database['prefix']}Comments r\n\t\t\tINNER JOIN {$database['prefix']}Entries e ON r.blogid = e.blogid AND r.entry = e.id AND e.draft = 0\n\t\t\tLEFT OUTER JOIN {$database['prefix']}Categories c ON e.blogid = c.blogid AND e.category = c.id\n\t\tWHERE\n\t\t\tr.blogid = {$blogid} AND e.draft = 0 AND e.visibility >= 2" . getPrivateCategoryExclusionQuery($blogid) . ($isGuestbook != false ? " AND r.entry = 0" : " AND r.entry > 0") . " AND r.isfiltered = 0\n\t\tORDER BY\n\t\t\tr.written\n\t\tDESC LIMIT " . ($count != false ? $count : $skinSetting['commentsOnRecent']); if ($result = POD::queryAllWithDBCache($sql, 'comment')) { foreach ($result as $comment) { if ($comment['secret'] == 1 && !doesHaveOwnership()) { if (!doesHaveOpenIDPriv($comment)) { $comment['name'] = _text('비밀방문자'); $comment['homepage'] = ''; $comment['comment'] = _text('관리자만 볼 수 있는 댓글입니다.'); } } array_push($comments, $comment); } } return $comments; }
function getRecentEntries($blogid) { $ctx = Model_Context::getInstance(); $entries = array(); $visibility = doesHaveOwnership() ? '' : 'AND e.visibility > 0' . getPrivateCategoryExclusionQuery($blogid); $result = POD::queryAll("SELECT e.id, e.userid, e.title, e.slogan, e.comments, e.published \n\t\tFROM " . $ctx->getProperty('database.prefix') . "Entries e\n\t\tWHERE e.blogid = {$blogid} AND e.draft = 0 {$visibility} AND e.category >= 0 \n\t\tORDER BY published DESC LIMIT " . $ctx->getProperty('skin.entriesOnRecent')); if ($result) { return $result; } else { return array(); } }