public function onAfterInsert($revision, array $new, array $metadata) { if (!$revision instanceof AbstractRevision) { throw new InvalidDataException('EditCountListener can only attach to AbstractRevision storage'); } $action = $revision->getChangeType(); $increase = $this->actions->getValue($action, 'editcount'); if ($increase) { $revision->getUser()->incEditCount(); } }
/** * @param PostRevision $post * @param string $action * @return string */ public function getLogType(PostRevision $post, $action) { $logType = $this->actions->getValue($action, 'log_type'); if ($logType instanceof Closure) { $logType = $logType($post, $this); } return $logType; }
protected function addModules(OutputPage $out, $action) { if ($this->actions->hasValue($action, 'modules')) { $out->addModuleStyles($this->actions->getValue($action, 'modules')); } else { $out->addModules(array('ext.flow')); } if ($this->actions->hasValue($action, 'moduleStyles')) { $out->addModuleStyles($this->actions->getValue($action, 'moduleStyles')); } else { $out->addModuleStyles(array('mediawiki.ui', 'mediawiki.ui.anchor', 'mediawiki.ui.button', 'mediawiki.ui.input', 'mediawiki.ui.icon', 'mediawiki.ui.text', 'ext.flow.styles.base', 'ext.flow.mediawiki.ui.tooltips', 'ext.flow.mediawiki.ui.form', 'ext.flow.mediawiki.ui.modal', 'ext.flow.mediawiki.ui.text', 'oojs-ui.styles.icons', 'oojs-ui.styles.icons-layout', 'oojs-ui.styles.icons-interactions', 'ext.flow.board.styles', 'ext.flow.board.topic.styles', 'oojs-ui.styles.icons', 'oojs-ui.styles.icons-alerts', 'oojs-ui.styles.icons-content', 'oojs-ui.styles.icons-layout', 'oojs-ui.styles.icons-movement', 'oojs-ui.styles.icons-indicators', 'oojs-ui.styles.icons-editing-core', 'oojs-ui.styles.icons-moderation', 'oojs-ui.styles.textures')); } // Add Parsoid modules if necessary Parsoid\Utils::onFlowAddModules($out); // Allow other extensions to add modules Hooks::run('FlowAddModules', array($out)); }
/** * @param AbstractRevision $revision * @param string $action * @return bool */ public function isAllowed(AbstractRevision $revision, $action) { $allowed = $this->actions->getValue($action, 'rc_insert'); if ($allowed instanceof Closure) { $allowed = $allowed($revision, $this); } return (bool) $allowed; }
/** * Determines if a flow record should be displayed in Special:Watchlist * * @param array $changeData * @return bool */ protected function isRecordHidden(array $changeData) { if ($this->extendWatchlist) { return false; } // Check for legacy action names and convert it $alias = $this->actions->getValue($changeData['action']); if (is_string($alias)) { $action = $alias; } else { $action = $changeData['action']; } // * Display the most recent new post, edit post, edit title for a topic // * Display the most recent header edit // * Display all new topic and moderation actions switch ($action) { case 'create-header': case 'edit-header': if (isset($this->displayStatus['header-' . $changeData['workflow']]) && $this->displayStatus['header-' . $changeData['workflow']] !== $changeData['revision']) { return true; } $this->displayStatus['header-' . $changeData['workflow']] = $changeData['revision']; break; case 'hide-post': case 'hide-topic': case 'delete-post': case 'delete-topic': case 'suppress-post': case 'suppress-topic': case 'restore-post': case 'restore-topic': case 'lock-topic': // moderation actions are always shown when visible to the user return false; case 'new-topic': case 'reply': case 'edit-post': case 'edit-title': case 'create-topic-summary': case 'edit-topic-summary': if (isset($this->displayStatus['topic-' . $changeData['workflow']]) && $this->displayStatus['topic-' . $changeData['workflow']] !== $changeData['revision']) { return true; } $this->displayStatus['topic-' . $changeData['workflow']] = $changeData['revision']; break; } return false; }
/** * Returns the permission specified in FlowActions for the given action * against the given revision's moderation state. * * @param AbstractRevision|null $revision * @param string $action * @param string $type * @return Closure|string */ public function getPermission(AbstractRevision $revision = null, $action, $type = 'permissions') { // $revision may be null if the revision has yet to be created $moderationState = AbstractRevision::MODERATED_NONE; if ($revision !== null) { $moderationState = $revision->getModerationState(); } $permission = $this->actions->getValue($action, $type, $moderationState); // Some permissions may be more complex to be defined as simple array // values, in which case they're a Closure (which will accept // AbstractRevision & FlowActionPermissions as arguments) if ($permission instanceof Closure) { $permission = $permission($revision, $this); } return $permission; }
/** * @param AbstractRevision $revision * @return bool */ private function excludeFromHistory(AbstractRevision $revision) { return (bool) $this->actions->getValue($revision->getChangeType(), 'exclude_from_history'); }
/** * @param AbstractRevision $revision * @return bool */ private function excludeFromContributions(AbstractRevision $revision) { return (bool) $this->actions->getValue($revision->getChangeType(), 'exclude_from_contributions'); }
public function testAliasedTopLevelValues() { $actions = new FlowActions(array('something' => 'aliased', 'aliased' => array('real' => 'value'))); $this->assertEquals('value', $actions->getValue('something', 'real')); }
/** * @param array $data * @param FlowActions $actions * @param string $changeType * @return array */ protected function getDescriptionParams(array $data, FlowActions $actions, $changeType) { $source = $actions->getValue($changeType, 'history', 'i18n-params'); $params = array(); foreach ($source as $param) { if (isset($data['properties'][$param])) { $params[] = $data['properties'][$param]; } else { wfDebugLog('Flow', __METHOD__ . ": Missing expected parameter {$param} for change type {$changeType}"); $params[] = ''; } } return $params; }