Example #1
0
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']));
     }
 }
Example #3
0
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);
 }
Example #5
0
 /**
  * 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;
 }
Example #6
0
 /**
  * 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('&nbsp;' => ' ', '&amp;' => '&'));
             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;
 }