+
+ public function isLocal()
+ {
+ $local = Local_group::getKV('group_id', $this->id);
+ return ($local instanceof Local_group);
+ }
+
+ static function groupsFromText($text, Profile $profile)
+ {
+ $groups = array();
+
+ /* extract all !group */
+ $count = preg_match_all('/(?:^|\s)!(' . Nickname::DISPLAY_FMT . ')/',
+ strtolower($text),
+ $match);
+
+ if (!$count) {
+ return $groups;
+ }
+
+ foreach (array_unique($match[1]) as $nickname) {
+ $group = self::getForNickname($nickname, $profile);
+ if ($group instanceof User_group && $profile->isMember($group)) {
+ $groups[] = clone($group);
+ }
+ }
+
+ return $groups;
+ }
+
+ static function idsFromText($text, Profile $profile)
+ {
+ $ids = array();
+ $groups = self::groupsFromText($text, $profile);
+ foreach ($groups as $group) {
+ $ids[$group->id] = true;
+ }
+ return array_keys($ids);
+ }