// Post composition
'composition' => [
DI::l10n()->t('Post Composition Features'),
- ['aclautomention', DI::l10n()->t('Auto-mention Forums'), DI::l10n()->t('Add/remove mention when a forum page is selected/deselected in ACL window.'), false, DI::config()->get('feature_lock', 'aclautomention', false)],
+ ['aclautomention', DI::l10n()->t('Auto-mention Groups'), DI::l10n()->t('Add/remove mention when a group page is selected/deselected in ACL window.'), false, DI::config()->get('feature_lock', 'aclautomention', false)],
['explicit_mentions', DI::l10n()->t('Explicit Mentions'), DI::l10n()->t('Add explicit mentions to comment box for manual control over who gets mentioned in replies.'), false, DI::config()->get('feature_lock', 'explicit_mentions', false)],
['add_abstract', DI::l10n()->t('Add an abstract from ActivityPub content warnings'), DI::l10n()->t('Add an abstract when commenting on ActivityPub posts with a content warning. Abstracts are displayed as content warning on systems like Mastodon or Pleroma.'), false, DI::config()->get('feature_lock', 'add_abstract', false)],
],
// Advanced Profile Settings
'advanced_profile' => [
DI::l10n()->t('Advanced Profile Settings'),
- ['forumlist_profile', DI::l10n()->t('List Forums'), DI::l10n()->t('Show visitors public community forums at the Advanced Profile Page'), false, DI::config()->get('feature_lock', 'forumlist_profile', false)],
+ ['forumlist_profile', DI::l10n()->t('List Groups'), DI::l10n()->t('Show visitors public groups at the Advanced Profile Page'), false, DI::config()->get('feature_lock', 'forumlist_profile', false)],
['tagadelic', DI::l10n()->t('Tag Cloud'), DI::l10n()->t('Provide a personal tag cloud on your profile page'), false, DI::config()->get('feature_lock', 'tagadelic', false)],
['profile_membersince', DI::l10n()->t('Display Membership Date'), DI::l10n()->t('Display membership date in profile'), false, DI::config()->get('feature_lock', 'profile_membersince', false)],
],
+++ /dev/null
-<?php
-/**
- * @copyright Copyright (C) 2010-2023, the Friendica project
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-namespace Friendica\Content;
-
-use Friendica\Content\Text\HTML;
-use Friendica\Core\Protocol;
-use Friendica\Core\Renderer;
-use Friendica\Database\DBA;
-use Friendica\DI;
-use Friendica\Model\Contact;
-
-/**
- * This class handles methods related to the forum functionality
- */
-class ForumManager
-{
- /**
- * Function to list all forums a user is connected with
- *
- * @param int $uid of the profile owner
- * @param boolean $lastitem Sort by lastitem
- * @param boolean $showhidden Show forums which are not hidden
- * @param boolean $showprivate Show private groups
- *
- * @return array
- * 'url' => forum url
- * 'name' => forum name
- * 'id' => number of the key from the array
- * 'micro' => contact photo in format micro
- * 'thumb' => contact photo in format thumb
- * @throws \Exception
- */
- public static function getList($uid, $lastitem, $showhidden = true, $showprivate = false)
- {
- if ($lastitem) {
- $params = ['order' => ['last-item' => true]];
- } else {
- $params = ['order' => ['name']];
- }
-
- $condition = [
- 'contact-type' => Contact::TYPE_COMMUNITY,
- 'network' => [Protocol::DFRN, Protocol::ACTIVITYPUB],
- 'uid' => $uid,
- 'blocked' => false,
- 'pending' => false,
- 'archive' => false,
- ];
-
- $condition = DBA::mergeConditions($condition, ["`platform` != ?", 'peertube']);
-
- if (!$showprivate) {
- $condition = DBA::mergeConditions($condition, ['manually-approve' => false]);
- }
-
- if (!$showhidden) {
- $condition = DBA::mergeConditions($condition, ['hidden' => false]);
- }
-
- $forumlist = [];
-
- $fields = ['id', 'url', 'name', 'micro', 'thumb', 'avatar', 'network', 'uid'];
- $contacts = DBA::select('account-user-view', $fields, $condition, $params);
- if (!$contacts) {
- return($forumlist);
- }
-
- while ($contact = DBA::fetch($contacts)) {
- $forumlist[] = [
- 'url' => $contact['url'],
- 'name' => $contact['name'],
- 'id' => $contact['id'],
- 'micro' => $contact['micro'],
- 'thumb' => $contact['thumb'],
- ];
- }
- DBA::close($contacts);
-
- return($forumlist);
- }
-
-
- /**
- * Forumlist widget
- *
- * Sidebar widget to show subscribed friendica forums. If activated
- * in the settings, it appears at the notwork page sidebar
- *
- * @param string $baseurl Base module path
- * @param int $uid The ID of the User
- * @param int $cid The contact id which is used to mark a forum as "selected"
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- * @throws \ImagickException
- */
- public static function widget(string $baseurl, int $uid, int $cid = 0)
- {
- $o = '';
-
- //sort by last updated item
- $lastitem = true;
-
- $contacts = self::getList($uid, $lastitem, true, true);
- $total = count($contacts);
- $visible_forums = 10;
-
- if (DBA::isResult($contacts)) {
- $id = 0;
-
- $entries = [];
-
- foreach ($contacts as $contact) {
- $selected = (($cid == $contact['id']) ? ' forum-selected' : '');
-
- $entry = [
- 'url' => $baseurl . '/' . $contact['id'],
- 'external_url' => Contact::magicLinkByContact($contact),
- 'name' => $contact['name'],
- 'cid' => $contact['id'],
- 'selected' => $selected,
- 'micro' => DI::baseUrl()->remove(Contact::getMicro($contact)),
- 'id' => ++$id,
- ];
- $entries[] = $entry;
- }
-
- $tpl = Renderer::getMarkupTemplate('widget_forumlist.tpl');
-
- $o .= Renderer::replaceMacros(
- $tpl,
- [
- '$title' => DI::l10n()->t('Forums'),
- '$forums' => $entries,
- '$link_desc' => DI::l10n()->t('External link to forum'),
- '$total' => $total,
- '$visible_forums' => $visible_forums,
- '$showless' => DI::l10n()->t('show less'),
- '$showmore' => DI::l10n()->t('show more')]
- );
- }
-
- return $o;
- }
-
- /**
- * Format forumlist as contact block
- *
- * This function is used to show the forumlist in
- * the advanced profile.
- *
- * @param int $uid The ID of the User
- * @return string
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- * @throws \ImagickException
- */
- public static function profileAdvanced($uid)
- {
- $profile = intval(Feature::isEnabled($uid, 'forumlist_profile'));
- if (!$profile) {
- return '';
- }
-
- $o = '';
-
- // place holder in case somebody wants configurability
- $show_total = 9999;
-
- //don't sort by last updated item
- $lastitem = false;
-
- $contacts = self::getList($uid, $lastitem, false, false);
-
- $total_shown = 0;
- foreach ($contacts as $contact) {
- $o .= HTML::micropro($contact, true, 'forumlist-profile-advanced');
- $total_shown++;
- if ($total_shown == $show_total) {
- break;
- }
- }
-
- return $o;
- }
-
- /**
- * count unread forum items
- *
- * Count unread items of connected forums and private groups
- *
- * @return array
- * 'id' => contact id
- * 'name' => contact/forum name
- * 'count' => counted unseen forum items
- * @throws \Exception
- */
- public static function countUnseenItems()
- {
- $stmtContacts = DBA::p(
- "SELECT `contact`.`id`, `contact`.`name`, COUNT(*) AS `count` FROM `post-user-view`
- INNER JOIN `contact` ON `post-user-view`.`contact-id` = `contact`.`id`
- WHERE `post-user-view`.`uid` = ? AND `post-user-view`.`visible` AND NOT `post-user-view`.`deleted` AND `post-user-view`.`unseen`
- AND `contact`.`network` IN (?, ?) AND `contact`.`contact-type` = ?
- AND NOT `contact`.`blocked` AND NOT `contact`.`hidden`
- AND NOT `contact`.`pending` AND NOT `contact`.`archive`
- AND `contact`.`uid` = ?
- GROUP BY `contact`.`id`",
- DI::userSession()->getLocalUserId(), Protocol::DFRN, Protocol::ACTIVITYPUB, Contact::TYPE_COMMUNITY, DI::userSession()->getLocalUserId()
- );
-
- return DBA::toArray($stmtContacts);
- }
-}
--- /dev/null
+<?php
+/**
+ * @copyright Copyright (C) 2010-2023, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Content;
+
+use Friendica\Content\Text\HTML;
+use Friendica\Core\Protocol;
+use Friendica\Core\Renderer;
+use Friendica\Database\DBA;
+use Friendica\DI;
+use Friendica\Model\Contact;
+
+/**
+ * This class handles methods related to the group functionality
+ */
+class GroupManager
+{
+ /**
+ * Function to list all groups a user is connected with
+ *
+ * @param int $uid of the profile owner
+ * @param boolean $lastitem Sort by lastitem
+ * @param boolean $showhidden Show groups which are not hidden
+ * @param boolean $showprivate Show private groups
+ *
+ * @return array
+ * 'url' => group url
+ * 'name' => group name
+ * 'id' => number of the key from the array
+ * 'micro' => contact photo in format micro
+ * 'thumb' => contact photo in format thumb
+ * @throws \Exception
+ */
+ public static function getList($uid, $lastitem, $showhidden = true, $showprivate = false)
+ {
+ if ($lastitem) {
+ $params = ['order' => ['last-item' => true]];
+ } else {
+ $params = ['order' => ['name']];
+ }
+
+ $condition = [
+ 'contact-type' => Contact::TYPE_COMMUNITY,
+ 'network' => [Protocol::DFRN, Protocol::ACTIVITYPUB],
+ 'uid' => $uid,
+ 'blocked' => false,
+ 'pending' => false,
+ 'archive' => false,
+ ];
+
+ $condition = DBA::mergeConditions($condition, ["`platform` != ?", 'peertube']);
+
+ if (!$showprivate) {
+ $condition = DBA::mergeConditions($condition, ['manually-approve' => false]);
+ }
+
+ if (!$showhidden) {
+ $condition = DBA::mergeConditions($condition, ['hidden' => false]);
+ }
+
+ $groupList = [];
+
+ $fields = ['id', 'url', 'name', 'micro', 'thumb', 'avatar', 'network', 'uid'];
+ $contacts = DBA::select('account-user-view', $fields, $condition, $params);
+ if (!$contacts) {
+ return $groupList;
+ }
+
+ while ($contact = DBA::fetch($contacts)) {
+ $groupList[] = [
+ 'url' => $contact['url'],
+ 'name' => $contact['name'],
+ 'id' => $contact['id'],
+ 'micro' => $contact['micro'],
+ 'thumb' => $contact['thumb'],
+ ];
+ }
+ DBA::close($contacts);
+
+ return($groupList);
+ }
+
+
+ /**
+ * Group list widget
+ *
+ * Sidebar widget to show subscribed Friendica groups. If activated
+ * in the settings, it appears in the network page sidebar
+ *
+ * @param string $baseurl Base module path
+ * @param int $uid The ID of the User
+ * @param int $cid The contact id which is used to mark a group as "selected"
+ * @return string
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
+ */
+ public static function widget(string $baseurl, int $uid, int $cid = 0)
+ {
+ $o = '';
+
+ //sort by last updated item
+ $lastitem = true;
+
+ $contacts = self::getList($uid, $lastitem, true, true);
+ $total = count($contacts);
+ $visibleGroups = 10;
+
+ if (DBA::isResult($contacts)) {
+ $id = 0;
+
+ $entries = [];
+
+ foreach ($contacts as $contact) {
+ $selected = (($cid == $contact['id']) ? ' group-selected' : '');
+
+ $entry = [
+ 'url' => $baseurl . '/' . $contact['id'],
+ 'external_url' => Contact::magicLinkByContact($contact),
+ 'name' => $contact['name'],
+ 'cid' => $contact['id'],
+ 'selected' => $selected,
+ 'micro' => DI::baseUrl()->remove(Contact::getMicro($contact)),
+ 'id' => ++$id,
+ ];
+ $entries[] = $entry;
+ }
+
+ $tpl = Renderer::getMarkupTemplate('widget/group_list.tpl');
+
+ $o .= Renderer::replaceMacros(
+ $tpl,
+ [
+ '$title' => DI::l10n()->t('Groups'),
+ '$groups' => $entries,
+ '$link_desc' => DI::l10n()->t('External link to group'),
+ '$total' => $total,
+ '$visible_groups' => $visibleGroups,
+ '$showless' => DI::l10n()->t('show less'),
+ '$showmore' => DI::l10n()->t('show more')]
+ );
+ }
+
+ return $o;
+ }
+
+ /**
+ * Format group list as contact block
+ *
+ * This function is used to show the group list in
+ * the advanced profile.
+ *
+ * @param int $uid The ID of the User
+ * @return string
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
+ */
+ public static function profileAdvanced($uid)
+ {
+ $profile = intval(Feature::isEnabled($uid, 'forumlist_profile'));
+ if (!$profile) {
+ return '';
+ }
+
+ $o = '';
+
+ // placeholder in case somebody wants configurability
+ $show_total = 9999;
+
+ //don't sort by last updated item
+ $lastitem = false;
+
+ $contacts = self::getList($uid, $lastitem, false, false);
+
+ $total_shown = 0;
+ foreach ($contacts as $contact) {
+ $o .= HTML::micropro($contact, true, 'grouplist-profile-advanced');
+ $total_shown++;
+ if ($total_shown == $show_total) {
+ break;
+ }
+ }
+
+ return $o;
+ }
+
+ /**
+ * count unread group items
+ *
+ * Count unread items of connected groups and private groups
+ *
+ * @return array
+ * 'id' => contact id
+ * 'name' => contact/group name
+ * 'count' => counted unseen group items
+ * @throws \Exception
+ */
+ public static function countUnseenItems()
+ {
+ $stmtContacts = DBA::p(
+ "SELECT `contact`.`id`, `contact`.`name`, COUNT(*) AS `count` FROM `post-user-view`
+ INNER JOIN `contact` ON `post-user-view`.`contact-id` = `contact`.`id`
+ WHERE `post-user-view`.`uid` = ? AND `post-user-view`.`visible` AND NOT `post-user-view`.`deleted` AND `post-user-view`.`unseen`
+ AND `contact`.`network` IN (?, ?) AND `contact`.`contact-type` = ?
+ AND NOT `contact`.`blocked` AND NOT `contact`.`hidden`
+ AND NOT `contact`.`pending` AND NOT `contact`.`archive`
+ AND `contact`.`uid` = ?
+ GROUP BY `contact`.`id`",
+ DI::userSession()->getLocalUserId(), Protocol::DFRN, Protocol::ACTIVITYPUB, Contact::TYPE_COMMUNITY, DI::userSession()->getLocalUserId()
+ );
+
+ return DBA::toArray($stmtContacts);
+ }
+}
{
// Look for any tags and linkify them
$item['inform'] = '';
- $private_forum = false;
+ $private_group = false;
$private_id = null;
- $only_to_forum = false;
- $forum_contact = [];
+ $only_to_group = false;
+ $group_contact = [];
$receivers = [];
// Convert mentions in the body to a unified format
$item['body'] = BBCode::setMentions($item['body'], $item['uid'], $item['network']);
- // Search for forum mentions
+ // Search for group mentions
foreach (Tag::getFromBody($item['body'], Tag::TAG_CHARACTER[Tag::MENTION] . Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION]) as $tag) {
$contact = Contact::getByURLForUser($tag[2], $item['uid']);
if (empty($contact)) {
}
if (!empty($contact['prv']) || ($tag[1] == Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION])) {
- $private_forum = $contact['prv'];
- $only_to_forum = ($tag[1] == Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION]);
+ $private_group = $contact['prv'];
+ $only_to_group = ($tag[1] == Tag::TAG_CHARACTER[Tag::EXCLUSIVE_MENTION]);
$private_id = $contact['id'];
- $forum_contact = $contact;
- Logger::info('Private forum or exclusive mention', ['url' => $tag[2], 'mention' => $tag[1]]);
+ $group_contact = $contact;
+ Logger::info('Private group or exclusive mention', ['url' => $tag[2], 'mention' => $tag[1]]);
} elseif ($item['allow_cid'] == '<' . $contact['id'] . '>') {
- $private_forum = false;
- $only_to_forum = true;
+ $private_group = false;
+ $only_to_group = true;
$private_id = $contact['id'];
- $forum_contact = $contact;
- Logger::info('Public forum', ['url' => $tag[2], 'mention' => $tag[1]]);
+ $group_contact = $contact;
+ Logger::info('Public group', ['url' => $tag[2], 'mention' => $tag[1]]);
} else {
- Logger::info('Post with forum mention will not be converted to a forum post', ['url' => $tag[2], 'mention' => $tag[1]]);
+ Logger::info('Post with group mention will not be converted to a group post', ['url' => $tag[2], 'mention' => $tag[1]]);
}
}
Logger::info('Got inform', ['inform' => $item['inform']]);
- if (($item['gravity'] == ItemModel::GRAVITY_PARENT) && !empty($forum_contact) && ($private_forum || $only_to_forum)) {
- // we tagged a forum in a top level post. Now we change the post
- $item['private'] = $private_forum ? ItemModel::PRIVATE : ItemModel::UNLISTED;
+ if (($item['gravity'] == ItemModel::GRAVITY_PARENT) && !empty($group_contact) && ($private_group || $only_to_group)) {
+ // we tagged a group in a top level post. Now we change the post
+ $item['private'] = $private_group ? ItemModel::PRIVATE : ItemModel::UNLISTED;
- if ($only_to_forum) {
+ if ($only_to_group) {
$item['postopts'] = '';
}
$item['deny_cid'] = '';
$item['deny_gid'] = '';
- if ($private_forum) {
+ if ($private_group) {
$item['allow_cid'] = '<' . $private_id . '>';
- $item['allow_gid'] = '<' . Circle::getIdForForum($forum_contact['id']) . '>';
+ $item['allow_gid'] = '<' . Circle::getIdForGroup($group_contact['id']) . '>';
} else {
$item['allow_cid'] = '';
$item['allow_gid'] = '';
$post['body'] = $this->bbCodeVideo->transform($post['body']);
$post = $this->setObjectType($post);
- // Personal notes must never be altered to a forum post.
+ // Personal notes must never be altered to a group post.
if ($post['post-type'] != ItemModel::PT_PERSONAL_NOTE) {
// Look for any tags and linkify them
$post = $this->expandTags($post);
'$apps' => $this->getAppMenu(),
'$home' => $this->l10n->t('Go back'),
'$clear_notifs' => $this->l10n->t('Clear notifications'),
- '$search_hint' => $this->l10n->t('@name, !forum, #tags, content')
+ '$search_hint' => $this->l10n->t('@name, !group, #tags, content')
]);
Hook::callAll('page_header', $nav);
];
if ($this->config->get('system', 'poco_local_search')) {
- $nav['searchoption'][] = $this->l10n->t('Forums');
+ $nav['searchoption'][] = $this->l10n->t('Groups');
}
}
'$id' => $id,
'$search_label' => DI::l10n()->t('Search'),
'$save_label' => $save_label,
- '$search_hint' => DI::l10n()->t('@name, !forum, #tags, content'),
+ '$search_hint' => DI::l10n()->t('@name, !group, #tags, content'),
'$mode' => $mode,
'$return_url' => urlencode(Search::getSearchPath($s)),
];
];
if (DI::config()->get('system', 'poco_local_search')) {
- $values['$searchoption']['forums'] = DI::l10n()->t('Forums');
+ $values['$searchoption']['groups'] = DI::l10n()->t('Groups');
}
}
['ref' => 'person', 'name' => DI::l10n()->t('Persons')],
['ref' => 'organisation', 'name' => DI::l10n()->t('Organisations')],
['ref' => 'news', 'name' => DI::l10n()->t('News')],
- ['ref' => 'community', 'name' => DI::l10n()->t('Forums')],
+ ['ref' => 'community', 'name' => DI::l10n()->t('Groups')],
];
return self::filter('accounttype', DI::l10n()->t('Account Types'), '',
$acl_contacts[] = $acl_yourself;
- $acl_forums = Contact::selectToArray($fields,
+ $acl_groups = Contact::selectToArray($fields,
['uid' => $user_id, 'self' => false, 'blocked' => false, 'archive' => false, 'deleted' => false,
'network' => Protocol::FEDERATED, 'pending' => false, 'contact-type' => Contact::TYPE_COMMUNITY], $params
);
- $acl_contacts = array_merge($acl_forums, $acl_contacts);
+ $acl_contacts = array_merge($acl_groups, $acl_contacts);
array_walk($acl_contacts, function (&$value) {
$value['type'] = 'contact';
const DEFAULT_DIRECTORY = 'https://dir.friendica.social';
const TYPE_PEOPLE = 0;
- const TYPE_FORUM = 1;
+ const TYPE_GROUP = 1;
const TYPE_ALL = 2;
/**
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function getContactsFromProbe(string $user, $only_forum = false): ResultList
+ public static function getContactsFromProbe(string $user, $only_group = false): ResultList
{
$emptyResultList = new ResultList();
return $emptyResultList;
}
- if ($only_forum && ($user_data['contact-type'] != Contact::TYPE_COMMUNITY)) {
+ if ($only_group && ($user_data['contact-type'] != Contact::TYPE_COMMUNITY)) {
return $emptyResultList;
}
$searchUrl = $server . '/search';
switch ($type) {
- case self::TYPE_FORUM:
- $searchUrl .= '/forum';
+ case self::TYPE_GROUP:
+ $searchUrl .= '/group';
break;
case self::TYPE_PEOPLE:
$searchUrl .= '/people';
{
Logger::info('Searching', ['search' => $search, 'type' => $type, 'start' => $start, 'itempage' => $itemPage]);
- $contacts = Contact::searchByName($search, $type == self::TYPE_FORUM ? 'community' : '', true);
+ $contacts = Contact::searchByName($search, $type == self::TYPE_GROUP ? 'community' : '', true);
$resultList = new ResultList($start, count($contacts), $itemPage);
$return = array_map(function ($result) {
static $contactType = [
'People' => Contact::TYPE_PERSON,
+ // Kept for backward compatibility
'Forum' => Contact::TYPE_COMMUNITY,
+ 'Group' => Contact::TYPE_COMMUNITY,
'Organization' => Contact::TYPE_ORGANISATION,
'News' => Contact::TYPE_NEWS,
];
* @param integer $id Contact ID
* @return integer Circle ID
*/
- public static function getIdForForum(int $id): int
+ public static function getIdForGroup(int $id): int
{
- Logger::info('Get id for forum id', ['id' => $id]);
+ Logger::info('Get id for group id', ['id' => $id]);
$contact = Contact::getById($id, ['uid', 'name', 'contact-type', 'manually-approve']);
if (empty($contact) || ($contact['contact-type'] != Contact::TYPE_COMMUNITY) || !$contact['manually-approve']) {
return 0;
* @param integer $id Contact ID
* @return void
*/
- public static function updateMembersForForum(int $id)
+ public static function updateMembersForGroup(int $id)
{
- Logger::info('Update forum members', ['id' => $id]);
+ Logger::info('Update group members', ['id' => $id]);
$contact = Contact::getById($id, ['uid', 'url']);
if (empty($contact)) {
return;
}
- $gid = self::getIdForForum($id);
+ $gid = self::getIdForGroup($id);
if (empty($gid)) {
return;
}
}
DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $current]);
- Logger::info('Updated forum members', ['id' => $id, 'count' => DBA::count('group_member', ['gid' => $gid])]);
+ Logger::info('Updated group members', ['id' => $id, 'count' => DBA::count('group_member', ['gid' => $gid])]);
}
}
* TYPE_NEWS - the account is a news reflector
* Associated page type: PAGE_SOAPBOX
*
- * TYPE_COMMUNITY - the account is community forum
+ * TYPE_COMMUNITY - the account is community group
* Associated page types: PAGE_COMMUNITY, PAGE_PRVGROUP
*
* TYPE_RELAY - the account is a relay
break;
case self::TYPE_COMMUNITY:
- $account_type = DI::l10n()->t("Forum");
+ $account_type = DI::l10n()->t("Group");
break;
default:
}
/**
- * Is the contact a forum?
+ * Is the contact a group?
*
* @param integer $contactid ID of the contact
*
- * @return boolean "true" if it is a forum
+ * @return boolean "true" if it is a group
*/
- public static function isForum(int $contactid): bool
+ public static function isGroup(int $contactid): bool
{
$fields = ['contact-type'];
$condition = ['id' => $contactid];
return false;
}
- // Is it a forum?
+ // Is it a group?
return ($contact['contact-type'] == self::TYPE_COMMUNITY);
}
$item['deleted'] = $toplevel_parent['deleted'];
$item['wall'] = $toplevel_parent['wall'];
- // Reshares have to keep their permissions to allow forums to work
+ // Reshares have to keep their permissions to allow groups to work
if (!$defined_permissions && (!$item['origin'] || ($item['verb'] != Activity::ANNOUNCE))) {
$item['allow_cid'] = $toplevel_parent['allow_cid'];
$item['allow_gid'] = $toplevel_parent['allow_gid'];
Post::update($fields, ['uri-id' => $posted_item['parent-uri-id'], 'uid' => $posted_item['uid']]);
- // In that function we check if this is a forum post. Additionally we delete the item under certain circumstances
+ // In that function we check if this is a group post. Additionally we delete the item under certain circumstances
if (self::tagDeliver($posted_item['uid'], $post_user_id)) {
// Get the user information for the logging
$user = User::getById($uid);
}
/**
- * Change the owner of a parent item if it had been shared by a forum
+ * Change the owner of a parent item if it had been shared by a group
*
- * (public) forum posts in the new format consist of the regular post by the author
- * followed by an announce message sent from the forum account.
- * Changing the owner helps in grouping forum posts.
+ * (public) group posts in the new format consist of the regular post by the author
+ * followed by an announce message sent from the group account.
+ * Changing the owner helps in grouping group posts.
*
* @param array $item
* @return void
}
if (Contact::isSharing($parent['owner-id'], $item['uid'])) {
- Logger::info('The resharer is no forum: quit', ['resharer' => $item['author-id'], 'owner' => $parent['owner-id'], 'author' => $parent['author-id'], 'uid' => $item['uid']]);
+ Logger::info('The resharer is no group: quit', ['resharer' => $item['author-id'], 'owner' => $parent['owner-id'], 'author' => $parent['author-id'], 'uid' => $item['uid']]);
return;
}
}
if (($uid != 0) && ($item['gravity'] == self::GRAVITY_PARENT)) {
$owner = User::getOwnerDataById($uid);
if (($owner['contact-type'] == User::ACCOUNT_TYPE_COMMUNITY) && !Tag::isMentioned($uri_id, $owner['url'])) {
- Logger::info('Target user is a forum but is not mentioned here, thread will not be stored', ['uid' => $uid, 'uri-id' => $uri_id]);
+ Logger::info('Target user is a group but is not mentioned here, thread will not be stored', ['uid' => $uid, 'uri-id' => $uri_id]);
return 0;
}
}
return 0;
}
- // When the post belongs to a a forum then all forum users are allowed to access it
+ // When the post belongs to a a group then all group users are allowed to access it
foreach (Tag::getByURIId($uriid, [Tag::MENTION, Tag::EXCLUSIVE_MENTION]) as $tag) {
if (DBA::exists('contact', ['uid' => $uid, 'nurl' => Strings::normaliseLink($tag['url']), 'contact-type' => Contact::TYPE_COMMUNITY])) {
$target_uid = User::getIdForURL($tag['url']);
/// @todo On private posts we could obfuscate the date
$update = ($arr['private'] != self::PRIVATE) || in_array($arr['network'], Protocol::FEDERATED);
- // Is it a forum? Then we don't care about the rules from above
+ // Is it a group? Then we don't care about the rules from above
if (!$update && in_array($arr["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN]) && ($arr["parent-uri-id"] === $arr["uri-id"])) {
if (DBA::exists('contact', ['id' => $arr['contact-id'], 'forum' => true])) {
$update = true;
}
/**
- * look for mention tags and setup a second delivery chain for forum/community posts if appropriate
+ * look for mention tags and setup a second delivery chain for group/community posts if appropriate
*
* @param int $uid
* @param int $item_id
}
/**
- * Does the given uri-id belongs to a post that is sent as starting post to a forum?
+ * Does the given uri-id belongs to a post that is sent as starting post to a group?
*
* @param int $uri_id
*
- * @return boolean "true" when it is a forum post
+ * @return boolean "true" when it is a group post
*/
- public static function isForumPost(int $uri_id): bool
+ public static function isGroupPost(int $uri_id): bool
{
foreach (Tag::getByURIId($uri_id, [Tag::EXCLUSIVE_MENTION]) as $tag) {
if (DBA::exists('contact', ['uid' => 0, 'nurl' => Strings::normaliseLink($tag['url']), 'contact-type' => Contact::TYPE_COMMUNITY])) {
const TAG_SELF = 128;
/** @var int Notification about getting poked/prodded/etc. (Obsolete) */
const POKE = 512;
- /** @var int Notification about either a contact had posted something directly or the contact is a mentioned forum */
+ /** @var int Notification about either a contact had posted something directly or the contact is a mentioned group */
const SHARE = 1024;
/** @var int Global System notifications */
* Changes photo permissions that had been embedded in a post
*
* @todo This function currently does have some flaws:
- * - Sharing a post with a forum will create a photo that only the forum can see.
+ * - Sharing a post with a group will create a photo that only the group can see.
* - Sharing a photo again that been shared non public before doesn't alter the permissions.
*
* @return string
/**
* @todo Existing permissions need to be mixed with the new ones.
* Otherwise this creates problems with sharing the same picture multiple times
- * Also check if $str_contact_allow does contain a public forum.
+ * Also check if $str_contact_allow does contain a public group.
* Then set the permissions to public.
*/
*/
const IMPLICIT_MENTION = 8;
/**
- * An exclusive mention transmits the post only to the target account without transmitting it to the followers, usually a forum.
+ * An exclusive mention transmits the post only to the target account without transmitting it to the followers, usually a group.
*/
const EXCLUSIVE_MENTION = 9;
* ACCOUNT_TYPE_NEWS - the account is a news reflector
* Associated page type: PAGE_FLAGS_SOAPBOX
*
- * ACCOUNT_TYPE_COMMUNITY - the account is community forum
+ * ACCOUNT_TYPE_COMMUNITY - the account is community group
* Associated page types: PAGE_COMMUNITY, PAGE_FLAGS_PRVGROUP
*
* ACCOUNT_TYPE_RELAY - the account is a relay
$header = DI::l10n()->t('People Search - %s', $search);
} elseif (strpos($search, '!') === 0) {
$search = trim(substr($search, 1));
- $type = Search::TYPE_FORUM;
- $header = DI::l10n()->t('Forum Search - %s', $search);
+ $type = Search::TYPE_GROUP;
+ $header = DI::l10n()->t('Group Search - %s', $search);
}
$search = Network::convertToIdn($search);
}
if (!$results->getTotal()) {
- $results = Search::getContactsFromProbe(Network::convertToIdn($search), $type == Search::TYPE_FORUM);
+ $results = Search::getContactsFromProbe(Network::convertToIdn($search), $type == Search::TYPE_GROUP);
}
return self::printResult($results, $pager, $header);
'$paginate' => $pager->renderFull($results->getTotal()),
]);
}
-}
\ No newline at end of file
+}
use Friendica\BaseModule;
use Friendica\Content\BoundariesPager;
use Friendica\Content\Conversation;
-use Friendica\Content\ForumManager;
+use Friendica\Content\GroupManager;
use Friendica\Content\Nav;
use Friendica\Content\Widget;
use Friendica\Content\Text\HTML;
/** @var int */
private static $circleId;
/** @var int */
- private static $forumContactId;
+ private static $groupContactId;
/** @var string */
private static $selectedTab;
/** @var mixed */
DI::page()['aside'] .= Widget::accountTypes($module, self::$accountTypeString);
DI::page()['aside'] .= Circle::sidebarWidget($module, $module . '/circle', 'standard', self::$circleId);
- DI::page()['aside'] .= ForumManager::widget($module . '/forum', DI::userSession()->getLocalUserId(), self::$forumContactId);
+ DI::page()['aside'] .= GroupManager::widget($module . '/group', DI::userSession()->getLocalUserId(), self::$groupContactId);
DI::page()['aside'] .= Widget::postedByYear($module . '/archive', DI::userSession()->getLocalUserId(), false);
- DI::page()['aside'] .= Widget::networks($module, !self::$forumContactId ? self::$network : '');
+ DI::page()['aside'] .= Widget::networks($module, !self::$groupContactId ? self::$network : '');
DI::page()['aside'] .= Widget\SavedSearches::getHTML(DI::args()->getQueryString());
DI::page()['aside'] .= Widget::fileAs('filed', '');
$content = '';
- if (self::$forumContactId) {
- // If self::$forumContactId belongs to a community forum or a private group, add a mention to the status editor
- $condition = ["`id` = ? AND `contact-type` = ?", self::$forumContactId, Contact::TYPE_COMMUNITY];
+ if (self::$groupContactId) {
+ // If self::$groupContactId belongs to a community group or a private group, add a mention to the status editor
+ $condition = ["`id` = ? AND `contact-type` = ?", self::$groupContactId, Contact::TYPE_COMMUNITY];
$contact = DBA::selectFirst('contact', ['addr'], $condition);
if (!empty($contact['addr'])) {
$content = '!' . $contact['addr'];
}
$allowedCids = [];
- if (self::$forumContactId) {
- $allowedCids[] = (int) self::$forumContactId;
+ if (self::$groupContactId) {
+ $allowedCids[] = (int) self::$groupContactId;
} elseif (self::$network) {
$condition = [
'uid' => DI::userSession()->getLocalUserId(),
}
$x = [
- 'lockstate' => self::$circleId || self::$forumContactId || self::$network || ACL::getLockstateForUserId($a->getLoggedInUserId()) ? 'lock' : 'unlock',
+ 'lockstate' => self::$circleId || self::$groupContactId || self::$network || ACL::getLockstateForUserId($a->getLoggedInUserId()) ? 'lock' : 'unlock',
'acl' => ACL::getFullSelectorHTML(DI::page(), $a->getLoggedInUserId(), true, $default_permissions),
- 'bang' => ((self::$circleId || self::$forumContactId || self::$network) ? '!' : ''),
+ 'bang' => ((self::$circleId || self::$groupContactId || self::$network) ? '!' : ''),
'content' => $content,
];
$o = Renderer::replaceMacros(Renderer::getMarkupTemplate('section_title.tpl'), [
'$title' => DI::l10n()->t('Circle: %s', $circle['name'])
]) . $o;
- } elseif (self::$forumContactId) {
- $contact = Contact::getById(self::$forumContactId);
+ } elseif (self::$groupContactId) {
+ $contact = Contact::getById(self::$groupContactId);
if (DBA::isResult($contact)) {
$o = Renderer::replaceMacros(Renderer::getMarkupTemplate('contact/list.tpl'), [
'contacts' => [ModuleContact::getContactTemplateVars($contact)],
{
self::$circleId = $this->parameters['circle_id'] ?? 0;
- self::$forumContactId = $this->parameters['contact_id'] ?? 0;
+ self::$groupContactId = $this->parameters['contact_id'] ?? 0;
self::$selectedTab = self::getTimelineOrderBySession(DI::userSession(), DI::pConfig());
if (self::$circleId) {
$conditionStrings = DBA::mergeConditions($conditionStrings, ["`contact-id` IN (SELECT `contact-id` FROM `group_member` WHERE `gid` = ?)", self::$circleId]);
- } elseif (self::$forumContactId) {
+ } elseif (self::$groupContactId) {
$conditionStrings = DBA::mergeConditions($conditionStrings,
["((`contact-id` = ?) OR `uri-id` IN (SELECT `parent-uri-id` FROM `post-user-view` WHERE (`contact-id` = ? AND `gravity` = ? AND `vid` = ? AND `uid` = ?)))",
- self::$forumContactId, self::$forumContactId, Item::GRAVITY_ACTIVITY, Verb::getID(Activity::ANNOUNCE), DI::userSession()->getLocalUserId()]);
+ self::$groupContactId, self::$groupContactId, Item::GRAVITY_ACTIVITY, Verb::getID(Activity::ANNOUNCE), DI::userSession()->getLocalUserId()]);
}
// Currently only the order modes "received" and "commented" are in use
// We aren't going to try and figure out at the item, circle, and page
// level which items you've seen and which you haven't. If you're looking
// at the top level network page just mark everything seen.
- if (!self::$circleId && !self::$forumContactId && !self::$star && !self::$mention) {
+ if (!self::$circleId && !self::$groupContactId && !self::$star && !self::$mention) {
$condition = ['unseen' => true, 'uid' => DI::userSession()->getLocalUserId()];
self::setItemsSeenByCondition($condition);
} elseif (!empty($parents)) {
$page_types = [
User::PAGE_FLAGS_NORMAL => $this->t('Normal Account Page'),
User::PAGE_FLAGS_SOAPBOX => $this->t('Soapbox Page'),
- User::PAGE_FLAGS_COMMUNITY => $this->t('Public Forum'),
+ User::PAGE_FLAGS_COMMUNITY => $this->t('Public Group'),
User::PAGE_FLAGS_FREELOVE => $this->t('Automatic Friend Page'),
- User::PAGE_FLAGS_PRVGROUP => $this->t('Private Forum')
+ User::PAGE_FLAGS_PRVGROUP => $this->t('Private Group')
];
$account_types = [
User::ACCOUNT_TYPE_PERSON => $this->t('Personal Page'),
User::ACCOUNT_TYPE_ORGANISATION => $this->t('Organisation Page'),
User::ACCOUNT_TYPE_NEWS => $this->t('News Page'),
- User::ACCOUNT_TYPE_COMMUNITY => $this->t('Community Forum'),
+ User::ACCOUNT_TYPE_COMMUNITY => $this->t('Community Group'),
User::ACCOUNT_TYPE_RELAY => $this->t('Relay'),
];
$accounts = [
[$this->t('Normal Account'), 0],
[$this->t('Automatic Follower Account'), 0],
- [$this->t('Public Forum Account'), 0],
+ [$this->t('Public Group Account'), 0],
[$this->t('Automatic Friend Account'), 0],
[$this->t('Blog Account'), 0],
- [$this->t('Private Forum Account'), 0]
+ [$this->t('Private Group Account'), 0]
];
$users = 0;
use Friendica\App;
use Friendica\BaseModule;
use Friendica\Contact\Introduction\Repository\Introduction;
-use Friendica\Content\ForumManager;
+use Friendica\Content\GroupManager;
use Friendica\Core\Cache\Capability\ICanCache;
use Friendica\Core\Cache\Enum\Duration;
use Friendica\Core\Config\Capability\IManageConfigValues;
$register_count = 0;
$sysnotify_count = 0;
$circles_unseen = [];
- $forums_unseen = [];
+ $groups_unseen = [];
$event_count = 0;
$today_event_count = 0;
$birthday_count = 0;
$today_birthday_count = 0;
- // Suppress notification display for forum accounts
+ // Suppress notification display for group accounts
if ($this->session->getLocalUserId() && $this->session->get('page_flags', '') != User::PAGE_FLAGS_COMMUNITY) {
if ($this->pconfig->get($this->session->getLocalUserId(), 'system', 'detailed_notif')) {
$notifications = $this->notificationRepo->selectDetailedForUser($this->session->getLocalUserId());
}
}
- foreach (ForumManager::countUnseenItems() as $forum_count) {
- if ($forum_count['count'] > 0) {
- $forums_unseen[] = $forum_count;
+ foreach (GroupManager::countUnseenItems() as $group_count) {
+ if ($group_count['count'] > 0) {
+ $groups_unseen[] = $group_count;
}
}
}
$data['birthdays'] = $birthday_count;
$data['birthdays-today'] = $today_birthday_count;
$data['circles'] = $circles_unseen;
- $data['forums'] = $forums_unseen;
+ $data['groups'] = $groups_unseen;
$data['notification'] = ($notification_count < 50) ? $notification_count : '49+';
$data['notifications'] = $navNotifications;
$condition = DBA::mergeConditions($condition, ["`received` >= ?", DateTimeFormat::convert($datequery2, 'UTC', $this->app->getTimeZone())]);
}
- // Does the profile page belong to a forum?
+ // Does the profile page belong to a group?
// If not then we can improve the performance with an additional condition
if ($profile['account-type'] != User::ACCOUNT_TYPE_COMMUNITY) {
$condition = DBA::mergeConditions($condition, ['contact-id' => $profile['id']]);
use Friendica\App;
use Friendica\Content\Feature;
-use Friendica\Content\ForumManager;
+use Friendica\Content\GroupManager;
use Friendica\Content\Nav;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Config\Capability\IManageConfigValues;
);
}
- //show subscribed forum if it is enabled in the usersettings
+ //show subscribed group if it is enabled in the usersettings
if (Feature::isEnabled($profile['uid'], 'forumlist_profile')) {
$custom_fields += self::buildField(
- 'forumlist',
- $this->t('Forums:'),
- ForumManager::profileAdvanced($profile['uid'])
+ 'group_list',
+ $this->t('Groups:'),
+ GroupManager::profileAdvanced($profile['uid'])
);
}
const TYPE_MENTION_CONTACT = 'c';
const TYPE_MENTION_CIRCLE = 'g';
const TYPE_MENTION_CONTACT_CIRCLE = '';
- const TYPE_MENTION_FORUM = 'f';
+ const TYPE_MENTION_GROUP = 'f';
const TYPE_PRIVATE_MESSAGE = 'm';
const TYPE_ANY_CONTACT = 'a';
'nick' => $contact['addr'] ?: $contact['url'],
'network' => $contact['network'],
'link' => $contact['url'],
- 'forum' => $contact['contact-type'] == Contact::TYPE_COMMUNITY,
+ 'group' => $contact['contact-type'] == Contact::TYPE_COMMUNITY,
];
}
]);
break;
- case self::TYPE_MENTION_FORUM:
+ case self::TYPE_MENTION_GROUP:
$condition = DBA::mergeConditions($condition,
["NOT `self` AND NOT `blocked` AND `notify` != ? AND `contact-type` = ?", '', Contact::TYPE_COMMUNITY
]);
'id' => intval($circle['id']),
'uids' => array_map('intval', explode(',', $circle['uids'])),
'link' => '',
- 'forum' => '0'
+ 'group' => '0'
];
}
if ((count($resultCircles) > 0) && ($search == '')) {
$contacts = Contact::selectToArray([], $condition, ['order' => ['name']]);
}
- $forums = [];
+ $groups = [];
foreach ($contacts as $contact) {
$entry = [
'type' => self::TYPE_MENTION_CONTACT,
'link' => $contact['url'],
'nick' => htmlentities(($contact['attag'] ?? '') ?: $contact['nick']),
'addr' => htmlentities(($contact['addr'] ?? '') ?: $contact['url']),
- 'forum' => $contact['contact-type'] == Contact::TYPE_COMMUNITY,
+ 'group' => $contact['contact-type'] == Contact::TYPE_COMMUNITY,
];
- if ($entry['forum']) {
- $forums[] = $entry;
+ if ($entry['group']) {
+ $groups[] = $entry;
} else {
$resultContacts[] = $entry;
}
}
- if ($forums) {
+ if ($groups) {
if ($search == '') {
- $forums[] = ['separator' => true];
+ $groups[] = ['separator' => true];
}
- $resultContacts = array_merge($forums, $resultContacts);
+ $resultContacts = array_merge($groups, $resultContacts);
}
$resultItems = array_merge($resultCircles, $resultContacts);
'link' => $contact['url'],
'nick' => htmlentities(($contact['nick'] ?? '') ?: $contact['addr']),
'addr' => htmlentities(($contact['addr'] ?? '') ?: $contact['url']),
- 'forum' => $contact['forum']
+ 'group' => $contact['forum']
];
}
}
break;
case 'contacts':
return self::performContactSearch($search, '@');
- case 'forums':
+ case 'groups':
return self::performContactSearch($search, '!');
}
}
$pagetype = Renderer::replaceMacros($pageset_tpl, [
'$account_types' => DI::l10n()->t("Account Types"),
'$user' => DI::l10n()->t("Personal Page Subtypes"),
- '$community' => DI::l10n()->t("Community Forum Subtypes"),
+ '$community' => DI::l10n()->t("Community Group Subtypes"),
'$account_type' => $user['account-type'],
'$type_person' => User::ACCOUNT_TYPE_PERSON,
'$type_organisation' => User::ACCOUNT_TYPE_ORGANISATION,
],
'$account_community' => [
'account-type',
- DI::l10n()->t('Community Forum'),
+ DI::l10n()->t('Community Group'),
User::ACCOUNT_TYPE_COMMUNITY,
DI::l10n()->t('Account for community discussions.'),
$user['account-type'] == User::ACCOUNT_TYPE_COMMUNITY
],
'$page_community' => [
'page-flags',
- DI::l10n()->t('Public Forum'),
+ DI::l10n()->t('Public Group'),
User::PAGE_FLAGS_COMMUNITY,
DI::l10n()->t('Automatically approves all contact requests.'),
$user['page-flags'] == User::PAGE_FLAGS_COMMUNITY
],
'$page_prvgroup' => [
'page-flags',
- DI::l10n()->t('Private Forum [Experimental]'),
+ DI::l10n()->t('Private Group [Experimental]'),
User::PAGE_FLAGS_PRVGROUP,
DI::l10n()->t('Requires manual approval of contact requests.'),
$user['page-flags'] == User::PAGE_FLAGS_PRVGROUP
return false;
}
- // There is no need to create notifications for forum accounts
+ // There is no need to create notifications for group accounts
if ($user['account-type'] == Model\User::ACCOUNT_TYPE_COMMUNITY) {
return false;
}
if ($conv) {
// This will allow us to comment on wall-to-wall items owned by our friends
- // and community forums even if somebody else wrote the post.
+ // and community groups even if somebody else wrote the post.
// bug #517 - this fixes for conversation owner
if ($conv->getMode() == 'profile' && $conv->getProfileOwner() == DI::userSession()->getLocalUserId()) {
return true;
* - Polling the outboxes for missing content?
*
* Missing parts from DFRN:
- * - Public Forum
- * - Private Forum
+ * - Public Group
+ * - Private Group
* - Relocation
*/
class ActivityPub
$item['post-type'] = Item::PT_NOTE;
}
- $item['isForum'] = false;
+ $item['isGroup'] = false;
if (!empty($activity['thread-completion'])) {
if ($activity['thread-completion'] != $item['owner-id']) {
$item['owner-id'] = $item['author-id'];
} else {
$actor = APContact::getByURL($item['owner-link'], false);
- $item['isForum'] = ($actor['type'] ?? 'Person') == 'Group';
+ $item['isGroup'] = ($actor['type'] ?? 'Person') == 'Group';
}
$item['uri'] = $activity['id'];
$item['causer-id'] = ($item['gravity'] == Item::GRAVITY_PARENT) ? $item['owner-id'] : $item['author-id'];
}
- if ($item['isForum'] ?? false) {
+ if ($item['isGroup'] ?? false) {
$item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver);
} else {
$item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver);
}
if (($receiver != 0) && ($item['gravity'] == Item::GRAVITY_PARENT) && !in_array($item['post-reason'], [Item::PR_FOLLOWER, Item::PR_TAG, item::PR_TO, Item::PR_CC, Item::PR_AUDIENCE])) {
- if (!($item['isForum'] ?? false)) {
+ if (!($item['isGroup'] ?? false)) {
if ($item['post-reason'] == Item::PR_BCC) {
Logger::info('Top level post via BCC from a non sharer, ignoring', ['uid' => $receiver, 'contact' => $item['contact-id'], 'url' => $item['uri']]);
continue;
}
}
- $is_forum = false;
+ $isGroup = false;
$user = User::getById($receiver, ['account-type']);
if (!empty($user['account-type'])) {
- $is_forum = ($user['account-type'] == User::ACCOUNT_TYPE_COMMUNITY);
+ $isGroup = ($user['account-type'] == User::ACCOUNT_TYPE_COMMUNITY);
}
if ((DI::pConfig()->get($receiver, 'system', 'accept_only_sharer') == Item::COMPLETION_NONE)
- && ((!$is_forum && !($item['isForum'] ?? false) && ($activity['type'] != 'as:Announce'))
+ && ((!$isGroup && !($item['isGroup'] ?? false) && ($activity['type'] != 'as:Announce'))
|| !Contact::isSharingByURL($activity['actor'], $receiver))) {
- Logger::info('Actor is a non sharer, is no forum or it is no announce', ['uid' => $receiver, 'actor' => $activity['actor'], 'url' => $item['uri'], 'type' => $activity['type']]);
+ Logger::info('Actor is a non sharer, is no group or it is no announce', ['uid' => $receiver, 'actor' => $activity['actor'], 'url' => $item['uri'], 'type' => $activity['type']]);
continue;
}
// Store send a follow request for every reshare - but only when the item had been stored
if ($stored && ($item['private'] != Item::PRIVATE) && ($item['gravity'] == Item::GRAVITY_PARENT) && !empty($item['author-link']) && ($item['author-link'] != $item['owner-link'])) {
$author = APContact::getByURL($item['owner-link'], false);
- // We send automatic follow requests for reshared messages. (We don't need though for forum posts)
+ // We send automatic follow requests for reshared messages. (We don't need though for group posts)
if ($author['type'] != 'Group') {
Logger::info('Send follow request', ['uri' => $item['uri'], 'stored' => $stored, 'to' => $item['author-link']]);
ActivityPub\Transmitter::sendFollowObject($item['uri'], $item['author-link']);
if (!empty($actor)) {
$profile = APContact::getByURL($actor);
$followers = $profile['followers'] ?? '';
- $is_forum = ($profile['type'] ?? '') == 'Group';
+ $isGroup = ($profile['type'] ?? '') == 'Group';
if ($push) {
Contact::updateByUrlIfNeeded($actor);
}
} else {
Logger::info('Empty actor', ['activity' => $activity]);
$followers = '';
- $is_forum = false;
+ $isGroup = false;
}
// We have to prevent false follower assumptions upon thread completions
}
// Fetch the receivers for the public and the followers collection
- if ((($receiver == $followers) || (($receiver == self::PUBLIC_COLLECTION) && !$is_forum)) && !empty($actor)) {
+ if ((($receiver == $followers) || (($receiver == self::PUBLIC_COLLECTION) && !$isGroup)) && !empty($actor)) {
$receivers = self::getReceiverForActor($actor, $tags, $receivers, $follower_target, $profile);
continue;
}
$condition = ['nurl' => Strings::normaliseLink($actor), 'rel' => [Contact::SHARING, Contact::FRIEND],
'network' => $networks, 'archive' => false, 'pending' => false, 'uid' => $contact['uid']];
- // Forum posts are only accepted from forum contacts
+ // Group posts are only accepted from group contacts
if ($contact['contact-type'] == Contact::TYPE_COMMUNITY) {
$condition['rel'] = [Contact::SHARING, Contact::FRIEND, Contact::FOLLOWER];
}
* Returns an array with permissions of the thread parent of the given item array
*
* @param array $item
- * @param bool $is_forum_thread
+ * @param bool $is_group_thread
*
* @return array with permissions
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- private static function fetchPermissionBlockFromThreadParent(array $item, bool $is_forum_thread): array
+ private static function fetchPermissionBlockFromThreadParent(array $item, bool $is_group_thread): array
{
if (empty($item['thr-parent-id'])) {
return [];
$type = [Tag::TO => 'to', Tag::CC => 'cc', Tag::BTO => 'bto', Tag::BCC => 'bcc'];
foreach (Tag::getByURIId($item['thr-parent-id'], [Tag::TO, Tag::CC, Tag::BTO, Tag::BCC]) as $receiver) {
if (!empty($parent_profile['followers']) && $receiver['url'] == $parent_profile['followers'] && !empty($item_profile['followers'])) {
- if (!$is_forum_thread) {
+ if (!$is_group_thread) {
$permissions[$type[$receiver['type']]][] = $item_profile['followers'];
}
} elseif (!in_array($receiver['url'], $exclude)) {
}
$always_bcc = false;
- $is_forum = false;
+ $is_group = false;
$follower = '';
// Check if we should always deliver our stuff via BCC
$owner = User::getOwnerDataById($item['uid']);
if (!empty($owner)) {
$always_bcc = $owner['hide-friends'];
- $is_forum = ($owner['account-type'] == User::ACCOUNT_TYPE_COMMUNITY) && $owner['manually-approve'];
+ $is_group = ($owner['account-type'] == User::ACCOUNT_TYPE_COMMUNITY) && $owner['manually-approve'];
$profile = APContact::getByURL($owner['url'], false);
$follower = $profile['followers'] ?? '';
$parent = Post::selectFirst(['causer-link', 'post-reason'], ['id' => $item['parent']]);
if (!empty($parent) && ($parent['post-reason'] == Item::PR_ANNOUNCEMENT) && !empty($parent['causer-link'])) {
$profile = APContact::getByURL($parent['causer-link'], false);
- $is_forum_thread = isset($profile['type']) && $profile['type'] == 'Group';
+ $is_group_thread = isset($profile['type']) && $profile['type'] == 'Group';
} else {
- $is_forum_thread = false;
+ $is_group_thread = false;
}
if (self::isAnnounce($item) || self::isAPPost($last_id)) {
$exclusive = false;
$mention = false;
- if ($is_forum_thread) {
+ if ($is_group_thread) {
foreach (Tag::getByURIId($item['parent-uri-id'], [Tag::MENTION, Tag::EXCLUSIVE_MENTION]) as $term) {
$profile = APContact::getByURL($term['url'], false);
if (!empty($profile) && ($profile['type'] == 'Group')) {
$data['cc'][] = $announce['actor']['url'];
}
- $data = array_merge($data, self::fetchPermissionBlockFromThreadParent($item, $is_forum_thread));
+ $data = array_merge($data, self::fetchPermissionBlockFromThreadParent($item, $is_group_thread));
// Check if the item is completely public or unlisted
if ($item['private'] == Item::PUBLIC) {
$exclusive = false;
}
- if ($is_forum && !$exclusive && !empty($follower)) {
+ if ($is_group && !$exclusive && !empty($follower)) {
$data['cc'][] = $follower;
} elseif (!$exclusive) {
foreach ($receiver_list as $receiver) {
$profile = APContact::getByURL($parent['owner-link'], false);
if (!empty($profile)) {
if ($item['gravity'] != Item::GRAVITY_PARENT) {
- // Comments to forums are directed to the forum
- // But comments to forums aren't directed to the followers collection
- // This rule is only valid when the actor isn't the forum.
- // The forum needs to transmit their content to their followers.
+ // Comments to groups are directed to the group
+ // But comments to groups aren't directed to the followers collection
+ // This rule is only valid when the actor isn't the group.
+ // The group needs to transmit their content to their followers.
if (($profile['type'] == 'Group') && ($profile['url'] != ($actor_profile['url'] ?? ''))) {
$data['to'][] = $profile['url'];
} else {
$data['cc'][] = $profile['url'];
- if (($item['private'] != Item::PRIVATE) && !empty($actor_profile['followers']) && (!$exclusive || !$is_forum_thread)) {
+ if (($item['private'] != Item::PRIVATE) && !empty($actor_profile['followers']) && (!$exclusive || !$is_group_thread)) {
$data['cc'][] = $actor_profile['followers'];
}
}
- } elseif (!$exclusive && !$is_forum_thread) {
+ } elseif (!$exclusive && !$is_group_thread) {
// Public thread parent post always are directed to the followers.
if ($item['private'] != Item::PRIVATE) {
$data['cc'][] = $actor_profile['followers'];
{
$inboxes = [];
- $isforum = false;
-
+ $isGroup = false;
if (!empty($item['uid'])) {
$profile = User::getOwnerDataById($item['uid']);
if (!empty($profile)) {
- $isforum = $profile['account-type'] == User::ACCOUNT_TYPE_COMMUNITY;
+ $isGroup = $profile['account-type'] == User::ACCOUNT_TYPE_COMMUNITY;
}
}
continue;
}
- if ($isforum && ($contact['network'] == Protocol::DFRN)) {
+ if ($isGroup && ($contact['network'] == Protocol::DFRN)) {
continue;
}
GServer::setProtocol($importer['gsid'], Post\DeliveryData::DFRN);
}
- // is it a public forum? Private forums aren't exposed with this method
- $forum = intval(XML::getFirstNodeValue($xpath, '/atom:feed/dfrn:community/text()'));
+ // is it a public group? Private groups aren't exposed with this method
+ $group = intval(XML::getFirstNodeValue($xpath, '/atom:feed/dfrn:community/text()'));
// The account type is new since 3.5.1
if ($xpath->query('/atom:feed/dfrn:account_type')->length > 0) {
// Updating the public contact as well
Contact::update(['contact-type' => $accounttype], ['uid' => 0, 'nurl' => $importer['nurl']]);
}
- // A forum contact can either have set "forum" or "prv" - but not both
+ // A group contact can either have set "forum" or "prv" - but not both
if ($accounttype == User::ACCOUNT_TYPE_COMMUNITY) {
- // It's a forum, so either set the public or private forum flag
- $condition = ['(`forum` != ? OR `prv` != ?) AND `id` = ?', $forum, !$forum, $importer['id']];
- Contact::update(['forum' => $forum, 'prv' => !$forum], $condition);
+ // It's a group, so either set the public or private forum flag
+ $condition = ['(`forum` != ? OR `prv` != ?) AND `id` = ?', $group, !$group, $importer['id']];
+ Contact::update(['forum' => $group, 'prv' => !$group], $condition);
// Updating the public contact as well
- $condition = ['(`forum` != ? OR `prv` != ?) AND `uid` = 0 AND `nurl` = ?', $forum, !$forum, $importer['nurl']];
- Contact::update(['forum' => $forum, 'prv' => !$forum], $condition);
+ $condition = ['(`forum` != ? OR `prv` != ?) AND `uid` = 0 AND `nurl` = ?', $group, !$group, $importer['nurl']];
+ Contact::update(['forum' => $group, 'prv' => !$group], $condition);
} else {
- // It's not a forum, so remove the flags
+ // It's not a group, so remove the flags
$condition = ['(`forum` OR `prv`) AND `id` = ?', $importer['id']];
Contact::update(['forum' => false, 'prv' => false], $condition);
$condition = ['(`forum` OR `prv`) AND `uid` = 0 AND `nurl` = ?', $importer['nurl']];
Contact::update(['forum' => false, 'prv' => false], $condition);
}
- } elseif ($forum != $importer['forum']) { // Deprecated since 3.5.1
- $condition = ['`forum` != ? AND `id` = ?', $forum, $importer['id']];
- Contact::update(['forum' => $forum], $condition);
+ } elseif ($group != $importer['forum']) { // Deprecated since 3.5.1
+ $condition = ['`forum` != ? AND `id` = ?', $group, $importer['id']];
+ Contact::update(['forum' => $group], $condition);
// Updating the public contact as well
- $condition = ['`forum` != ? AND `uid` = 0 AND `nurl` = ?', $forum, $importer['nurl']];
- Contact::update(['forum' => $forum], $condition);
+ $condition = ['`forum` != ? AND `uid` = 0 AND `nurl` = ?', $group, $importer['nurl']];
+ Contact::update(['forum' => $group], $condition);
}
*/
private static function deliverDiaspora(string $cmd, array $contact, array $owner, array $items, array $target_item, bool $public_message, bool $top_level, bool $followup): bool
{
- // We don't treat Forum posts as "wall-to-wall" to be able to post them via Diaspora
+ // We don't treat group posts as "wall-to-wall" to be able to post them via Diaspora
$walltowall = $top_level && ($owner['id'] != $items[0]['contact-id']) & ($owner['account-type'] != User::ACCOUNT_TYPE_COMMUNITY);
if ($public_message) {
{
public static function execute()
{
- // expire any expired regular accounts. Don't expire forums.
+ // expire any expired regular accounts. Don't expire groups.
$condition = ["NOT `account_expired` AND `account_expires_on` > ? AND `account_expires_on` < ? AND `page-flags` = ? AND `uid` != ?",
DBA::NULL_DATETIME, DateTimeFormat::utcNow(), User::PAGE_FLAGS_NORMAL, 0];
DBA::update('user', ['account_expired' => true], $condition);
// Do a PuSH
$push_notify = false;
- // Deliver directly to a forum, don't PuSH
- $direct_forum_delivery = false;
+ // Deliver directly to a group, don't PuSH
+ $direct_group_delivery = false;
$only_ap_delivery = false;
$relay_to_owner = false;
}
- // Special treatment for forum posts
- if (Item::isForumPost($target_item['uri-id'])) {
+ // Special treatment for group posts
+ if (Item::isGroupPost($target_item['uri-id'])) {
$relay_to_owner = true;
- $direct_forum_delivery = true;
+ $direct_group_delivery = true;
}
- // Avoid that comments in a forum thread are sent to OStatus
- if (Item::isForumPost($parent['uri-id'])) {
- $direct_forum_delivery = true;
+ // Avoid that comments in a group thread are sent to OStatus
+ if (Item::isGroupPost($parent['uri-id'])) {
+ $direct_group_delivery = true;
}
$exclusive_delivery = false;
}
}
- if ($direct_forum_delivery) {
+ if ($direct_group_delivery) {
$push_notify = false;
}
$uid = $target_item['contact-uid'] ?: $target_item['uid'];
- // Update the locally stored follower list when we deliver to a forum
+ // Update the locally stored follower list when we deliver to a group
foreach (Tag::getByURIId($target_item['uri-id'], [Tag::MENTION, Tag::EXCLUSIVE_MENTION]) as $tag) {
$target_contact = Contact::getByURL(Strings::normaliseLink($tag['url']), null, [], $uid);
if ($target_contact && $target_contact['contact-type'] == Contact::TYPE_COMMUNITY && $target_contact['manually-approve']) {
- Circle::updateMembersForForum($target_contact['id']);
+ Circle::updateMembersForGroup($target_contact['id']);
}
}
'throttle_limit_month' => 0,
// transmit_pending_events (Boolean)
- // Transmit pending events upon accepted contact request for forums
+ // Transmit pending events upon accepted contact request for groups
'transmit_pending_events' => false,
// update_active_contacts (Boolean)
'/network' => [
'[/]' => [Module\Conversation\Network::class, [R::GET]],
'/archive/{from:\d\d\d\d-\d\d-\d\d}[/{to:\d\d\d\d-\d\d-\d\d}]' => [Module\Conversation\Network::class, [R::GET]],
- '/forum/{contact_id:\d+}' => [Module\Conversation\Network::class, [R::GET]],
+ '/group/{contact_id:\d+}' => [Module\Conversation\Network::class, [R::GET]],
'/circle/{circle_id:\d+}' => [Module\Conversation\Network::class, [R::GET]],
],
'/update_network' => [
'[/]' => [Module\Update\Network::class, [R::GET]],
'/archive/{from:\d\d\d\d-\d\d-\d\d}[/{to:\d\d\d\d-\d\d-\d\d}]' => [Module\Update\Network::class, [R::GET]],
- '/forum/{contact_id:\d+}' => [Module\Update\Network::class, [R::GET]],
+ '/group/{contact_id:\d+}' => [Module\Update\Network::class, [R::GET]],
'/circle/{circle_id:\d+}' => [Module\Update\Network::class, [R::GET]],
],
max-height: 80px;
}
-/* forumlist widget */
-.forumlist-img {
+/* group list widget */
+.grouplist-img {
height: 20px;
width: 20px;
vertical-align: middle;
}
-#forum-widget-collapse {
+#group-widget-collapse {
opacity: 0.3;
}
color: #ffffff;
}
-#forum-widget-collapse:hover {
+#group-widget-collapse:hover {
opacity: 1.0;
}
if(lterm.indexOf(t) >= 0) { // A more broad search has been performed already, so use those results
// Filter old results locally
var matching = contact_search.cache[bt][t].filter(function (x) { return (x.name.toLowerCase().indexOf(lterm) >= 0 || (typeof x.nick !== 'undefined' && x.nick.toLowerCase().indexOf(lterm) >= 0)); }); // Need to check that nick exists because circles don't have one
- matching.unshift({forum:false, text: term, replace: term});
+ matching.unshift({group: false, text: term, replace: term});
setTimeout(function() { callback(matching); } , 1); // Use "pseudo-thread" to avoid some problems
return;
}
// Show contact information if not explicitly told to show something else
if(typeof item.text === 'undefined') {
var desc = ((item.label) ? item.nick + ' ' + item.label : item.nick);
- var forum = ((item.forum) ? 'forum' : '');
+ var group = ((item.group) ? 'group' : '');
if(typeof desc === 'undefined') desc = '';
if(desc) desc = ' ('+desc+')';
- return "<div class='{0}' title='{4}'><img class='acpopup-img' src='{1}'><span class='acpopup-contactname'>{2}</span><span class='acpopup-sub-text'>{3}</span><div class='clear'></div></div>".format(forum, item.photo, item.name, desc, item.link);
+ return "<div class='{0}' title='{4}'><img class='acpopup-img' src='{1}'><span class='acpopup-contactname'>{2}</span><span class='acpopup-sub-text'>{3}</span><div class='clear'></div></div>".format(group, item.photo, item.name, desc, item.link);
}
else
return "<div>" + item.text + "</div>";
template: contact_format,
};
- // Autocomplete forums
- forums = {
+ // Autocomplete groups
+ groups = {
match: /(^|\s)(!\!*)([^ \n]+)$/,
index: 3,
search: function(term, callback) { contact_search(term, callback, backend_url, 'f'); },
};
this.attr('autocomplete','off');
- this.textcomplete([contacts, forums, smilies, tags], {dropdown: {className:'acpopup'}});
+ this.textcomplete([contacts, groups, smilies, tags], {dropdown: {className:'acpopup'}});
this.fixTextcompleteEscape();
return this;
template: contact_format,
};
- // Autocomplete forum accounts
+ // Autocomplete group accounts
community = {
match: /(^!)([^\n]{2,})$/,
index: 2,
$(".circle-"+gid+" .notify").addClass("show").text(gcount);
});
- $(".forum-widget-entry .notify").removeClass("show");
- $(data.forums).each(function(key, forum) {
- var fid = forum.id;
- var fcount = forum.count;
- $(".forum-"+fid+" .notify").addClass("show").text(fcount);
+ $(".group-widget-entry .notify").removeClass("show");
+ $(data.groups).each(function(key, group) {
+ var fid = group.id;
+ var fcount = group.count;
+ $(".group-"+fid+" .notify").addClass("show").text(fcount);
});
if (data.notifications.length == 0) {
--- /dev/null
+<script>
+function showHideGroupList() {
+ if( $("li[id^='group-widget-entry-extended-']").is(':visible')) {
+ $("li[id^='group-widget-entry-extended-']").hide();
+ $("li#group-widget-collapse").html('{{$showmore}}');
+
+ }
+ else {
+ $("li[id^='group-widget-entry-extended-']").show();
+ $("li#group-widget-collapse").html('{{$showless}}');
+ }
+}
+</script>
+<span id="group-list-sidebar-frame">
+<span id="group-list-sidebar-inflated" class="widget fakelink" onclick="openCloseWidget('group-list-sidebar', 'group-list-sidebar-inflated');">
+ <h3>{{$title}}</h3>
+</span>
+<div id="group-list-sidebar" class="widget">
+ <span class="fakelink" onclick="openCloseWidget('group-list-sidebar', 'group-list-sidebar-inflated');">
+ <h3 id="group-list">{{$title}}</h3>
+ </span>
+ <ul id="group-list-sidebar-ul" role="menu">
+ {{foreach $groups as $group}}
+ {{if $group.id <= $visible_groups}}
+ <li class="group-widget-entry group-{{$group.cid}}" id="group-widget-entry-{{$group.id}}" role="menuitem">
+ <span class="notify badge pull-right"></span>
+ <a href="{{$group.external_url}}" title="{{$group.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
+ <img class="group-list-img" src="{{$group.micro}}" alt="{{$group.link_desc}}" />
+ </a>
+ <a class="group-widget-link {{if $group.selected}}group-selected{{/if}}" id="group-widget-link-{{$group.id}}" href="{{$group.url}}">{{$group.name}}</a>
+ </li>
+ {{/if}}
+
+ {{if $group.id > $visible_groups}}
+ <li class="group-widget-entry group-{{$group.cid}}" id="group-widget-entry-extended-{{$group.id}}" role="menuitem" style="display: none;">
+ <span class="notify badge pull-right"></span>
+ <a href="{{$group.external_url}}" title="{{$group.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
+ <img class="group-list-img" src="{{$group.micro}}" alt="{{$group.link_desc}}" />
+ </a>
+ <a class="group-widget-link {{if $group.selected}}group-selected{{/if}}" id="group-widget-link-{{$group.id}}" href="{{$group.url}}">{{$group.name}}</a>
+ </li>
+ {{/if}}
+ {{/foreach}}
+
+ {{if $total > $visible_groups }}
+ <li onclick="showHideGroupList(); return false;" id="group-widget-collapse" class="group-widget-link fakelink tool">{{$showmore}}</li>
+ {{/if}}
+ </ul>
+</div>
+</span>
+<script>
+initWidget('group-list-sidebar', 'group-list-sidebar-inflated');
+</script>
+++ /dev/null
-<script>
-function showHideForumlist() {
- if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
- $("li[id^='forum-widget-entry-extended-']").hide();
- $("li#forum-widget-collapse").html('{{$showmore}}');
-
- }
- else {
- $("li[id^='forum-widget-entry-extended-']").show();
- $("li#forum-widget-collapse").html('{{$showless}}');
- }
-}
-</script>
-<span id="forumlist-sidebar-frame">
-<span id="forumlist-sidebar-inflated" class="widget fakelink" onclick="openCloseWidget('forumlist-sidebar', 'forumlist-sidebar-inflated');">
- <h3>{{$title}}</h3>
-</span>
-<div id="forumlist-sidebar" class="widget">
- <span class="fakelink" onclick="openCloseWidget('forumlist-sidebar', 'forumlist-sidebar-inflated');">
- <h3 id="forumlist">{{$title}}</h3>
- </span>
- <ul id="forumlist-sidebar-ul" role="menu">
- {{foreach $forums as $forum}}
- {{if $forum.id <= $visible_forums}}
- <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
- <span class="notify badge pull-right"></span>
- <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
- <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
- </a>
- <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
- </li>
- {{/if}}
-
- {{if $forum.id > $visible_forums}}
- <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
- <span class="notify badge pull-right"></span>
- <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
- <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
- </a>
- <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
- </li>
- {{/if}}
- {{/foreach}}
-
- {{if $total > $visible_forums }}
- <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link fakelink tool">{{$showmore}}</li>
- {{/if}}
- </ul>
-</div>
-</span>
-<script>
-initWidget('forumlist-sidebar', 'forumlist-sidebar-inflated');
-</script>
box-shadow: 4px 4px 3px 0 #444444;
}
-.forumlist-img {
+.group-list-img {
border-radius: 3px;
-moz-border-radius: 3px;
box-shadow: 4px 4px 3px 0 #444444;
margin-bottom: 10px;
}
-.widget .selected, .circle-selected, .forum-selected {
+.widget .selected, .circle-selected, .group-selected {
padding: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
#sidebar-circle-list ul {
list-style-type: none;
}
-.sidebar-circle-li .notify, .forum-widget-entry .notify {
+.sidebar-circle-li .notify, .group-widget-entry .notify {
display: none;
font-size: 9px;
border: 1px solid rgb(221, 221, 221);
float: right;
background-color: #BABDB6;
}
-.sidebar-circle-li .notify.show, .forum-widget-entry .notify.show {
+.sidebar-circle-li .notify.show, .group-widget-entry .notify.show {
display: block;
}
margin-top: 10px;
}
-#forumlist-sidebar ul {
+#group-list-sidebar ul {
list-style: none;
}
What frameworks do we want to use? How should default friendica look like? And how do we want to use friendica? What do we need in the core code (At the present time some stuff this is done with ugly javascript hacks and own php code)?
Coding a theme is much work but you will get a really good insight of the limitations of friendica and can start a discussion about doing things differently.
-So join the discussion at the friendica forums ;-)
+So join the discussion at the friendica groups ;-)
If anyone wants to contribute to this theme he/she is welcome to do this.
aside .badge {
opacity: 0.7;
}
-.forum-widget-entry .badge,
+.group-widget-entry .badge,
.sidebar-circle-li .badge {
margin-top: 6px;
}
color: $font_color_darker;
}
-/* forumlist widget */
+/* group-list widget */
aside > #datebrowse-sidebar li.posted-date-selector-months {
margin-bottom: 10px;
padding: 0;
padding-left: 27px;
}
-.forumlist-img {
+.group-list-img {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
opacity: 0.5;
-ms-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
-#forumlist-sidebar-ul li:hover a > .forumlist-img {
+#group-list-sidebar-ul li:hover a > .group-list-img {
-webkit-filter: unset;
filter: unset;
opacity: unset;
border-left: 3px solid $link_color;
padding-left: 17px !important;
}
-.textcomplete-item a .forum {
+.textcomplete-item a .group {
color: $link_color;
}
img.acpopup-img {
margin-top: 20px;
margin-bottom: 20px;
}
-.contact-block-div.forumlist-profile-advanced {
+.contact-block-div.group-list-profile-advanced {
float: left;
}
$("#sidebar-circle-ul li a.circle-selected").parent("li").addClass("selected");
}
- // add the class "selected" to forums widgets li if li > a does have the class forum-selected
- if ($("#forumlist-sidebar-ul li a").hasClass("forum-selected")) {
- $("#forumlist-sidebar-ul li a.forum-selected").parent("li").addClass("selected");
+ // add the class "selected" to groups widgets li if li > a does have the class group-selected
+ if ($("#group-list-sidebar-ul li a").hasClass("group-selected")) {
+ $("#group-list-sidebar-ul li a.group-selected").parent("li").addClass("selected");
}
// add the class "active" to tabmenuli if li > a does have the class active
});
}
- // move the forum contact information of the network page into the second navbar
+ // move the group contact information of the network page into the second navbar
if ($(".network-content-wrapper > #viewcontact_wrapper-network").length) {
// get the contact-wrapper element and append it to the second nav bar
// Note: We need the first() element with this class since at the present time we
<div class="contact-entry-name" id="contact-entry-name-{{$contact.id}}">
<h4 class="media-heading"><a href="{{if !empty($contact.photo_menu.edit)}}{{$contact.photo_menu.edit.1}}{{else}}{{$contact.url}}{{/if}}">{{$contact.name}}</a>
{{if $contact.account_type}} <small class="contact-entry-details" id="contact-entry-accounttype-{{$contact.id}}">({{$contact.account_type}})</small>{{/if}}
- {{if $contact.account_type == 'Forum'}}<i class="fa fa-comments-o" aria-hidden="true"></i>{{/if}}
+ {{if $contact.account_type == 'Group'}}<i class="fa fa-comments-o" aria-hidden="true"></i>{{/if}}
{{* @todo this needs some changing in core because $contact.account_type contains a translated string which may not be the same in every language *}}
</h4>
</div>
$("#profile-jot-text").focus(enableOnUser);
$("#profile-jot-text").click(enableOnUser);
- // When clicking on a forum in acl we should remove the profile jot textarea
- // default value before inserting the forum mention
- $("body").on('click', '#jot-modal .acl-list-item.forum', function(){
+ // When clicking on a group in acl we should remove the profile jot textarea
+ // default value before inserting the group mention
+ $("body").on('click', '#jot-modal .acl-list-item.group', function(){
jotTextOpenUI(document.getElementById("profile-jot-text"));
});
</a>
</div>
- {{* The little overlay avatar picture if someone is posting directly to a wall or a forum *}}
+ {{* The little overlay avatar picture if someone is posting directly to a wall or a group *}}
{{if $item.owner_url}}
<div aria-hidden="true" class="contact-photo-wrapper mframe wwto" id="wall-item-ownerphoto-wrapper-{{$item.id}}">
<a href="{{$item.owner_url}}" target="redir" title="{{$item.olinktitle}}" class="contact-photo-link" id="wall-item-ownerphoto-link-{{$item.id}}">
$(".circle-"+gid+" .notify").addClass("on").text(gcount);
});
- $(".forum-widget-entry .notify").removeClass("on");
- $(data).find("forum").each(function() {
+ $(".group-widget-entry .notify").removeClass("on");
+ $(data).find("group").each(function() {
var fid = this.id;
var fcount = this.innerHTML;
- $(".forum-"+fid+" .notify").addClass("on").text(fcount);
+ $(".group-"+fid+" .notify").addClass("on").text(fcount);
});
console.log(intro,mail);
--- /dev/null
+<script>
+
+function showHideGroupList() {
+ if( $("li[id^='group-widget-entry-extended-']").is(':visible')) {
+ $("li[id^='group-widget-entry-extended-']").hide();
+ $("li#group-widget-collapse").html('{{$showmore}}');
+
+ }
+ else {
+ $("li[id^='group-widget-entry-extended-']").show();
+ $("li#group-widget-collapse").html('{{$showless}}');
+ }
+}
+</script>
+
+<div id="group-list-sidebar" class="widget">
+ <h3 id="group-list">{{$title}}</h3>
+
+ <ul id="group-list-sidebar-ul" role="menu">
+ {{foreach $groups as $group}}
+ {{if $group.id <= $visible_groups}}
+ <li class="group-widget-entry group-{{$group.cid}} tool {{if $group.selected}}selected{{/if}}" id="group-widget-entry-{{$group.id}}" role="menuitem">
+ <span class="notify badge pull-right"></span>
+ <a href="{{$group.external_url}}" title="{{$group.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
+ <img class="group-list-img" src="{{$group.micro}}" alt="{{$group.link_desc}}" />
+ </a>
+ <a class="group-widget-link" id="group-widget-link-{{$group.id}}" href="{{$group.url}}">{{$group.name}}</a>
+ </li>
+ {{/if}}
+
+ {{if $group.id > $visible_groups}}
+ <li class="group-widget-entry group-{{$group.cid}} tool {{if $group.selected}}selected{{/if}}" id="group-widget-entry-extended-{{$group.id}}" role="menuitem" style="display: none;">
+ <span class="notify badge pull-right"></span>
+ <a href="{{$group.external_url}}" title="{{$group.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
+ <img class="group-list-img" src="{{$group.micro}}" alt="{{$group.link_desc}}" />
+ </a>
+ <a class="group-widget-link" id="group-widget-link-{{$group.id}}" href="{{$group.url}}">{{$group.name}}</a>
+ </li>
+ {{/if}}
+ {{/foreach}}
+
+ {{if $total > $visible_groups }}
+ <li onclick="showHideGroupList(); return false;" id="group-widget-collapse" class="group-widget-link fakelink tool">{{$showmore}}</li>
+ {{/if}}
+ </ul>
+</div>
+++ /dev/null
-<script>
-
-function showHideForumlist() {
- if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
- $("li[id^='forum-widget-entry-extended-']").hide();
- $("li#forum-widget-collapse").html('{{$showmore}}');
-
- }
- else {
- $("li[id^='forum-widget-entry-extended-']").show();
- $("li#forum-widget-collapse").html('{{$showless}}');
- }
-}
-</script>
-
-<div id="forumlist-sidebar" class="widget">
- <h3 id="forumlist">{{$title}}</h3>
-
- <ul id="forumlist-sidebar-ul" role="menu">
- {{foreach $forums as $forum}}
- {{if $forum.id <= $visible_forums}}
- <li class="forum-widget-entry forum-{{$forum.cid}} tool {{if $forum.selected}}selected{{/if}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
- <span class="notify badge pull-right"></span>
- <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
- <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
- </a>
- <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
- </li>
- {{/if}}
-
- {{if $forum.id > $visible_forums}}
- <li class="forum-widget-entry forum-{{$forum.cid}} tool {{if $forum.selected}}selected{{/if}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
- <span class="notify badge pull-right"></span>
- <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
- <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
- </a>
- <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
- </li>
- {{/if}}
- {{/foreach}}
-
- {{if $total > $visible_forums }}
- <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link fakelink tool">{{$showmore}}</li>
- {{/if}}
- </ul>
-</div>
$t = Renderer::getMarkupTemplate("theme_admin_settings.tpl");
$o = Renderer::replaceMacros($t, [
- '$helperlist' => ['vier_helperlist', DI::l10n()->t('Comma separated list of helper forums'), $helperlist, '', ''],
+ '$helperlist' => ['vier_helperlist', DI::l10n()->t('Comma separated list of helper groups'), $helperlist, '', ''],
]);
$show_pages = get_vier_config('show_pages', true, true);
.tool a {
/* color: #000; */
}
-.tool a:hover, .widget a:hover, #nets-sidebar a:hover, #forum-widget-collapse:hover, .admin.link a:hover, aside h4 a:hover, right_aside h4 a:hover {
+.tool a:hover, .widget a:hover, #nets-sidebar a:hover, #group-widget-collapse:hover, .admin.link a:hover, aside h4 a:hover, right_aside h4 a:hover {
/* text-decoration: underline; */
text-decoration: none;
color: black;
opacity: 1;
}
-.sidebar-circle-li:hover, #sidebar-new-circle:hover, #sidebar-edit-circles:hover,#forum-widget-collapse:hover,
-#sidebar-uncircled:hover, .side-link:hover, .nets-ul li:hover, #forumlist-sidebar li:hover, #forumlist-sidebar-right li:hover,
+.sidebar-circle-li:hover, #sidebar-new-circle:hover, #sidebar-edit-circles:hover,#group-widget-collapse:hover,
+#sidebar-uncircled:hover, .side-link:hover, .nets-ul li:hover, #group-list-sidebar li:hover, #group-list-sidebar-right li:hover,
.nets-all:hover, .saved-search-li:hover, li.tool:hover, .admin.link:hover, aside h4 a:hover, right_aside h4 a:hover, #message-new:hover,
#sidebar-photos-albums li:hover, .photos-upload-link:hover, .textcomplete-item.active {
/* background-color: #ddd; */
/* color: #000; */
}
-.widget .selected, .forum-selected {
+.widget .selected, .group-selected {
font-weight: bold;
}
-#forum-widget-showmore, #sidebar-new-circle, #sidebar-edit-circles, #forum-widget-collapse, #forumlist-rsidebar-right, #sidebar-uncircled,
+#group-widget-showmore, #sidebar-new-circle, #sidebar-edit-circles, #group-widget-collapse, #group-list-rsidebar-right, #sidebar-uncircled,
.side-link, #peoplefind-desc, #connect-desc, .nets-all, .admin.link, #message-new {
padding-left: 10px;
padding-top: 3px;
display: block;
}
-#forumlist-sidebar {
+#group-list-sidebar {
padding-top: 3px;
padding-bottom: 3px;
display: block;
}
-.forum-widget-entry {
+.group-widget-entry {
padding-left: 10px;
padding-right: 5px;
}
-#forumlist-sidebar .notify, #forumlist-sidebar-right .notify {
+#group-list-sidebar .notify, #group-list-sidebar-right .notify {
display: none;
}
-#forumlist-sidebar .notify.show, #forumlist-sidebar-right .notify.show {
+#group-list-sidebar .notify.show, #group-list-sidebar-right .notify.show {
display: inline-block;
}
color: black;
}
-#forumlist-sidebar a, #forumlist-sidebar-right a, .tool a, .admin.link a, #sidebar-photos-albums a {
+#group-list-sidebar a, #group-list-sidebar-right a, .tool a, .admin.link a, #sidebar-photos-albums a {
color: #737373;
}
-#forumlist-sidebar, #forumlist-sidebar-right {
+#group-list-sidebar, #group-list-sidebar-right {
margin-top: 2px;
}
color: #000;
padding: 3px 20px;
}
-.textcomplete-item a .forum, .forum .acpopup-sub-text {
+.textcomplete-item a .group, .group .acpopup-sub-text {
color: #36C;
opacity: 0.8;
}
-.textcomplete-item a .forum:hover {
+.textcomplete-item a .group:hover {
opacity: 1.0;
}
img.acpopup-img {
<option value="fulltext">{{$nav.searchoption.0}}</option>
<option value="tags">{{$nav.searchoption.1}}</option>
<option value="contacts">{{$nav.searchoption.2}}</option>
- {{if $nav.searchoption.3}}<option value="forums">{{$nav.searchoption.3}}</option>{{/if}}
+ {{if $nav.searchoption.3}}<option value="groups">{{$nav.searchoption.3}}</option>{{/if}}
</select>
</form>
</li>
+++ /dev/null
-<script>
-
-function showHideForumlist() {
- if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
- $("li[id^='forum-widget-entry-extended-']").hide();
- $("li#forum-widget-collapse").html('{{$showmore}}');
-
- }
- else {
- $("li[id^='forum-widget-entry-extended-']").show();
- $("li#forum-widget-collapse").html('{{$showless}}');
- }
-}
-
-</script>
-
-<div id="forumlist-sidebar-right" class="widget">
- <h3 id="forumlist">{{$title}}</h3>
-
- <ul id="forumlist-sidebar-ul" role="menu">
- {{foreach $forums as $forum}}
- {{if $forum.id <= $visible_forums}}
- <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
- <span class="notify badge pull-right"></span>
- <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
- <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
- </a>
- <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
- </li>
- {{/if}}
-
- {{if $forum.id > $visible_forums}}
- <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
- <span class="notify badge pull-right"></span>
- <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
- <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
- </a>
- <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
- </li>
- {{/if}}
- {{/foreach}}
-
- {{if $total > $visible_forums }}
- <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link fakelink tool">{{$showmore}}</li>
- {{/if}}
- </ul>
-</div>
*/
use Friendica\App;
-use Friendica\Content\ForumManager;
+use Friendica\Content\GroupManager;
use Friendica\Core\Addon;
use Friendica\Core\Renderer;
use Friendica\Core\Search;
//Community_Pages at right_aside
if ($show_pages && DI::userSession()->getLocalUserId()) {
- $aside['$page'] = ForumManager::widget('network/forum', DI::userSession()->getLocalUserId());;
+ $aside['$page'] = GroupManager::widget('network/group', DI::userSession()->getLocalUserId());;
}
// END Community Page
display: block;
}
-aside #forumlist-sidebar-frame,
-aside #forumlist-sidebar,
-#forumlist-sidebar-inflated {
+aside #group-list-sidebar-frame,
+aside #group-list-sidebar,
+#group-list-sidebar-inflated {
display: none;
}