tra('Subscribe Group'), 'documentation' => 'PluginSubscribeGroup', 'description' => tra('Allow users to subscribe to a group'), 'prefs' => [ 'wikiplugin_subscribegroup' ], 'body' => tra('text displayed before the button'), 'iconname' => 'group', 'introduced' => 2, 'tags' => [ 'basic' ], 'params' => [ 'group' => [ 'required' => true, 'name' => tra('Group Name'), 'description' => tra('Group name to subscribe to or unsubscribe from'), 'since' => '2.0', 'filter' => 'groupname', 'default' => '' ], 'subscribe' => [ 'required' => false, 'name' => tra('Subscribe Text'), 'description' => tr( 'Subscribe text, containing %0 as the placeholder for the group name.', '%s' ), 'since' => '2.0', 'default' => tra('Subscribe') . '%s', ], 'unsubscribe' => [ 'required' => false, 'name' => tra('Unsubscribe Text'), 'description' => tr( 'Unsubscribe text, containing %0 as the placeholder for the group name.', '%s' ), 'since' => '2.0', 'default' => tra('Unsubscribe') . '%s' ], 'subscribe_action' => [ 'required' => false, 'name' => tra('Subscribe Action'), 'description' => tr( 'Subscribe button label, containing %0 as the placeholder for the group name.', '%s' ), 'since' => '2.0', 'default' => tra('OK') ], 'unsubscribe_action' => [ 'required' => false, 'name' => tr('Unsubscribe Action'), 'description' => tra( 'Unsubscribe button label, containing %0 as the placeholder for the group name.', '%s' ), 'since' => '2.0', 'default' => tra('OK') ], 'postsubscribe_url' => [ 'required' => false, 'name' => tra('Post-subscribe URL'), 'description' => tra('URL to send the user to after subscribing, if required.'), 'since' => '8.0', 'filter' => 'url', 'default' => '' ], 'postunsubscribe_url' => [ 'required' => false, 'name' => tra('Post-unsubscribe URL'), 'description' => tra('URL to send the user to after unsubscribing, if required.'), 'since' => '8.0', 'filter' => 'url', 'default' => '' ], 'defgroup' => [ 'required' => false, 'name' => tra('Default Group'), 'description' => tr( 'Make this the default group text, containing %0 as the placeholder for the group name.', '%s' ), 'since' => '9.1', 'default' => tra('OK') ], 'undefgroup' => [ 'required' => false, 'name' => tra('Not Default Group'), 'description' => tr( 'Stop this being default group text, containing %0 as the placeholder for the group name.', '%s' ), 'since' => '9.1', 'default' => tra('OK') ], 'defgroup_action' => [ 'required' => false, 'name' => tra('Default Group Action'), 'description' => tra('Default group button label. Will subscribe to the group first if not already a member.'), 'since' => '9.1', 'default' => tra('OK') ], 'undefgroup_action' => [ 'required' => false, 'name' => tra('Not Default Group Action'), 'description' => tra('Stop this being default group button label. Does not unsubscribe from the group.'), 'since' => '9.1', 'default' => tra('OK') ], 'undefgroup_group' => [ 'required' => false, 'name' => tra('Second Default'), 'description' => tra('Group name to set as default when user stops this group being it.'), 'since' => '9.1', 'filter' => 'groupname', 'default' => 'Registered' ], 'defgroup_redirect_home' => [ 'required' => false, 'name' => tra('Redirect'), 'description' => tra('Redirect to new home page after default group change. (default is to redirect)'), 'since' => '9.1', 'filter' => 'alpha', 'default' => 'y', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 'y'], ['text' => tra('No'), 'value' => 'n'] ] ], 'allowLeaveNonUserChoice' => [ 'required' => false, 'name' => tra('Can Always Leave'), 'description' => tra('Always allow leaving a group even if the group settings do not allow user choice.'), 'since' => '14.0', 'filter' => 'alpha', 'default' => 'n', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 'y'], ['text' => tra('No'), 'value' => 'n'] ] ], ], ]; } function wikiplugin_subscribegroup($data, $params) { global $tiki_p_subscribe_groups, $user; $userlib = TikiLib::lib('user'); $smarty = TikiLib::lib('smarty'); static $iSubscribeGroup = 0; ++$iSubscribeGroup; if (empty($user)) { return ''; } if ($tiki_p_subscribe_groups != 'y') { return tra('Permission denied'); } extract($params, EXTR_SKIP); if (empty($group)) { if (! empty($_REQUEST['group'])) { $group = $_REQUEST['group']; } else { return tra('Missing parameter'); } } if ($group == 'Anonymous' || $group == 'Registered') { return tra('Incorrect param'); } if (! ($info = $userlib->get_group_info($group)) || $info['groupName'] != $group) { // must have the right case return tra('Incorrect param'); } if (! isset($params['allowLeaveNonUserChoice']) || $params['allowLeaveNonUserChoice'] != 'y') { if ($info['userChoice'] != 'y') { return tra('Permission denied'); } } $groups = $userlib->get_user_groups_inclusion($user); $current_defgroup = $userlib->get_user_default_group($user); if (! $groups[$group] && $params['allowLeaveNonUserChoice'] == 'y') { // Deny anyway if user is not in group even if allowLeaveNonUserChoice is y return tra('Permission denied'); } if (! empty($_REQUEST['subscribeGroup']) && ! empty($_REQUEST['iSubscribeGroup']) && $_REQUEST['iSubscribeGroup'] == $iSubscribeGroup && $_REQUEST['group'] == $group) { if (isset($defgroup) || isset($defgroup_action) || isset($undefgroup) || isset($undefgroup_action)) { if ($current_defgroup == $group) { $new_group = ! empty($undefgroup_group) ? $undefgroup_group : 'Registered'; $userlib->set_default_group($user, $new_group); } else { if (! isset($groups[$group])) { $userlib->assign_user_to_group($user, $group); } $userlib->set_default_group($user, $group); } if (! empty($params['defgroup_url']) && $params['defgroup_url'] === 'n') { TikiLib::lib('access')->redirect(TikiLib::lib('access')->selfUrl()); } else { global $tikiroot; TikiLib::lib('access')->redirect($tikiroot); } die; } elseif (isset($groups[$group])) { $userlib->remove_user_from_group($user, $group); unset($groups[$group]); if (! empty($postunsubscribe_url)) { header("Location: $postunsubscribe_url"); die; } } else { $userlib->assign_user_to_group($user, $group); $groups[$group] = 'real'; if (! empty($postsubscribe_url)) { header("Location: $postsubscribe_url"); die; } } } if (isset($undefgroup) || isset($undefgroup_action)) { if ($current_defgroup == $group) { $text = isset($undefgroup) ? $undefgroup : ''; if (! isset($undefgroup_action)) { $undefgroup_action = tra('OK'); } $smarty->assign('action', $undefgroup_action); } else { $text = isset($defgroup) ? $defgroup : ''; if (! isset($defgroup_action)) { $defgroup_action = tra('OK'); } $smarty->assign('action', $defgroup_action); } } elseif (isset($groups[$group])) {//user already in the group-> if ($groups[$group] == 'included') { return tra('Incorrect param'); } $text = isset($unsubscribe) ? $unsubscribe : tra('Unsubscribe') . '%s'; if (! isset($unsubscribe_action)) { $unsubscribe_action = tra('OK'); } $smarty->assign('action', $unsubscribe_action); } else { $text = isset($subscribe) ? $subscribe : tra('Subscribe') . '%s'; if (! isset($subscribe_action)) { $subscribe_action = tra('OK'); } $smarty->assign('action', $subscribe_action); } $smarty->assign('text', sprintf(tra($text), $group)); $smarty->assign('subscribeGroup', $group); $smarty->assign('iSubscribeGroup', $iSubscribeGroup); $data = $data . $smarty->fetch('wiki-plugins/wikiplugin_subscribegroup.tpl'); return $data; }