diff --git a/doc/Addons.md b/doc/Addons.md index 47d16085a..0382cee49 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -533,7 +533,7 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep- Hook::callAll("parse_link", $arr); -### mod/manage.php +### src/Module/Delegation.php Hook::callAll('home_init', $ret); diff --git a/doc/de/Addons.md b/doc/de/Addons.md index 35ce0e28b..3cbbb4b0b 100644 --- a/doc/de/Addons.md +++ b/doc/de/Addons.md @@ -256,7 +256,7 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap Hook::callAll("parse_link", $arr); -### mod/manage.php +### src/Module/Delegation.php Hook::callAll('home_init', $ret); diff --git a/mod/manage.php b/mod/manage.php deleted file mode 100644 index a1ca87e96..000000000 --- a/mod/manage.php +++ /dev/null @@ -1,137 +0,0 @@ -user; - - if(!empty($_SESSION['submanage'])) { - $user = DBA::selectFirst('user', [], ['uid' => $_SESSION['submanage']]); - if (DBA::isResult($user)) { - $uid = intval($user['uid']); - $orig_record = $user; - } - } - - $identity = (!empty($_POST['identity']) ? intval($_POST['identity']) : 0); - if (!$identity) { - return; - } - - $limited_id = 0; - $original_id = $uid; - - $manage = DBA::select('manage', ['mid'], ['uid' => $uid]); - while ($m = DBA::fetch($manage)) { - if ($identity == $m['mid']) { - $limited_id = $m['mid']; - break; - } - } - DBA::close($manage); - - if ($limited_id) { - $user = DBA::selectFirst('user', [], ['uid' => $limited_id]); - } else { - // Check if the target user is one of our children - $user = DBA::selectFirst('user', [], ['uid' => $identity, 'parent-uid' => $orig_record['uid']]); - - // Check if the target user is one of our siblings - if (!DBA::isResult($user) && ($orig_record['parent-uid'] != 0)) { - $user = DBA::selectFirst('user', [], ['uid' => $identity, 'parent-uid' => $orig_record['parent-uid']]); - } - - // Check if it's our parent - if (!DBA::isResult($user) && ($orig_record['parent-uid'] != 0) && ($orig_record['parent-uid'] == $identity)) { - $user = DBA::selectFirst('user', [], ['uid' => $identity]); - } - - // Finally check if it's out own user - if (!DBA::isResult($user) && ($orig_record['uid'] != 0) && ($orig_record['uid'] == $identity)) { - $user = DBA::selectFirst('user', [], ['uid' => $identity]); - } - - } - - if (!DBA::isResult($user)) { - return; - } - - Session::clear(); - - Session::setAuthenticatedForUser($a, $user, true, true); - - if ($limited_id) { - $_SESSION['submanage'] = $original_id; - } - - $ret = []; - Hook::callAll('home_init', $ret); - - $a->internalRedirect('profile/' . $a->user['nickname']); - // NOTREACHED -} - -function manage_content(App $a) { - - if (!local_user()) { - notice(L10n::t('Permission denied.') . EOL); - return; - } - - if (!empty($_GET['identity'])) { - $_POST['identity'] = $_GET['identity']; - manage_post($a); - return; - } - - $identities = $a->identities; - - //getting additinal information for each identity - foreach ($identities as $key => $id) { - $thumb = DBA::selectFirst('contact', ['thumb'], ['uid' => $id['uid'] , 'self' => true]); - if (!DBA::isResult($thumb)) { - continue; - } - - $identities[$key]['thumb'] = $thumb['thumb']; - - $identities[$key]['selected'] = ($id['nickname'] === $a->user['nickname']); - - $condition = ["`uid` = ? AND `msg` != '' AND NOT (`type` IN (?, ?)) AND NOT `seen`", $id['uid'], NOTIFY_INTRO, NOTIFY_MAIL]; - $params = ['distinct' => true, 'expression' => 'parent']; - $notifications = DBA::count('notify', $condition, $params); - - $params = ['distinct' => true, 'expression' => 'convid']; - $notifications += DBA::count('mail', ['uid' => $id['uid'], 'seen' => false], $params); - - $notifications += DBA::count('intro', ['blocked' => false, 'ignore' => false, 'uid' => $id['uid']]); - - $identities[$key]['notifications'] = $notifications; - } - - $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('manage.tpl'), [ - '$title' => L10n::t('Manage Identities and/or Pages'), - '$desc' => L10n::t('Toggle between different identities or community/group pages which share your account details or which you have been granted "manage" permissions'), - '$choose' => L10n::t('Select an identity to manage: '), - '$identities' => $identities, - '$submit' => L10n::t('Submit'), - ]); - - return $o; - -} diff --git a/src/Content/Nav.php b/src/Content/Nav.php index e81214cee..ff1680ab3 100644 --- a/src/Content/Nav.php +++ b/src/Content/Nav.php @@ -29,7 +29,7 @@ class Nav 'directory' => null, 'settings' => null, 'contacts' => null, - 'manage' => null, + 'delegation'=> null, 'events' => null, 'register' => null ]; @@ -257,11 +257,9 @@ class Nav $nav['messages']['new'] = ['message/new', L10n::t('New Message'), '', L10n::t('New Message')]; if (is_array($a->identities) && count($a->identities) > 1) { - $nav['manage'] = ['manage', L10n::t('Manage'), '', L10n::t('Manage other pages')]; + $nav['delegation'] = ['delegation', L10n::t('Delegation'), '', L10n::t('Manage other pages')]; } - $nav['delegations'] = ['settings/delegation', L10n::t('Delegations'), '', L10n::t('Delegate Page Management')]; - $nav['settings'] = ['settings', L10n::t('Settings'), '', L10n::t('Account settings')]; if (Feature::isEnabled(local_user(), 'multi_profiles')) { diff --git a/src/Module/Delegation.php b/src/Module/Delegation.php new file mode 100644 index 000000000..77baefeaa --- /dev/null +++ b/src/Module/Delegation.php @@ -0,0 +1,136 @@ +user; + + if (Session::get('submanage')) { + $user = User::getById(Session::get('submanage')); + if (DBA::isResult($user)) { + $uid = intval($user['uid']); + $orig_record = $user; + } + } + + $identity = intval($_POST['identity'] ?? 0); + if (!$identity) { + return; + } + + $limited_id = 0; + $original_id = $uid; + + $manages = DBA::selectToArray('manage', ['mid'], ['uid' => $uid]); + foreach ($manages as $manage) { + if ($identity == $manage['mid']) { + $limited_id = $manage['mid']; + break; + } + } + + if ($limited_id) { + $user = User::getById($limited_id); + } else { + // Check if the target user is one of our children + $user = DBA::selectFirst('user', [], ['uid' => $identity, 'parent-uid' => $orig_record['uid']]); + + // Check if the target user is one of our siblings + if (!DBA::isResult($user) && ($orig_record['parent-uid'] != 0)) { + $user = DBA::selectFirst('user', [], ['uid' => $identity, 'parent-uid' => $orig_record['parent-uid']]); + } + + // Check if it's our parent or our own user + if (!DBA::isResult($user) + && ( + $orig_record['parent-uid'] != 0 && $orig_record['parent-uid'] == $identity + || + $orig_record['uid'] != 0 && $orig_record['uid'] == $identity + ) + ) { + $user = User::getById($identity); + } + } + + if (!DBA::isResult($user)) { + return; + } + + Session::clear(); + + Session::setAuthenticatedForUser(self::getApp(), $user, true, true); + + if ($limited_id) { + Session::set('submanage', $original_id); + } + + $ret = []; + Hook::callAll('home_init', $ret); + + self::getApp()->internalRedirect('profile/' . self::getApp()->user['nickname']); + // NOTREACHED + } + + public static function content() + { + if (!local_user()) { + throw new ForbiddenException(L10n::t('Permission denied.')); + } + + $identities = self::getApp()->identities; + + //getting additinal information for each identity + foreach ($identities as $key => $identity) { + $thumb = Contact::selectFirst(['thumb'], ['uid' => $identity['uid'], 'self' => true]); + if (!DBA::isResult($thumb)) { + continue; + } + + $identities[$key]['thumb'] = $thumb['thumb']; + + $identities[$key]['selected'] = ($identity['nickname'] === self::getApp()->user['nickname']); + + $condition = ["`uid` = ? AND `msg` != '' AND NOT (`type` IN (?, ?)) AND NOT `seen`", $identity['uid'], NOTIFY_INTRO, NOTIFY_MAIL]; + $params = ['distinct' => true, 'expression' => 'parent']; + $notifications = DBA::count('notify', $condition, $params); + + $params = ['distinct' => true, 'expression' => 'convid']; + $notifications += DBA::count('mail', ['uid' => $identity['uid'], 'seen' => false], $params); + + $notifications += DBA::count('intro', ['blocked' => false, 'ignore' => false, 'uid' => $identity['uid']]); + + $identities[$key]['notifications'] = $notifications; + } + + $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('delegation.tpl'), [ + '$title' => L10n::t('Manage Identities and/or Pages'), + '$desc' => L10n::t('Toggle between different identities or community/group pages which share your account details or which you have been granted "manage" permissions'), + '$choose' => L10n::t('Select an identity to manage: '), + '$identities' => $identities, + '$submit' => L10n::t('Submit'), + ]); + + return $o; + } +} diff --git a/static/routes.config.php b/static/routes.config.php index 841fd68f9..ef65c4685 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -92,6 +92,7 @@ return [ '/ignored' => [Module\Contact::class, [R::GET]], ], '/credits' => [Module\Credits::class, [R::GET]], + '/delegation'=> [Module\Delegation::class, [R::GET, R::POST]], '/dirfind' => [Module\Search\Directory::class, [R::GET]], '/directory' => [Module\Directory::class, [R::GET]], diff --git a/view/templates/delegation.tpl b/view/templates/delegation.tpl new file mode 100644 index 000000000..0e8e406d0 --- /dev/null +++ b/view/templates/delegation.tpl @@ -0,0 +1,37 @@ + +