function ActivityFeedTag_render($content, $attributes, $parser, $frame) { global $wgExtensionsPath, $wgEnableAchievementsInActivityFeed, $wgEnableAchievementsExt; if (!class_exists('ActivityFeedHelper')) { return ''; } wfProfileIn(__METHOD__); $parameters = ActivityFeedHelper::parseParameters($attributes); $tagid = str_replace('.', '_', uniqid('activitytag_', true)); //jQuery might have a problem with . in ID $jsParams = "size={$parameters['maxElements']}"; if (!empty($parameters['includeNamespaces'])) { $jsParams .= "&ns={$parameters['includeNamespaces']}"; } if (!empty($parameters['flags'])) { $jsParams .= '&flags=' . implode('|', $parameters['flags']); } $parameters['tagid'] = $tagid; $feedHTML = ActivityFeedHelper::getList($parameters); $style = empty($parameters['style']) ? '' : ' style="' . $parameters['style'] . '"'; $timestamp = wfTimestampNow(); $snippetsDependencies = array('/extensions/wikia/MyHome/ActivityFeedTag.js', '/extensions/wikia/MyHome/ActivityFeedTag.css'); if (!empty($wgEnableAchievementsInActivityFeed) && !empty($wgEnableAchievementsExt)) { array_push($snippetsDependencies, '/extensions/wikia/AchievementsII/css/achievements_sidebar.css'); } $snippets = F::build('JSSnippets')->addToStack($snippetsDependencies, null, 'ActivityFeedTag.initActivityTag', array('tagid' => $tagid, 'jsParams' => $jsParams, 'timestamp' => $timestamp)); wfProfileOut(__METHOD__); return "<div{$style}>{$feedHTML}</div>{$snippets}"; }
public function testFilterTextBetweenTags() { $testCases = array(array('in' => '<div>foo</div><noscript>test</noscript>', 'out' => '<div>foo</div>'), array('in' => '<figcaption class="thumbcaption"><span itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo">52° 24.479\' N 16° 56.164\' E<meta itemprop="latitude" content="52.407991"><meta itemprop="longitude" content="16.936064"></span></figcaption>', 'out' => ''), array('in' => '<figcaption class="thumbcaption">Powódź w 1888.</figcaption><div class="picture-attribution"><img src="http://images.wikia.com/common/avatars/thumb/a/af/2240397.png/16px-2240397.png?cb=1320183718" width="16" height="16" class="avatar" alt="Shareif" />Dodane przez <a href="/wiki/U%C5%BCytkownik:Shareif">Shareif</a></div>', 'out' => '')); foreach ($testCases as $testCase) { $this->assertEquals($testCase['out'], ActivityFeedHelper::filterTextBetweenTags($testCase['in'])); } }
function WidgetCommunity($id, $params) { global $wgEnableCommunityWidget, $wgTitle; if (empty($wgEnableCommunityWidget)) { return ''; } if ($params['skinname'] != 'oasis') { return ''; } if (!class_exists('ActivityFeedHelper')) { return ''; } wfProfileIn(__METHOD__); global $wgUser, $wgLang, $wgLanguageCode, $wgStylePath, $wgEnableMyHomeExt, $wgContentNamespaces; $total = SiteStats::articles(); /* RT#64490: Strange Article Count in Latest Activity on some new wikis */ if ($total < 0 || $total > 1.0E+18) { $total = 0; } $total = $wgLang->formatNum($total); $footerButton = array(); if (!empty($wgEnableMyHomeExt)) { $footerButton['text'] = wfMsg('widget-community-more'); $footerButton['href'] = Skin::makeSpecialUrl($wgUser->isLoggedIn() ? 'MyHome' : 'ActivityFeed'); $footerButton['class'] = 'wikia-button forward'; } else { $footerButton['text'] = wfMsg('recentchanges'); $footerButton['href'] = Skin::makeSpecialUrl('RecentChanges'); $footerButton['class'] = 'wikia-button forward'; } $maxElements = 5; $includeNamespaces = implode('|', $wgContentNamespaces); $uselang = $wgLang->getCode(); //this should be the same as in /extensions/wikia/MyHome/ActivityFeedHelper.php $parameters = array('type' => 'widget', 'tagid' => $id, 'maxElements' => $maxElements, 'flags' => array('shortlist'), 'uselang' => $uselang, 'includeNamespaces' => $includeNamespaces); $userLangEqContent = $uselang == $wgLanguageCode; $feedHTML = ActivityFeedHelper::getListForWidget($parameters, $userLangEqContent); // template stuff $tmpl = new EasyTemplate(dirname(__FILE__)); $tmpl->set_vars(array('tagid' => $id, 'timestamp' => wfTimestampNow(), 'header' => wfMsg('monaco-articles-on', $total), 'feedHTML' => $feedHTML, 'footerButton' => $footerButton)); $output = $tmpl->render('WidgetCommunity'); wfProfileOut(__METHOD__); return $output; }
public function execute() { $params = $this->extractRequestParams(); $attributes = ''; $parameters = ActivityFeedHelper::parseParameters($attributes); $removeDuplicatesType = in_array('shortlist', $parameters['flags']) ? 1 : 0; //remove duplicates using only title for shortlist $feedProxy = new ActivityFeedAPIProxy($parameters['includeNamespaces']); $feedRenderer = new ActivityFeedRenderer(); $feedProvider = new DataFeedProvider($feedProxy, $removeDuplicatesType, $parameters); $feedData = $feedProvider->get($parameters['maxElements']); #echo "<pre>"; #print_r($feedData); #die; $data = array(); foreach ($feedData["results"] as $id => $row) { $data[] = $this->rewriteRow($row); } #print_r($data); #die; $this->getResult()->setIndexedTagName($data, "af"); $this->getResult()->addValue("query", $this->getModuleName(), $data); }
/** * wrapper for getList witch caching output * @author Maciej Błaszkowski <marooned at wikia-inc.com> */ static function getListForWidget($parameters, $userLangEqContent) { global $wgMemc; wfProfileIn(__METHOD__); $key = wfMemcKey('community_widget_v1', $parameters['uselang']); $feedHTML = $wgMemc->get($key); if (empty($feedHTML)) { $feedHTML = ActivityFeedHelper::getList($parameters); /* RT#50042: Don't show deleted pages in last activity widget */ /* Probably content is not getting refreshed often enough */ $wgMemc->set($key, $feedHTML, 60 * 5); } wfProfileOut(__METHOD__); return $feedHTML; }
/** * Store custom data in rc_params field as JSON encoded table prefixed with extra string. * To pass in extra key-value pairs, pass in 'data' as an associative array. * * @see http://www.mediawiki.org/wiki/Logging_table#log_params * * @author Maciej Brencz <*****@*****.**> */ public static function storeInRecentChanges(RecentChange $rc, $data = array()) { wfProfileIn(__METHOD__); /* @var $wgParser Parser */ global $wgParser; // If we have existing data packed into rc_params, make sure it is preserved. if (isset($rc->mAttribs['rc_params'])) { $unpackedData = self::unpackData($rc->mAttribs['rc_params']); if (is_array($unpackedData)) { foreach ($unpackedData as $key => $val) { // Give preference to the data array that was passed into the function. if (!isset($data[$key])) { $data[$key] = $val; } } } } // summary generated by MW: store auto-summary type if (Wikia::isVarSet('AutoSummaryType')) { $data['autosummaryType'] = Wikia::getVar('AutoSummaryType'); } switch ($rc->getAttribute('rc_type')) { // existing article case RC_EDIT: // rollback: store ID of the revision rollback is made to if (Wikia::isVarSet('RollbackedRevId')) { $data['rollback'] = true; $data['revId'] = Wikia::getVar('RollbackedRevId'); } // edit from view mode if (Wikia::isVarSet('EditFromViewMode')) { $data['viewMode'] = 1; if (Wikia::isVarSet('EditFromViewMode') == 'CategorySelect') { $data['CategorySelect'] = 1; } } // section edit: store section name and modified summary if (self::$editedSectionName !== false) { // store section name $data['sectionName'] = self::$editedSectionName; // edit summary $comment = trim($rc->getAttribute('rc_comment')); // summary has changed - store modified summary if (!preg_match('#^/\\*(.*)\\*/$#', $comment)) { // remove /* Section title */ $comment = preg_replace('#/\\*(.*)\\*/#', '', $comment); // remove all wikitext $comment = trim($wgParser->stripSectionName($comment)); if ($comment != '') { $data['summary'] = $comment; } } } break; // new article // new article case RC_NEW: $content = $wgParser->getOutput()->getText(); // remove [edit] section links $content = preg_replace('#<span class="editsection">(.*)</a>]</span>#', '', $content); // remove <script> tags (RT #46350) $content = preg_replace('#<script[^>]+>(.*)<\\/script>#', '', $content); // remove text between tags (RT #141394) and get rid of photo attribution (BugId:23871) $content = ActivityFeedHelper::filterTextBetweenTags($content); // remove HTML tags $content = trim(strip_tags($content)); // store first 150 characters of parsed content $data['intro'] = mb_substr($content, 0, 150); $data['intro'] = strtr($data['intro'], array(' ' => ' ', '&' => '&')); break; } //allow to alter $data by other extensions (eg. Article Comments) wfRunHooks('MyHome:BeforeStoreInRC', array(&$rc, &$data)); // encode data to be stored in rc_params if (!empty($data)) { $rc->mAttribs['rc_params'] = self::packData($data); } Wikia::setVar('rc', $rc); Wikia::setVar('rc_data', $data); wfProfileOut(__METHOD__); return true; }