X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FContact.php;h=d58fde062378c812960ba2be613ff72b34711dc0;hb=3bca4fe2a64671d09e08346456cdfa6c12f996e9;hp=d848c749e422f14ea254eac97a7b89cc47c07876;hpb=4faf08c0643d3e6bbe2a0a77be2ff8c1dbea4d5c;p=friendica.git diff --git a/src/Module/Contact.php b/src/Module/Contact.php index d848c749e4..d58fde0623 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -1,6 +1,6 @@ 0) { DI::sysmsg()->addInfo(DI::l10n()->tt('%d contact edited.', '%d contacts edited.', $count_actions)); @@ -135,7 +139,7 @@ class Contact extends BaseModule try { UpdateContact::add(Worker::PRIORITY_HIGH, $contact_id); } catch (\InvalidArgumentException $e) { - Logger::notice($e->getMessage(), ['contact' => $contact, 'callstack' => System::callstack()]); + Logger::notice($e->getMessage(), ['contact' => $contact]); } } } @@ -165,6 +169,18 @@ class Contact extends BaseModule Model\Contact\User::setIgnored($contact_id, DI::userSession()->getLocalUserId(), $ignored); } + /** + * Toggles the collapsed status of a contact identified by id. + * + * @param int $contact_id Id of the contact with uid = 0 + * @throws \Exception + */ + private static function toggleCollapseContact(int $contact_id) + { + $collapsed = !Model\Contact\User::isCollapsed($contact_id, DI::userSession()->getLocalUserId()); + Model\Contact\User::setCollapsed($contact_id, DI::userSession()->getLocalUserId(), $collapsed); + } + protected function content(array $request = []): string { if (!DI::userSession()->getLocalUserId()) { @@ -174,7 +190,7 @@ class Contact extends BaseModule $search = trim($_GET['search'] ?? ''); $nets = trim($_GET['nets'] ?? ''); $rel = trim($_GET['rel'] ?? ''); - $group = trim($_GET['group'] ?? ''); + $circle = trim($_GET['circle'] ?? ''); $accounttype = $_GET['accounttype'] ?? ''; $accounttypeid = User::getAccountTypeByString($accounttype); @@ -194,17 +210,15 @@ class Contact extends BaseModule $follow_widget = Widget::follow(); } - $account_widget = Widget::accountTypes($_SERVER['REQUEST_URI'], $accounttype); + $account_widget = Widget::accountTypes($_SERVER['REQUEST_URI'], $accounttype); $networks_widget = Widget::networks($_SERVER['REQUEST_URI'], $nets); - $rel_widget = Widget::contactRels($_SERVER['REQUEST_URI'], $rel); - $groups_widget = Widget::groups($_SERVER['REQUEST_URI'], $group); + $rel_widget = Widget::contactRels($_SERVER['REQUEST_URI'], $rel); + $circles_widget = Widget::circles($_SERVER['REQUEST_URI'], $circle); - DI::page()['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $rel_widget . $groups_widget . $networks_widget . $account_widget; + DI::page()['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $rel_widget . $circles_widget . $networks_widget . $account_widget; $tpl = Renderer::getMarkupTemplate('contacts-head.tpl'); - DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ - '$baseurl' => DI::baseUrl()->get(true), - ]); + DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, []); $o = ''; Nav::setSelected('contact'); @@ -230,6 +244,11 @@ class Contact extends BaseModule // This makes the query look for contact.uid = 0 array_unshift($sql_values, 0); break; + case 'collapsed': + $sql_extra = " AND `id` IN (SELECT `cid` FROM `user-contact` WHERE `user-contact`.`uid` = ? AND `user-contact`.`collapsed`)"; + // This makes the query look for contact.uid = 0 + array_unshift($sql_values, 0); + break; case 'archived': $sql_extra = " AND `archive` AND NOT `blocked` AND NOT `pending`"; break; @@ -283,11 +302,19 @@ class Contact extends BaseModule $sql_extra .= " AND `rel` = ?"; $sql_values[] = Model\Contact::FRIEND; break; + case 'nothing': + $sql_extra .= " AND `rel` = ?"; + $sql_values[] = Model\Contact::NOTHING; + break; + default: + $sql_extra .= " AND `rel` != ?"; + $sql_values[] = Model\Contact::NOTHING; + break; } - if ($group) { + if ($circle) { $sql_extra .= " AND `id` IN (SELECT `contact-id` FROM `group_member` WHERE `gid` = ?)"; - $sql_values[] = $group; + $sql_values[] = $circle; } $networks = Widget::unavailableNetworks(); @@ -345,6 +372,14 @@ class Contact extends BaseModule 'id' => 'showignored-tab', 'accesskey' => 'i', ], + [ + 'label' => DI::l10n()->t('Collapsed'), + 'url' => 'contact/collapsed', + 'sel' => $type == 'collapsed' ? 'active' : '', + 'title' => DI::l10n()->t('Only show collapsed contacts'), + 'id' => 'showcollapsed-tab', + 'accesskey' => 'c', + ], [ 'label' => DI::l10n()->t('Archived'), 'url' => 'contact/archived', @@ -362,11 +397,11 @@ class Contact extends BaseModule 'accesskey' => 'h', ], [ - 'label' => DI::l10n()->t('Groups'), - 'url' => 'group', + 'label' => DI::l10n()->t('Circles'), + 'url' => 'circle', 'sel' => '', - 'title' => DI::l10n()->t('Organize your contact groups'), - 'id' => 'contactgroups-tab', + 'title' => DI::l10n()->t('Organize your contact circles'), + 'id' => 'contactcircles-tab', 'accesskey' => 'e', ], ]; @@ -375,18 +410,41 @@ class Contact extends BaseModule $tabs_html = Renderer::replaceMacros($tabs_tpl, ['$tabs' => $tabs]); switch ($rel) { - case 'followers': $header = DI::l10n()->t('Followers'); break; - case 'following': $header = DI::l10n()->t('Following'); break; - case 'mutuals': $header = DI::l10n()->t('Mutual friends'); break; - default: $header = DI::l10n()->t('Contacts'); + case 'followers': + $header = DI::l10n()->t('Followers'); + break; + case 'following': + $header = DI::l10n()->t('Following'); + break; + case 'mutuals': + $header = DI::l10n()->t('Mutual friends'); + break; + case 'nothing': + $header = DI::l10n()->t('No relationship'); + break; + default: + $header = DI::l10n()->t('Contacts'); } switch ($type) { - case 'pending': $header .= ' - ' . DI::l10n()->t('Pending'); break; - case 'blocked': $header .= ' - ' . DI::l10n()->t('Blocked'); break; - case 'hidden': $header .= ' - ' . DI::l10n()->t('Hidden'); break; - case 'ignored': $header .= ' - ' . DI::l10n()->t('Ignored'); break; - case 'archived': $header .= ' - ' . DI::l10n()->t('Archived'); break; + case 'pending': + $header .= ' - ' . DI::l10n()->t('Pending'); + break; + case 'blocked': + $header .= ' - ' . DI::l10n()->t('Blocked'); + break; + case 'hidden': + $header .= ' - ' . DI::l10n()->t('Hidden'); + break; + case 'ignored': + $header .= ' - ' . DI::l10n()->t('Ignored'); + break; + case 'collapsed': + $header .= ' - ' . DI::l10n()->t('Collapsed'); + break; + case 'archived': + $header .= ' - ' . DI::l10n()->t('Archived'); + break; } $header .= $nets ? ' - ' . ContactSelector::networkToName($nets) : ''; @@ -405,9 +463,10 @@ class Contact extends BaseModule '$form_security_token' => BaseModule::getFormSecurityToken('contact_batch_actions'), 'multiselect' => 1, '$batch_actions' => [ - 'contacts_batch_update' => DI::l10n()->t('Update'), - 'contacts_batch_block' => DI::l10n()->t('Block') . '/' . DI::l10n()->t('Unblock'), - 'contacts_batch_ignore' => DI::l10n()->t('Ignore') . '/' . DI::l10n()->t('Unignore'), + 'contacts_batch_update' => DI::l10n()->t('Update'), + 'contacts_batch_block' => DI::l10n()->t('Block') . '/' . DI::l10n()->t('Unblock'), + 'contacts_batch_ignore' => DI::l10n()->t('Ignore') . '/' . DI::l10n()->t('Unignore'), + 'contacts_batch_collapse' => DI::l10n()->t('Collapse') . '/' . DI::l10n()->t('Uncollapse'), ], '$h_batch_actions' => DI::l10n()->t('Batch Actions'), '$paginate' => $pager->renderFull($total), @@ -419,7 +478,7 @@ class Contact extends BaseModule /** * List of pages for the Contact TabBar * - * Available Pages are 'Status', 'Profile', 'Contacts' and 'Common Friends' + * Available Pages are 'Conversations', 'Profile', 'Contacts' and 'Common Friends' * * @param array $contact The contact array * @param int $active_tab 1 if tab should be marked as active @@ -441,7 +500,15 @@ class Contact extends BaseModule // tabs $tabs = [ [ - 'label' => DI::l10n()->t('Status'), + 'label' => DI::l10n()->t('Profile'), + 'url' => 'contact/' . $cid, + 'sel' => (($active_tab == self::TAB_PROFILE) ? 'active' : ''), + 'title' => DI::l10n()->t('Profile Details'), + 'id' => 'profile-tab', + 'accesskey' => 'o', + ], + [ + 'label' => DI::l10n()->t('Conversations'), 'url' => 'contact/' . $pcid . '/conversations', 'sel' => (($active_tab == self::TAB_CONVERSATIONS) ? 'active' : ''), 'title' => DI::l10n()->t('Conversations started by this contact'), @@ -452,7 +519,7 @@ class Contact extends BaseModule 'label' => DI::l10n()->t('Posts and Comments'), 'url' => 'contact/' . $pcid . '/posts', 'sel' => (($active_tab == self::TAB_POSTS) ? 'active' : ''), - 'title' => DI::l10n()->t('Status Messages and Posts'), + 'title' => DI::l10n()->t('Individual Posts and Replies'), 'id' => 'posts-tab', 'accesskey' => 'p', ], @@ -465,14 +532,7 @@ class Contact extends BaseModule 'accesskey' => 'd', ], [ - 'label' => DI::l10n()->t('Profile'), - 'url' => 'contact/' . $cid, - 'sel' => (($active_tab == self::TAB_PROFILE) ? 'active' : ''), - 'title' => DI::l10n()->t('Profile Details'), - 'id' => 'profile-tab', - 'accesskey' => 'o', - ], - ['label' => DI::l10n()->t('Contacts'), + 'label' => DI::l10n()->t('Contacts'), 'url' => 'contact/' . $pcid . '/contacts', 'sel' => (($active_tab == self::TAB_CONTACTS) ? 'active' : ''), 'title' => DI::l10n()->t('View all known contacts'), @@ -482,7 +542,8 @@ class Contact extends BaseModule ]; if (!empty($contact['network']) && in_array($contact['network'], [Protocol::FEED, Protocol::MAIL]) && ($cid != $pcid)) { - $tabs[] = ['label' => DI::l10n()->t('Advanced'), + $tabs[] = [ + 'label' => DI::l10n()->t('Advanced'), 'url' => 'contact/' . $cid . '/advanced/', 'sel' => (($active_tab == self::TAB_ADVANCED) ? 'active' : ''), 'title' => DI::l10n()->t('Advanced Contact Settings'),