function saveFeedItem($feedId,$feedVisibility,$item){ global $database, $db, $event; $db->query("SELECT id FROM {$database['prefix']}DeleteHistory WHERE feed='$feedId' and permalink='{$item['permalink']}'"); if ($db->numRows() > 0) return false; if ($item['written']>gmmktime()+86400) return false; $item['title']=$db->escape($db->lessen(UTF8::correct($item['title']))); list($useRssOut) = Settings::gets('useRssOut'); list($feedCreated,$localFilter,$localFilterType) = Feed::gets($feedId, 'created,filter,filterType'); $tagString=$db->escape($db->lessen(UTF8::correct(implode(', ',$item['tags'])))); list($globalFilter,$blackFilter,$globalFilterType,$blackFilterType) = Settings::gets('filter,blackfilter,filterType,blackfilterType'); $filter = empty($globalFilter)?$localFilter:$globalFilter; $filterType = empty($globalFilter)?$localFilterType:$globalFilterType; if (!Validator::is_empty($filter)) { $filtered = true; $allowTags = explode(',', $filter); if($filterType == 'tag' || $filterType == 'tag+title') { foreach ($allowTags as $ftag) { if (Validator::enum($ftag, $tagString)) { $filtered = false; break; } } } if($filtered && ($filterType == 'title' || $filterType == 'tag+title')) { foreach ($allowTags as $ftag) { if(strpos($item['title'],$ftag)!==false) { $filtered = false; break; } } } if ($filtered) return false; } if (!Validator::is_empty($blackFilter)) { $filtered = false; $denyTags = explode(',', $blackFilter); if($blackFilterType == 'tag' || $blackFilterType == 'tag+title') { foreach ($denyTags as $ftag) { if (Validator::enum($ftag, $tagString)) { $filtered = true; break; } } } if($filtered && ($filterType == 'title' || $filterType == 'tag+title')) { foreach ($denyTags as $ftag) { if(strpos($item['title'],$ftag)!==false) { $filtered = true; break; } } } if ($filtered) return false; } if (preg_match('/\((.[^\)]+)\)$/Ui', trim($item['author']), $_matches)) $item['author'] = $_matches[1]; $item['author']=$db->escape($db->lessen(UTF8::correct($item['author']))); $item['permalink']=$db->escape($db->lessen(UTF8::correct($item['permalink']))); $item['description']=$db->escape($db->lessen(UTF8::correct(trim($item['description'])),65535)); $enclosures = array(); foreach($item['enclosures'] as $en) { array_push($enclosures, $en['url']); } $enclosureString=$db->escape($db->lessen(UTF8::correct(implode('|',$enclosures)))); $deadLine=0; $feedLife = Settings::get('archivePeriod'); if ($feedLife > 0) $deadLine=gmmktime()-($feedLife*86400); requireComponent('Bloglounge.Data.FeedItems'); $oldTags = null; $id = FeedItem::getIdByURL($item['permalink']); if($id === false && isset($item['guid'])) { $item['guid']=$db->escape($db->lessen(UTF8::correct($item['guid']))); $id = FeedItem::getIdByURL($item['guid']); } $item['author'] = Feed::getAuthor($item, $feedId, $id); $item['title'] = Feed::getTitle($item, $feedId, $id); $affected = 0; $isRebuildData = false; $summarySave = Settings::get('summarySave'); $description = $item['description']; if(Validator::getBool($summarySave)) { // summarySave $description = func::stripHTML($item['description'].'>'); if (substr($description, -1) == '>') $description = substr($description, 0, strlen($description) - 1); $description = $db->lessen(func::htmltrim($description), 1000, ''); } if (preg_match("/^[0-9]+$/",$id)) { $baseItem = FeedItem::getFeedItem($id); // $baseItem['title']=$db->escape(UTF8::correct($baseItem['title'])); // $baseItem['description']=$db->escape(UTF8::correct(trim($baseItem['description']))); if(($baseItem['title']!=$item['title'])) { $isRebuildData = true; $tags = FeedItem::get($id, 'tags'); requireComponent('LZ.PHP.Media'); Media::delete($id); $oldTags = func::array_trim(explode(',', $tags)); $db->execute("UPDATE {$database['prefix']}FeedItems SET author = '{$item['author']}', title = '{$item['title']}', description = '{$description}', tags = '$tagString', enclosure = '$enclosureString', written = {$item['written']} WHERE id = $id"); } } else { if ($item['written']==0) $item['written']=gmmktime(); if ($item['written']>$deadLine) { $db->execute("INSERT INTO {$database['prefix']}FeedItems (feed, author, permalink, title, description, tags, enclosure, written, feedVisibility) VALUES ($feedId, '{$item['author']}', '{$item['permalink']}', '{$item['title']}', '{$description}', '$tagString', '$enclosureString', {$item['written']},'{$feedVisibility}')"); $id =$db->insertId(); $db->execute('UPDATE '.$database['prefix'].'Feeds SET feedCount=feedCount+1 WHERE id="'.$feedId.'"'); if (isset($this)) $this->updated++; } $isRebuildData = true; } if(Validator::getBool(Settings::get('saveImages'))) { if($description = FeedItem::saveImages($feedId, $id, $item)) { $db->execute("UPDATE {$database['prefix']}FeedItems SET description = '{$description}' WHERE id = $id"); } } $item = $event->on('Add.updateFeedItem', array($feedId, $id, $item)); if(count($item)==3) $item = $item[2]; $result = false; if($isRebuildData) { requireComponent('Bloglounge.Data.Groups'); GroupCategory::buildGroupCategory($id, $feedId, $item['tags']); Tag::buildTagIndex($id, $item['tags'], $oldTags); Category::buildCategoryRelations($id, $item['tags'], $oldTags); $isSaveThumbnail = FeedItem::cacheThumbnail($id, $item); // 썸네일 저장 이벤트 $event->on('Add.thumbnailSave',array($item, $feedId, $id, $isSaveThumbnail)); $result = true; } return $result; }
$response['rank'] = Boom::getRank($itemId); list($boomUp,$boomDown,$boomCount) = Boom::getBoomCount($itemId); $response['boom_up_count'] = $boomUp; $response['boom_down_count'] = $boomDown; $response['boom_count'] = $boomCount; } else { if (!Boom::down($_POST['itemId'])) { $response['error'] = 1; $response['message'] = _t('이미 반대한 글입니다.'); } else { // 자동숨기기, 삭제기능.. $response['message'] = 'isBoomedDown'; list($reactor, $limit) = Settings::gets('boomDownReactor,boomDownReactorLimit'); if ($reactor == 'delete') { requireComponent('Bloglounge.Data.FeedItems'); list($myBoomDown) = FeedItem::get($_POST['itemId'], 'boomDown'); if ($limit < $myBoomDown) { FeedItem::delete($_POST['itemId']); } } $response['rank'] = Boom::getRank($itemId); list($boomUp,$boomDown,$boomCount) = Boom::getBoomCount($itemId); $response['boom_up_count'] = $boomUp; $response['boom_down_count'] = $boomDown; $response['boom_count'] = $boomCount; } } break; }
function getPredictionPage($id, $pageCount, $searchType='', $searchKeyword='',$searchExtraValue='', $viewDelete = false, $owner = 0) { global $db, $database; $page = 1; $sQuery = FeedItem::getFeedItemsQuery($searchType, $searchKeyword, $searchExtraValue, $viewDelete, $owner); $written = FeedItem::get($id,'written'); if(!empty($written)) { $sQuery = str_replace('WHERE', 'WHERE (i.written > '.$written.')'.' AND ',$sQuery); } $count = $db->queryCell('SELECT count(*) as count FROM '.$database['prefix'].'FeedItems i '.$sQuery.' ORDER BY i.written DESC'); if($count > 0) { $page = ceil(($count + 1) / $pageCount); } return $page; }