Merge pull request #4727 from tobiasd/20180402-register

added TOS module
This commit is contained in:
Hypolite Petovan 2018-04-03 10:39:53 -04:00 committed by GitHub
commit 2cf35cd8f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 3222 additions and 3035 deletions

View file

@ -109,6 +109,9 @@ function admin_post(App $a)
}
$return_path = 'admin/themes/' . $theme;
break;
case 'tos':
admin_page_tos_post($a);
break;
case 'features':
admin_page_features_post($a);
break;
@ -181,7 +184,8 @@ function admin_content(App $a)
'users' => ["admin/users/" , L10n::t("Users") , "users"],
'addons' => ["admin/addons/" , L10n::t("Addons") , "addons"],
'themes' => ["admin/themes/" , L10n::t("Themes") , "themes"],
'features' => ["admin/features/" , L10n::t("Additional features") , "features"] ]],
'features' => ["admin/features/" , L10n::t("Additional features") , "features"],
'tos' => ["admin/tos/" , L10n::t("Terms of Service") , "tos"] ]],
'database' => [ L10n::t('Database'), [
'dbsync' => ["admin/dbsync/" , L10n::t('DB updates') , "dbsync"],
'queue' => ["admin/queue/" , L10n::t('Inspect Queue') , "queue"], ]],
@ -265,6 +269,9 @@ function admin_content(App $a)
case 'deleteitem':
$o = admin_page_deleteitem($a);
break;
case 'tos':
$o = admin_page_tos($a);
break;
default:
notice(L10n::t("Item not found."));
}
@ -281,6 +288,50 @@ function admin_content(App $a)
}
}
/**
* @brief Subpage to define the display of a Terms of Usage page.
*
* @param App $a
* @return string
*/
function admin_page_tos(App $a)
{
$t = get_markup_template('admin/tos.tpl');
return replace_macros($t, [
'$title' => L10n::t('Administration'),
'$page' => L10n::t('Terms of Service'),
'$displaytos' => ['displaytos', L10n::t('Display Terms of Service'), Config::get('system', 'tosdisplay'), L10n::t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')],
'$displayprivstatement' => ['displayprivstatement', L10n::t('Display Privacy Statement'), Config::get('system','tosprivstatement'), L10n::t('Show some informations regarding the needed information to operate the node according e.g. to <a href="%s" target="_blank">EU-GDPR</a>.','https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')],
'$tostext' => ['tostext', L10n::t('The Terms of Usage'), Config::get('system', 'tostext'), L10n::t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')],
'$form_security_token' => get_form_security_token("admin_tos"),
'$submit' => L10n::t('Save Settings'),
]);
}
/**
* @brief Process send data from Admin TOS Page
*
* @param App $a
*/
function admin_page_tos_post(App $a)
{
check_form_security_token_redirectOnErr('/admin/tos', 'admin_tos');
if (!x($_POST, "page_tos")) {
return;
}
$displaytos = ((x($_POST, 'displaytos')) ? True : False);
$displayprivstatement = ((x($_POST, 'displayprivstatement')) ? True : False);
$tostext = ((x($_POST, 'tostext')) ? strip_tags(trim($_POST['tostext'])) : '');
Config::set('system', 'tosdisplay', $displaytos);
Config::set('system', 'tosprivstatement', $displayprivstatement);
Config::set('system', 'tostext', $tostext);
goaway('admin/tos');
return; // NOTREACHED
}
/**
* @brief Subpage to modify the server wide block list via the admin panel.
*
@ -920,7 +971,7 @@ function admin_page_site_post(App $a)
$daily_registrations = ((x($_POST,'max_daily_registrations')) ? intval(trim($_POST['max_daily_registrations'])) :0);
$abandon_days = ((x($_POST,'abandon_days')) ? intval(trim($_POST['abandon_days'])) : 0);
$register_text = ((x($_POST,'register_text')) ? notags(trim($_POST['register_text'])) : '');
$register_text = ((x($_POST,'register_text')) ? strip_tags(trim($_POST['register_text'])) : '');
$allowed_sites = ((x($_POST,'allowed_sites')) ? notags(trim($_POST['allowed_sites'])) : '');
$allowed_email = ((x($_POST,'allowed_email')) ? notags(trim($_POST['allowed_email'])) : '');
@ -1325,7 +1376,7 @@ function admin_page_site(App $a)
'$register_policy' => ['register_policy', L10n::t("Register policy"), $a->config['register_policy'], "", $register_choices],
'$daily_registrations' => ['max_daily_registrations', L10n::t("Maximum Daily Registrations"), Config::get('system', 'max_daily_registrations'), L10n::t("If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect.")],
'$register_text' => ['register_text', L10n::t("Register text"), $a->config['register_text'], L10n::t("Will be displayed prominently on the registration page.")],
'$register_text' => ['register_text', L10n::t("Register text"), $a->config['register_text'], L10n::t("Will be displayed prominently on the registration page. You can use BBCode here.")],
'$abandon_days' => ['abandon_days', L10n::t('Accounts abandoned after x days'), Config::get('system','account_abandon_days'), L10n::t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')],
'$allowed_sites' => ['allowed_sites', L10n::t("Allowed friend domains"), Config::get('system','allowed_sites'), L10n::t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")],
'$allowed_email' => ['allowed_email', L10n::t("Allowed email domains"), Config::get('system','allowed_email'), L10n::t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")],
@ -1547,6 +1598,8 @@ function admin_page_users_post(App $a)
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
If you ever want to delete your account, you can do so at %1$s/removeme
Thank you and welcome to %4$s.'));
$preamble = sprintf($preamble, $user['username'], $a->config['sitename']);

View file

@ -117,6 +117,11 @@ function friendica_content(App $a)
$o .= '<p>' . L10n::t('No installed addons/apps') . '</p>' . PHP_EOL;
}
if (Config::get('system', 'tosdisplay'))
{
$o .= '<p>'.L10n::t('Read about the <a href="%1$s/tos">Terms of Service</a> of this node.', System::baseurl()).'</p>';
}
$blocklist = Config::get('system', 'blocklist');
if (count($blocklist)) {
$o .= '<div id="about_blocklist"><p>' . L10n::t('On this server the following remote servers are blocked.') . '</p>' . PHP_EOL;

View file

@ -262,7 +262,7 @@ function register_content(App $a)
'$invite_id' => $invite_id,
'$realpeople' => $realpeople,
'$regtitle' => L10n::t('Registration'),
'$registertext' => x($a->config, 'register_text') ? BBCode::convert($a->config['register_text']) : "",
'$registertext' => BBCode::convert(Config::get('config', 'register_text', '')),
'$fillwith' => $fillwith,
'$fillext' => $fillext,
'$oidlabel' => $oidlabel,
@ -284,6 +284,9 @@ function register_content(App $a)
'$sitename' => $a->get_hostname(),
'$importh' => L10n::t('Import'),
'$importt' => L10n::t('Import your profile to this friendica instance'),
'$showtoslink' => Config::get('system', 'tosdisplay'),
'$tostext' => L10n::t('Terms of Service'),
'$baseurl' => System::baseurl(),
'$form_security_token' => get_form_security_token("register")
]);
return $o;

View file

@ -6,6 +6,9 @@ namespace Friendica;
* All modules in Friendica should extend BaseModule, although not all modules
* need to extend all the methods described here
*
* The filename of the module in src/Module needs to match the class name
* exactly to make the module available.
*
* @author Hypolite Petovan mrpetovan@gmail.com
*/
abstract class BaseModule extends BaseObject

View file

@ -614,11 +614,12 @@ class User
'));
$body = deindent(L10n::t('
The login details are as follows:
Site Location: %3$s
Login Name: %1$s
Password: %5$s
You may change your password from your account Settings page after logging
Site Location: %1$s
Login Name: %2$s
Password: %3$s
You may change your password from your account "Settings" page after logging
in.
Please take a few moments to review the other account settings on that page.
@ -627,7 +628,7 @@ class User
' . "\x28" . 'on the "Profiles" page' . "\x29" . ' so that other people can easily find you.
We recommend setting your full name, adding a profile photo,
adding some profile keywords ' . "\x28" . 'very useful in making new friends' . "\x29" . ' - and
adding some profile "keywords" ' . "\x28" . 'very useful in making new friends' . "\x29" . ' - and
perhaps what country you live in; if you do not wish to be more specific
than that.
@ -635,8 +636,9 @@ class User
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
If you ever want to delete your account, you can do so at %1$s/removeme
Thank you and welcome to %2$s.'));
Thank you and welcome to %4$s.'));
$preamble = sprintf($preamble, $username, $sitename);
$body = sprintf($body, $email, $sitename, $siteurl, $username, $password);

59
src/Module/Tos.php Normal file
View file

@ -0,0 +1,59 @@
<?php
/**
* @file mod/tos.php
*
* This module displays the Terms of Service for a node, if the admin
* wants them to be displayed.
*/
namespace Friendica\Module;
use Friendica\BaseModule;
use Friendica\Core\Config;
use Friendica\Core\L10n;
use Friendica\Core\System;
use Friendica\Content\Text\BBCode;
class Tos extends BaseModule
{
/**
* @brief initialize the TOS module.
*
* If this is a single user instance, we expect the user to know their
* dealings with their own node so a TOS is not necessary.
*
**/
public static function init()
{
if (strlen(Config::get('system','singleuser'))) {
goaway(System::baseUrl()."/profile/" . Config::get('system','singleuser'));
}
}
/**
* @brief generate the content of the /tos page
*
* The content of the /tos page is generated from two parts.
* (1) a free form part the admin of the node can set in the admin panel
* (2) an optional privacy statement that gives some transparency about
* what information are needed by the software to provide the service.
* This privacy statement has fixed text, so it can be translated easily.
*
* @return string
**/
public static function content() {
$tpl = get_markup_template('tos.tpl');
if (Config::get('system', 'tosdisplay'))
{
return replace_macros($tpl, [
'$title' => L10n::t("Terms of Service"),
'$tostext' => BBCode::convert(Config::get('system', 'tostext')),
'$displayprivstatement' => Config::get('system', 'tosprivstatement'),
'$privstatementtitle' => L10n::t("Privacy Statement"),
'$privoperate' => L10n::t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'),
'$privdelete' => L10n::t('At any point in time a logged in user can export their account data from the <a href="%1$s/settings/uexport">account settings</a>. If the user wants to delete their account they can do so at <a href="%1$s/removeme">%1$s/removeme</a>. The deletion of the account will be permanent.', System::baseurl())
]);
} else {
return;
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,12 @@
<div id="adminpage">
<h1>{{$title}} - {{$page}}</h1>
<p>{{$intro}}</p>
<form action="{{$baseurl}}/admin/tos" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
{{include file="field_checkbox.tpl" field=$displaytos}}
{{include file="field_checkbox.tpl" field=$displayprivstatement}}
{{include file="field_textarea.tpl" field=$tostext}}
<div class="submit"><input type="submit" name="page_tos" value="{{$submit|escape:'html'}}" /></div>
</form>
</div>

View file

@ -64,6 +64,10 @@
{{$publish}}
{{if $showtoslink}}
<p><a href="{{$baseurl}}/tos">{{$tostext}}</a></p>
{{/if}}
<div id="register-submit-wrapper">
<input type="submit" name="submit" id="register-submit-button" value="{{$regbutt|escape:'html'}}" />
</div>

10
view/templates/tos.tpl Normal file
View file

@ -0,0 +1,10 @@
<h1>{{$title}}</h1>
{{$tostext}}
{{if $displayprivstatement}}
<h2>{{$privstatementtitle}}</h2>
<p>{{$privoperate}}</p>
<p>{{$privdelete}}</p>
{{/if}}