class OgResolvedGroupCollection in Organic groups 8
Contains a collection of groups discovered by OgGroupResolver plugins.
Hierarchy
- class \Drupal\og\OgResolvedGroupCollection implements OgResolvedGroupCollectionInterface
Expanded class hierarchy of OgResolvedGroupCollection
2 files declare their use of OgResolvedGroupCollection
- OgContext.php in src/
ContextProvider/ OgContext.php - OgResolvedGroupCollectionTest.php in tests/
src/ Unit/ OgResolvedGroupCollectionTest.php
File
- src/
OgResolvedGroupCollection.php, line 12
Namespace
Drupal\ogView source
class OgResolvedGroupCollection implements OgResolvedGroupCollectionInterface {
/**
* A collection of groups that were resolved by OgGroupResolver plugins.
*
* @var array
* An array of group information. Each item will be an associative array
* with the following keys:
* - entity: the group entity.
* - votes: an array of votes that have been cast for this entity.
* - cache_contexts: an array of cache contexts that were used to discover
* this group.
*/
protected $groupInfo = [];
/**
* The default weight of votes cast by plugins.
*
* @var int
*/
protected $voteWeight = 0;
/**
* {@inheritdoc}
*/
public function addGroup(ContentEntityInterface $group, array $cache_contexts = [], $weight = NULL) {
if ($weight !== NULL && !is_int($weight)) {
throw new \InvalidArgumentException('Vote weight should be an integer.');
}
$key = $this
->generateKey($group);
$this->groupInfo[$key]['entity'] = $group;
$this->groupInfo[$key]['votes'][] = $weight !== NULL ? $weight : $this
->getVoteWeight();
foreach ($cache_contexts as $cache_context) {
$this->groupInfo[$key]['cache_contexts'][$cache_context] = $cache_context;
}
}
/**
* {@inheritdoc}
*/
public function hasGroup(ContentEntityInterface $group) {
$key = $this
->generateKey($group);
return array_key_exists($key, $this->groupInfo);
}
/**
* {@inheritdoc}
*/
public function getGroupInfo() {
return $this->groupInfo;
}
/**
* {@inheritdoc}
*/
public function removeGroup(ContentEntityInterface $group) {
$key = $this
->generateKey($group);
unset($this->groupInfo[$key]);
}
/**
* {@inheritdoc}
*/
public function getVoteWeight() {
return $this->voteWeight;
}
/**
* {@inheritdoc}
*/
public function setVoteWeight($weight) {
if (!is_int($weight)) {
throw new \InvalidArgumentException('Vote weight should be an integer.');
}
$this->voteWeight = $weight;
}
/**
* {@inheritdoc}
*/
public function sort() {
// Find the best matching group by iterating over the candidates and return
// the one that has the most "votes". If there are multiple candidates with
// the same number of votes then the candidate that was resolved by the
// plugin(s) with the highest priority will be returned.
uasort($this->groupInfo, function ($a, $b) {
if (count($a['votes']) == count($b['votes'])) {
return array_sum($a['votes']) < array_sum($b['votes']) ? 1 : -1;
}
return count($a['votes']) < count($b['votes']) ? 1 : -1;
});
}
/**
* Generates a key that can be used to identify the given group.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $group
* The group for which to generate the key.
*
* @return string
* The key.
*/
protected function generateKey(ContentEntityInterface $group) {
return $group
->getEntityTypeId() . '|' . $group
->id();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
OgResolvedGroupCollection:: |
protected | property | A collection of groups that were resolved by OgGroupResolver plugins. | |
OgResolvedGroupCollection:: |
protected | property | The default weight of votes cast by plugins. | |
OgResolvedGroupCollection:: |
public | function |
Adds a group to the collection. Overrides OgResolvedGroupCollectionInterface:: |
|
OgResolvedGroupCollection:: |
protected | function | Generates a key that can be used to identify the given group. | |
OgResolvedGroupCollection:: |
public | function |
Returns information about the groups in the collection. Overrides OgResolvedGroupCollectionInterface:: |
|
OgResolvedGroupCollection:: |
public | function |
Gets the current default vote weight. Overrides OgResolvedGroupCollectionInterface:: |
|
OgResolvedGroupCollection:: |
public | function |
Returns whether the given group has already been added. Overrides OgResolvedGroupCollectionInterface:: |
|
OgResolvedGroupCollection:: |
public | function |
Removes the given group from the collection. Overrides OgResolvedGroupCollectionInterface:: |
|
OgResolvedGroupCollection:: |
public | function |
Sets the default weight of the votes that are added by OgResolver plugins. Overrides OgResolvedGroupCollectionInterface:: |
|
OgResolvedGroupCollection:: |
public | function |
Sorts the groups in the collection according to their vote count. Overrides OgResolvedGroupCollectionInterface:: |