mirror of
https://github.com/friendica/friendica
synced 2024-11-11 19:42:54 +00:00
Merge branch 'develop' of https://github.com/friendica/friendica into develop
This commit is contained in:
commit
a298a1f8d5
22 changed files with 293 additions and 157 deletions
4
boot.php
4
boot.php
|
@ -41,7 +41,7 @@ define('FRIENDICA_PLATFORM', 'Friendica');
|
||||||
define('FRIENDICA_CODENAME', 'The Tazmans Flax-lily');
|
define('FRIENDICA_CODENAME', 'The Tazmans Flax-lily');
|
||||||
define('FRIENDICA_VERSION', '2018.12-dev');
|
define('FRIENDICA_VERSION', '2018.12-dev');
|
||||||
define('DFRN_PROTOCOL_VERSION', '2.23');
|
define('DFRN_PROTOCOL_VERSION', '2.23');
|
||||||
define('DB_UPDATE_VERSION', 1287);
|
define('DB_UPDATE_VERSION', 1288);
|
||||||
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
|
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -647,7 +647,7 @@ function killme()
|
||||||
/**
|
/**
|
||||||
* @brief Redirect to another URL and terminate this process.
|
* @brief Redirect to another URL and terminate this process.
|
||||||
*/
|
*/
|
||||||
function goaway($path)
|
function goaway($path = '')
|
||||||
{
|
{
|
||||||
if (strstr(normalise_link($path), 'http://')) {
|
if (strstr(normalise_link($path), 'http://')) {
|
||||||
$url = $path;
|
$url = $path;
|
||||||
|
|
|
@ -620,7 +620,8 @@
|
||||||
"indexes": {
|
"indexes": {
|
||||||
"PRIMARY": ["id"],
|
"PRIMARY": ["id"],
|
||||||
"uri-hash": ["UNIQUE", "uri-hash"],
|
"uri-hash": ["UNIQUE", "uri-hash"],
|
||||||
"uri": ["uri(191)"]
|
"uri": ["uri(191)"],
|
||||||
|
"uri-id": ["uri-id"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"item-content": {
|
"item-content": {
|
||||||
|
@ -649,7 +650,8 @@
|
||||||
"indexes": {
|
"indexes": {
|
||||||
"PRIMARY": ["id"],
|
"PRIMARY": ["id"],
|
||||||
"uri-plink-hash": ["UNIQUE", "uri-plink-hash"],
|
"uri-plink-hash": ["UNIQUE", "uri-plink-hash"],
|
||||||
"uri": ["uri(191)"]
|
"uri": ["uri(191)"],
|
||||||
|
"uri-id": ["uri-id"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"item-delivery-data": {
|
"item-delivery-data": {
|
||||||
|
|
|
@ -853,8 +853,8 @@ function item_photo_menu($item) {
|
||||||
|
|
||||||
if ($cid && !$item['self']) {
|
if ($cid && !$item['self']) {
|
||||||
$poke_link = 'poke/?f=&c=' . $cid;
|
$poke_link = 'poke/?f=&c=' . $cid;
|
||||||
$contact_url = 'contacts/' . $cid;
|
$contact_url = 'contact/' . $cid;
|
||||||
$posts_link = 'contacts/' . $cid . '/posts';
|
$posts_link = 'contact/' . $cid . '/posts';
|
||||||
|
|
||||||
if (in_array($network, [Protocol::DFRN, Protocol::DIASPORA])) {
|
if (in_array($network, [Protocol::DFRN, Protocol::DIASPORA])) {
|
||||||
$pm_url = 'message/new/' . $cid;
|
$pm_url = 'message/new/' . $cid;
|
||||||
|
|
|
@ -84,7 +84,7 @@ function notification($params)
|
||||||
// with $params['show_in_notification_page'] == false, the notification isn't inserted into
|
// with $params['show_in_notification_page'] == false, the notification isn't inserted into
|
||||||
// the database, and an email is sent if applicable.
|
// the database, and an email is sent if applicable.
|
||||||
// default, if not specified: true
|
// default, if not specified: true
|
||||||
$show_in_notification_page = ((x($params, 'show_in_notification_page')) ? $params['show_in_notification_page']:true);
|
$show_in_notification_page = isset($params['show_in_notification_page']) ? $params['show_in_notification_page'] : true;
|
||||||
|
|
||||||
$additional_mail_header = "";
|
$additional_mail_header = "";
|
||||||
$additional_mail_header .= "Precedence: list\n";
|
$additional_mail_header .= "Precedence: list\n";
|
||||||
|
|
|
@ -18,13 +18,14 @@ use Friendica\Database\DBA;
|
||||||
use Friendica\Database\DBStructure;
|
use Friendica\Database\DBStructure;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
|
use Friendica\Model\Register;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Module\Login;
|
use Friendica\Module\Login;
|
||||||
use Friendica\Module\Tos;
|
use Friendica\Module\Tos;
|
||||||
use Friendica\Util\Arrays;
|
use Friendica\Util\Arrays;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
use Friendica\Util\Temporal;
|
|
||||||
use Friendica\Util\Network;
|
use Friendica\Util\Network;
|
||||||
|
use Friendica\Util\Temporal;
|
||||||
|
|
||||||
require_once 'include/enotify.php';
|
require_once 'include/enotify.php';
|
||||||
require_once 'include/text.php';
|
require_once 'include/text.php';
|
||||||
|
@ -33,11 +34,11 @@ require_once 'include/items.php';
|
||||||
/**
|
/**
|
||||||
* @brief Process send data from the admin panels subpages
|
* @brief Process send data from the admin panels subpages
|
||||||
*
|
*
|
||||||
* This function acts as relais for processing the data send from the subpages
|
* This function acts as relay for processing the data send from the subpages
|
||||||
* of the admin panel. Depending on the 1st parameter of the url (argv[1])
|
* of the admin panel. Depending on the 1st parameter of the url (argv[1])
|
||||||
* specialized functions are called to process the data from the subpages.
|
* specialized functions are called to process the data from the subpages.
|
||||||
*
|
*
|
||||||
* The function itself does not return anything, but the subsequencely function
|
* The function itself does not return anything, but the subsequently function
|
||||||
* return the HTML for the pages of the admin panel.
|
* return the HTML for the pages of the admin panel.
|
||||||
*
|
*
|
||||||
* @param App $a
|
* @param App $a
|
||||||
|
@ -895,8 +896,7 @@ function admin_page_summary(App $a)
|
||||||
|
|
||||||
logger('accounts: ' . print_r($accounts, true), LOGGER_DATA);
|
logger('accounts: ' . print_r($accounts, true), LOGGER_DATA);
|
||||||
|
|
||||||
$r = q("SELECT COUNT(`id`) AS `count` FROM `register`");
|
$pending = Register::getPendingCount();
|
||||||
$pending = $r[0]['count'];
|
|
||||||
|
|
||||||
$r = q("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1");
|
$r = q("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1");
|
||||||
$queue = (($r) ? $r[0]['total'] : 0);
|
$queue = (($r) ? $r[0]['total'] : 0);
|
||||||
|
@ -1792,11 +1792,7 @@ function admin_page_users(App $a)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get pending */
|
/* get pending */
|
||||||
$pending = q("SELECT `register`.*, `contact`.`name`, `user`.`email`
|
$pending = Register::getPending();
|
||||||
FROM `register`
|
|
||||||
INNER JOIN `contact` ON `register`.`uid` = `contact`.`uid`
|
|
||||||
INNER JOIN `user` ON `register`.`uid` = `user`.`uid`;");
|
|
||||||
|
|
||||||
|
|
||||||
/* get users */
|
/* get users */
|
||||||
$total = q("SELECT COUNT(*) AS `total` FROM `user` WHERE 1");
|
$total = q("SELECT COUNT(*) AS `total` FROM `user` WHERE 1");
|
||||||
|
|
|
@ -58,14 +58,9 @@ function invite_post(App $a)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($invitation_only && ($invites_remaining || is_site_admin())) {
|
if ($invitation_only && ($invites_remaining || is_site_admin())) {
|
||||||
$code = autoname(8) . srand(1000, 9999);
|
$code = Friendica\Model\Register::createForInvitation();
|
||||||
$nmessage = str_replace('$invite_code', $code, $message);
|
$nmessage = str_replace('$invite_code', $code, $message);
|
||||||
|
|
||||||
$r = q("INSERT INTO `register` (`hash`,`created`) VALUES ('%s', '%s') ",
|
|
||||||
DBA::escape($code),
|
|
||||||
DBA::escape(DateTimeFormat::utcNow())
|
|
||||||
);
|
|
||||||
|
|
||||||
if (! is_site_admin()) {
|
if (! is_site_admin()) {
|
||||||
$invites_remaining --;
|
$invites_remaining --;
|
||||||
if ($invites_remaining >= 0) {
|
if ($invites_remaining >= 0) {
|
||||||
|
|
|
@ -73,6 +73,7 @@ function parse_url_content(App $a)
|
||||||
$hdrs[$k] = $v;
|
$hdrs[$k] = $v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$type = null;
|
||||||
if (array_key_exists('Content-Type', $hdrs)) {
|
if (array_key_exists('Content-Type', $hdrs)) {
|
||||||
$type = $hdrs['Content-Type'];
|
$type = $hdrs['Content-Type'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,11 +202,7 @@ function ping_init(App $a)
|
||||||
$mail_count = count($mails);
|
$mail_count = count($mails);
|
||||||
|
|
||||||
if (intval(Config::get('config', 'register_policy')) === REGISTER_APPROVE && is_site_admin()) {
|
if (intval(Config::get('config', 'register_policy')) === REGISTER_APPROVE && is_site_admin()) {
|
||||||
$regs = q(
|
$regs = Friendica\Model\Register::getPending();
|
||||||
"SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`
|
|
||||||
FROM `contact` RIGHT JOIN `register` ON `register`.`uid` = `contact`.`uid`
|
|
||||||
WHERE `contact`.`self` = 1"
|
|
||||||
);
|
|
||||||
|
|
||||||
if (DBA::isResult($regs)) {
|
if (DBA::isResult($regs)) {
|
||||||
$register_count = count($regs);
|
$register_count = count($regs);
|
||||||
|
|
|
@ -11,10 +11,8 @@ use Friendica\Core\L10n;
|
||||||
use Friendica\Core\PConfig;
|
use Friendica\Core\PConfig;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Model;
|
||||||
use Friendica\Model\User;
|
|
||||||
use Friendica\Module\Tos;
|
use Friendica\Module\Tos;
|
||||||
use Friendica\Util\DateTimeFormat;
|
|
||||||
|
|
||||||
require_once 'include/enotify.php';
|
require_once 'include/enotify.php';
|
||||||
|
|
||||||
|
@ -67,7 +65,7 @@ function register_post(App $a)
|
||||||
$arr['language'] = L10n::getBrowserLanguage();
|
$arr['language'] = L10n::getBrowserLanguage();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$result = User::create($arr);
|
$result = Model\User::create($arr);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
notice($e->getMessage());
|
notice($e->getMessage());
|
||||||
return;
|
return;
|
||||||
|
@ -76,7 +74,7 @@ function register_post(App $a)
|
||||||
$user = $result['user'];
|
$user = $result['user'];
|
||||||
|
|
||||||
if ($netpublish && intval(Config::get('config', 'register_policy')) !== REGISTER_APPROVE) {
|
if ($netpublish && intval(Config::get('config', 'register_policy')) !== REGISTER_APPROVE) {
|
||||||
$url = System::baseUrl() . '/profile/' . $user['nickname'];
|
$url = $a->getBaseUrl() . '/profile/' . $user['nickname'];
|
||||||
Worker::add(PRIORITY_LOW, "Directory", $url);
|
Worker::add(PRIORITY_LOW, "Directory", $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,18 +84,22 @@ function register_post(App $a)
|
||||||
|
|
||||||
if (intval(Config::get('config', 'register_policy')) === REGISTER_OPEN) {
|
if (intval(Config::get('config', 'register_policy')) === REGISTER_OPEN) {
|
||||||
if ($using_invites && $invite_id) {
|
if ($using_invites && $invite_id) {
|
||||||
q("delete * from register where hash = '%s' limit 1", DBA::escape($invite_id));
|
Model\Register::deleteByHash($invite_id);
|
||||||
PConfig::set($user['uid'], 'system', 'invites_remaining', $num_invites);
|
PConfig::set($user['uid'], 'system', 'invites_remaining', $num_invites);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only send a password mail when the password wasn't manually provided
|
// Only send a password mail when the password wasn't manually provided
|
||||||
if (!x($_POST, 'password1') || !x($_POST, 'confirm')) {
|
if (!x($_POST, 'password1') || !x($_POST, 'confirm')) {
|
||||||
$res = User::sendRegisterOpenEmail(
|
$res = Model\User::sendRegisterOpenEmail(
|
||||||
$user['email'], Config::get('config', 'sitename'), System::baseUrl(), $user['username'], $result['password'], $user);
|
$user,
|
||||||
|
Config::get('config', 'sitename'),
|
||||||
|
$a->getBaseUrl(),
|
||||||
|
$result['password']
|
||||||
|
);
|
||||||
|
|
||||||
if ($res) {
|
if ($res) {
|
||||||
info(L10n::t('Registration successful. Please check your email for further instructions.') . EOL);
|
info(L10n::t('Registration successful. Please check your email for further instructions.') . EOL);
|
||||||
goaway(System::baseUrl());
|
goaway();
|
||||||
} else {
|
} else {
|
||||||
notice(
|
notice(
|
||||||
L10n::t('Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login.',
|
L10n::t('Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login.',
|
||||||
|
@ -108,27 +110,19 @@ function register_post(App $a)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
info(L10n::t('Registration successful.') . EOL);
|
info(L10n::t('Registration successful.') . EOL);
|
||||||
goaway(System::baseUrl());
|
goaway();
|
||||||
}
|
}
|
||||||
} elseif (intval(Config::get('config', 'register_policy')) === REGISTER_APPROVE) {
|
} elseif (intval(Config::get('config', 'register_policy')) === REGISTER_APPROVE) {
|
||||||
if (!strlen(Config::get('config', 'admin_email'))) {
|
if (!strlen(Config::get('config', 'admin_email'))) {
|
||||||
notice(L10n::t('Your registration can not be processed.') . EOL);
|
notice(L10n::t('Your registration can not be processed.') . EOL);
|
||||||
goaway(System::baseUrl());
|
goaway();
|
||||||
}
|
}
|
||||||
|
|
||||||
$hash = random_string();
|
Model\Register::createForApproval($user['uid'], Config::get('system', 'language'), $_POST['permonlybox']);
|
||||||
$r = q("INSERT INTO `register` ( `hash`, `created`, `uid`, `password`, `language`, `note` ) VALUES ( '%s', '%s', %d, '%s', '%s', '%s' ) ",
|
|
||||||
DBA::escape($hash),
|
|
||||||
DBA::escape(DateTimeFormat::utcNow()),
|
|
||||||
intval($user['uid']),
|
|
||||||
DBA::escape($result['password']),
|
|
||||||
DBA::escape(Config::get('system', 'language')),
|
|
||||||
DBA::escape($_POST['permonlybox'])
|
|
||||||
);
|
|
||||||
|
|
||||||
// invite system
|
// invite system
|
||||||
if ($using_invites && $invite_id) {
|
if ($using_invites && $invite_id) {
|
||||||
q("DELETE * FROM `register` WHERE `hash` = '%s' LIMIT 1", DBA::escape($invite_id));
|
Model\Register::deleteByHash($invite_id);
|
||||||
PConfig::set($user['uid'], 'system', 'invites_remaining', $num_invites);
|
PConfig::set($user['uid'], 'system', 'invites_remaining', $num_invites);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,9 +140,9 @@ function register_post(App $a)
|
||||||
'source_name' => $user['username'],
|
'source_name' => $user['username'],
|
||||||
'source_mail' => $user['email'],
|
'source_mail' => $user['email'],
|
||||||
'source_nick' => $user['nickname'],
|
'source_nick' => $user['nickname'],
|
||||||
'source_link' => System::baseUrl() . "/admin/users/",
|
'source_link' => $a->getBaseUrl() . "/admin/users/",
|
||||||
'link' => System::baseUrl() . "/admin/users/",
|
'link' => $a->getBaseUrl() . "/admin/users/",
|
||||||
'source_photo' => System::baseUrl() . "/photo/avatar/" . $user['uid'] . ".jpg",
|
'source_photo' => $a->getBaseUrl() . "/photo/avatar/" . $user['uid'] . ".jpg",
|
||||||
'to_email' => $admin['email'],
|
'to_email' => $admin['email'],
|
||||||
'uid' => $admin['uid'],
|
'uid' => $admin['uid'],
|
||||||
'language' => $admin['language'] ? $admin['language'] : 'en',
|
'language' => $admin['language'] ? $admin['language'] : 'en',
|
||||||
|
@ -156,11 +150,15 @@ function register_post(App $a)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
// send notification to the user, that the registration is pending
|
// send notification to the user, that the registration is pending
|
||||||
User::sendRegisterPendingEmail(
|
Model\User::sendRegisterPendingEmail(
|
||||||
$user['email'], Config::get('config', 'sitename'), $user['username']);
|
$user,
|
||||||
|
Config::get('config', 'sitename'),
|
||||||
|
$a->getBaseURL(),
|
||||||
|
$result['password']
|
||||||
|
);
|
||||||
|
|
||||||
info(L10n::t('Your registration is pending approval by the site owner.') . EOL);
|
info(L10n::t('Your registration is pending approval by the site owner.') . EOL);
|
||||||
goaway(System::baseUrl());
|
goaway();
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -9,6 +9,7 @@ use Friendica\Core\L10n;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
use Friendica\Model\Register;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Module\Login;
|
use Friendica\Module\Login;
|
||||||
|
|
||||||
|
@ -18,51 +19,35 @@ function user_allow($hash)
|
||||||
{
|
{
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
$register = q("SELECT * FROM `register` WHERE `hash` = '%s' LIMIT 1",
|
$register = Register::getByHash($hash);
|
||||||
DBA::escape($hash)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
if (!DBA::isResult($register)) {
|
if (!DBA::isResult($register)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
|
$user = User::getById($register['uid']);
|
||||||
intval($register[0]['uid'])
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!DBA::isResult($user)) {
|
if (!DBA::isResult($user)) {
|
||||||
killme();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
$r = q("DELETE FROM `register` WHERE `hash` = '%s'",
|
Register::deleteByHash($hash);
|
||||||
DBA::escape($register[0]['hash'])
|
|
||||||
);
|
|
||||||
|
|
||||||
|
DBA::update('user', ['blocked' => false, 'verified' => true], ['uid' => $register['uid']]);
|
||||||
|
|
||||||
$r = q("UPDATE `user` SET `blocked` = 0, `verified` = 1 WHERE `uid` = %d",
|
$profile = DBA::selectFirst('profile', ['net-publish'], ['uid' => $register['uid'], 'is-default' => true]);
|
||||||
intval($register[0]['uid'])
|
|
||||||
);
|
|
||||||
|
|
||||||
$r = q("SELECT * FROM `profile` WHERE `uid` = %d AND `is-default` = 1",
|
if (DBA::isResult($profile) && $profile['net-publish'] && Config::get('system', 'directory')) {
|
||||||
intval($user[0]['uid'])
|
$url = System::baseUrl() . '/profile/' . $user['nickname'];
|
||||||
);
|
|
||||||
if (DBA::isResult($r) && $r[0]['net-publish']) {
|
|
||||||
$url = System::baseUrl() . '/profile/' . $user[0]['nickname'];
|
|
||||||
if ($url && strlen(Config::get('system', 'directory'))) {
|
|
||||||
Worker::add(PRIORITY_LOW, "Directory", $url);
|
Worker::add(PRIORITY_LOW, "Directory", $url);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
L10n::pushLang($register[0]['language']);
|
L10n::pushLang($register['language']);
|
||||||
|
|
||||||
$res = User::sendRegisterOpenEmail(
|
$res = User::sendRegisterOpenEmail(
|
||||||
$user[0]['email'],
|
$user,
|
||||||
Config::get('config', 'sitename'),
|
Config::get('config', 'sitename'),
|
||||||
System::baseUrl(),
|
$a->getBaseUrl(),
|
||||||
$user[0]['username'],
|
defaults($register, 'password', 'Sent in a previous email')
|
||||||
$register[0]['password'],
|
);
|
||||||
$user[0]);
|
|
||||||
|
|
||||||
L10n::popLang();
|
L10n::popLang();
|
||||||
|
|
||||||
|
@ -77,22 +62,21 @@ function user_allow($hash)
|
||||||
// allowed to have friends on this system
|
// allowed to have friends on this system
|
||||||
function user_deny($hash)
|
function user_deny($hash)
|
||||||
{
|
{
|
||||||
$register = q("SELECT * FROM `register` WHERE `hash` = '%s' LIMIT 1",
|
$register = Register::getByHash($hash);
|
||||||
DBA::escape($hash)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!DBA::isResult($register)) {
|
if (!DBA::isResult($register)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
|
$user = User::getById($register['uid']);
|
||||||
intval($register[0]['uid'])
|
if (!DBA::isResult($user)) {
|
||||||
);
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
DBA::delete('user', ['uid' => $register[0]['uid']]);
|
DBA::delete('user', ['uid' => $register['uid']]);
|
||||||
DBA::delete('register', ['hash' => $register[0]['hash']]);
|
|
||||||
|
|
||||||
notice(L10n::t('Registration revoked for %s', $user[0]['username']) . EOL);
|
Register::deleteByHash($register['hash']);
|
||||||
|
|
||||||
|
notice(L10n::t('Registration revoked for %s', $user['username']) . EOL);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,17 +84,16 @@ function regmod_content(App $a)
|
||||||
{
|
{
|
||||||
if (!local_user()) {
|
if (!local_user()) {
|
||||||
info(L10n::t('Please login.') . EOL);
|
info(L10n::t('Please login.') . EOL);
|
||||||
$o = '<br /><br />' . Login::form($a->query_string, intval(Config::get('config', 'register_policy')) === REGISTER_CLOSED ? 0 : 1);
|
return Login::form($a->query_string, intval(Config::get('config', 'register_policy')) === REGISTER_CLOSED ? 0 : 1);
|
||||||
return $o;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!is_site_admin()) || (x($_SESSION, 'submanage') && intval($_SESSION['submanage']))) {
|
if (!is_site_admin() || !empty($_SESSION['submanage'])) {
|
||||||
notice(L10n::t('Permission denied.') . EOL);
|
notice(L10n::t('Permission denied.') . EOL);
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($a->argc != 3) {
|
if ($a->argc != 3) {
|
||||||
killme();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
$cmd = $a->argv[1];
|
$cmd = $a->argv[1];
|
||||||
|
@ -118,13 +101,11 @@ function regmod_content(App $a)
|
||||||
|
|
||||||
if ($cmd === 'deny') {
|
if ($cmd === 'deny') {
|
||||||
user_deny($hash);
|
user_deny($hash);
|
||||||
goaway(System::baseUrl() . "/admin/users/");
|
goaway('admin/users/');
|
||||||
killme();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cmd === 'allow') {
|
if ($cmd === 'allow') {
|
||||||
user_allow($hash);
|
user_allow($hash);
|
||||||
goaway(System::baseUrl() . "/admin/users/");
|
goaway('admin/users/');
|
||||||
killme();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -821,7 +821,7 @@ class DBA
|
||||||
* @param array $param parameter array
|
* @param array $param parameter array
|
||||||
* @param bool $on_duplicate_update Do an update on a duplicate entry
|
* @param bool $on_duplicate_update Do an update on a duplicate entry
|
||||||
*
|
*
|
||||||
* @return boolean was the insert successfull?
|
* @return boolean was the insert successful?
|
||||||
*/
|
*/
|
||||||
public static function insert($table, $param, $on_duplicate_update = false) {
|
public static function insert($table, $param, $on_duplicate_update = false) {
|
||||||
|
|
||||||
|
|
|
@ -380,7 +380,7 @@ class Item extends BaseObject
|
||||||
$usermode = true;
|
$usermode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields = self::fieldlist($selected, $usermode);
|
$fields = self::fieldlist($usermode);
|
||||||
|
|
||||||
$select_fields = self::constructSelectFields($fields, $selected);
|
$select_fields = self::constructSelectFields($fields, $selected);
|
||||||
|
|
||||||
|
@ -487,7 +487,7 @@ class Item extends BaseObject
|
||||||
$usermode = true;
|
$usermode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields = self::fieldlist($selected, $usermode);
|
$fields = self::fieldlist($usermode);
|
||||||
|
|
||||||
$fields['thread'] = ['mention', 'ignored', 'iid'];
|
$fields['thread'] = ['mention', 'ignored', 'iid'];
|
||||||
|
|
||||||
|
@ -523,7 +523,7 @@ class Item extends BaseObject
|
||||||
*
|
*
|
||||||
* @return array field list
|
* @return array field list
|
||||||
*/
|
*/
|
||||||
private static function fieldlist($selected, $usermode)
|
private static function fieldlist($usermode)
|
||||||
{
|
{
|
||||||
$fields = [];
|
$fields = [];
|
||||||
|
|
||||||
|
@ -665,11 +665,11 @@ class Item extends BaseObject
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strpos($sql_commands, "`item-activity`.") !== false) {
|
if (strpos($sql_commands, "`item-activity`.") !== false) {
|
||||||
$joins .= " LEFT JOIN `item-activity` ON `item-activity`.`id` = `item`.`iaid`";
|
$joins .= " LEFT JOIN `item-activity` ON `item-activity`.`uri-id` = `item`.`uri-id`";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strpos($sql_commands, "`item-content`.") !== false) {
|
if (strpos($sql_commands, "`item-content`.") !== false) {
|
||||||
$joins .= " LEFT JOIN `item-content` ON `item-content`.`id` = `item`.`icid`";
|
$joins .= " LEFT JOIN `item-content` ON `item-content`.`uri-id` = `item`.`uri-id`";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strpos($sql_commands, "`item-delivery-data`.") !== false) {
|
if (strpos($sql_commands, "`item-delivery-data`.") !== false) {
|
||||||
|
|
131
src/Model/Register.php
Normal file
131
src/Model/Register.php
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file src/Model/Register.php
|
||||||
|
*/
|
||||||
|
namespace Friendica\Model;
|
||||||
|
|
||||||
|
use Friendica\Database\DBA;
|
||||||
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class interacting with the register database table
|
||||||
|
*
|
||||||
|
* @author Hypolite Petovan <mrpetovan@gmail.com>
|
||||||
|
*/
|
||||||
|
class Register
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Return the list of pending registrations
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getPending()
|
||||||
|
{
|
||||||
|
$stmt = DBA::p(
|
||||||
|
"SELECT `register`.*, `contact`.`name`, `user`.`email`
|
||||||
|
FROM `register`
|
||||||
|
INNER JOIN `contact` ON `register`.`uid` = `contact`.`uid`
|
||||||
|
INNER JOIN `user` ON `register`.`uid` = `user`.`uid`"
|
||||||
|
);
|
||||||
|
|
||||||
|
return DBA::toArray($stmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the pending registration count
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function getPendingCount()
|
||||||
|
{
|
||||||
|
$register = DBA::fetchFirst(
|
||||||
|
"SELECT COUNT(*) AS `count`
|
||||||
|
FROM `register`
|
||||||
|
INNER JOIN `contact` ON `register`.`uid` = `contact`.`uid` AND `contact`.`self`"
|
||||||
|
);
|
||||||
|
|
||||||
|
return $register['count'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the register record associated with the provided hash
|
||||||
|
*
|
||||||
|
* @param string $hash
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getByHash($hash)
|
||||||
|
{
|
||||||
|
return DBA::selectFirst('register', [], ['hash' => $hash]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if a register record exists with the provided hash
|
||||||
|
*
|
||||||
|
* @param string $hash
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function existsByHash($hash)
|
||||||
|
{
|
||||||
|
return DBA::exists('register', ['hash' => $hash]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a register record for an invitation and returns the auto-generated code for it
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function createForInvitation()
|
||||||
|
{
|
||||||
|
$code = autoname(8) . srand(1000, 9999);
|
||||||
|
|
||||||
|
$fields = [
|
||||||
|
'hash' => $code,
|
||||||
|
'created' => DateTimeFormat::utcNow()
|
||||||
|
];
|
||||||
|
|
||||||
|
DBA::insert('register', $fields);
|
||||||
|
|
||||||
|
return $code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a register record for approval and returns the success of the database insert
|
||||||
|
* Checks for the existence of the provided user id
|
||||||
|
*
|
||||||
|
* @param integer $uid The ID of the user needing approval
|
||||||
|
* @param string $language The registration language
|
||||||
|
* @param string $note An additional message from the user
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function createForApproval($uid, $language, $note = '')
|
||||||
|
{
|
||||||
|
$hash = random_string();
|
||||||
|
|
||||||
|
if (!User::exists($uid)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fields = [
|
||||||
|
'hash' => $hash,
|
||||||
|
'created' => DateTimeFormat::utcNow(),
|
||||||
|
'uid' => $uid,
|
||||||
|
'password' => '', // Obsolete, slated for deletion
|
||||||
|
'language' => $language,
|
||||||
|
'note' => $note
|
||||||
|
];
|
||||||
|
|
||||||
|
return DBA::insert('register', $fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a register record by the provided hash and returns the success of the database deletion
|
||||||
|
*
|
||||||
|
* @param string $hash
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function deleteByHash($hash)
|
||||||
|
{
|
||||||
|
return DBA::delete('register', ['hash' => $hash]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,9 +32,29 @@ require_once 'include/text.php';
|
||||||
class User
|
class User
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @brief Returns the user id of a given profile url
|
* Returns true if a user record exists with the provided id
|
||||||
*
|
*
|
||||||
* @param string $profile
|
* @param integer $uid
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function exists($uid)
|
||||||
|
{
|
||||||
|
return DBA::exists('user', ['uid' => $uid]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param integer $uid
|
||||||
|
* @return array|boolean User record if it exists, false otherwise
|
||||||
|
*/
|
||||||
|
public static function getById($uid)
|
||||||
|
{
|
||||||
|
return DBA::selectFirst('user', [], ['uid' => $uid]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the user id of a given profile URL
|
||||||
|
*
|
||||||
|
* @param string $url
|
||||||
*
|
*
|
||||||
* @return integer user id
|
* @return integer user id
|
||||||
*/
|
*/
|
||||||
|
@ -401,7 +421,7 @@ class User
|
||||||
throw new Exception(L10n::t('An invitation is required.'));
|
throw new Exception(L10n::t('An invitation is required.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DBA::exists('register', ['hash' => $invite_id])) {
|
if (!Register::existsByHash($invite_id)) {
|
||||||
throw new Exception(L10n::t('Invitation could not be verified.'));
|
throw new Exception(L10n::t('Invitation could not be verified.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -644,27 +664,36 @@ class User
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Sends pending registration confiŕmation email
|
* @brief Sends pending registration confirmation email
|
||||||
*
|
*
|
||||||
* @param string $email
|
* @param array $user User record array
|
||||||
* @param string $sitename
|
* @param string $sitename
|
||||||
* @param string $username
|
* @param string $siteurl
|
||||||
|
* @param string $password Plaintext password
|
||||||
* @return NULL|boolean from notification() and email() inherited
|
* @return NULL|boolean from notification() and email() inherited
|
||||||
*/
|
*/
|
||||||
public static function sendRegisterPendingEmail($email, $sitename, $username)
|
public static function sendRegisterPendingEmail($user, $sitename, $siteurl, $password)
|
||||||
{
|
{
|
||||||
$body = deindent(L10n::t('
|
$body = deindent(L10n::t('
|
||||||
Dear %1$s,
|
Dear %1$s,
|
||||||
Thank you for registering at %2$s. Your account is pending for approval by the administrator.
|
Thank you for registering at %2$s. Your account is pending for approval by the administrator.
|
||||||
'));
|
|
||||||
|
|
||||||
$body = sprintf($body, $username, $sitename);
|
Your login details are as follows:
|
||||||
|
|
||||||
|
Site Location: %3$s
|
||||||
|
Login Name: %4$s
|
||||||
|
Password: %5$s
|
||||||
|
',
|
||||||
|
$body, $user['username'], $sitename, $siteurl, $user['nickname'], $password
|
||||||
|
));
|
||||||
|
|
||||||
return notification([
|
return notification([
|
||||||
'type' => SYSTEM_EMAIL,
|
'type' => SYSTEM_EMAIL,
|
||||||
'to_email' => $email,
|
'uid' => $user['uid'],
|
||||||
|
'to_email' => $user['email'],
|
||||||
'subject' => L10n::t('Registration at %s', $sitename),
|
'subject' => L10n::t('Registration at %s', $sitename),
|
||||||
'body' => $body]);
|
'body' => $body
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -672,19 +701,20 @@ class User
|
||||||
*
|
*
|
||||||
* It's here as a function because the mail is sent from different parts
|
* It's here as a function because the mail is sent from different parts
|
||||||
*
|
*
|
||||||
* @param string $email
|
* @param array $user User record array
|
||||||
* @param string $sitename
|
* @param string $sitename
|
||||||
* @param string $siteurl
|
* @param string $siteurl
|
||||||
* @param string $username
|
* @param string $password Plaintext password
|
||||||
* @param string $password
|
|
||||||
* @return NULL|boolean from notification() and email() inherited
|
* @return NULL|boolean from notification() and email() inherited
|
||||||
*/
|
*/
|
||||||
public static function sendRegisterOpenEmail($email, $sitename, $siteurl, $username, $password, $user)
|
public static function sendRegisterOpenEmail($user, $sitename, $siteurl, $password)
|
||||||
{
|
{
|
||||||
$preamble = deindent(L10n::t('
|
$preamble = deindent(L10n::t('
|
||||||
Dear %1$s,
|
Dear %1$s,
|
||||||
Thank you for registering at %2$s. Your account has been created.
|
Thank you for registering at %2$s. Your account has been created.
|
||||||
'));
|
',
|
||||||
|
$preamble, $user['username'], $sitename
|
||||||
|
));
|
||||||
$body = deindent(L10n::t('
|
$body = deindent(L10n::t('
|
||||||
The login details are as follows:
|
The login details are as follows:
|
||||||
|
|
||||||
|
@ -711,19 +741,19 @@ class User
|
||||||
|
|
||||||
If you ever want to delete your account, you can do so at %3$s/removeme
|
If you ever want to delete your account, you can do so at %3$s/removeme
|
||||||
|
|
||||||
Thank you and welcome to %2$s.'));
|
Thank you and welcome to %2$s.',
|
||||||
|
$body, $user['email'], $sitename, $siteurl, $user['username'], $password
|
||||||
$preamble = sprintf($preamble, $username, $sitename);
|
));
|
||||||
$body = sprintf($body, $email, $sitename, $siteurl, $username, $password);
|
|
||||||
|
|
||||||
return notification([
|
return notification([
|
||||||
'uid' => $user['uid'],
|
'uid' => $user['uid'],
|
||||||
'language' => $user['language'],
|
'language' => $user['language'],
|
||||||
'type' => SYSTEM_EMAIL,
|
'type' => SYSTEM_EMAIL,
|
||||||
'to_email' => $email,
|
'to_email' => $user['email'],
|
||||||
'subject' => L10n::t('Registration details for %s', $sitename),
|
'subject' => L10n::t('Registration details for %s', $sitename),
|
||||||
'preamble' => $preamble,
|
'preamble' => $preamble,
|
||||||
'body' => $body]);
|
'body' => $body
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -760,7 +790,7 @@ class User
|
||||||
if ($uid == local_user()) {
|
if ($uid == local_user()) {
|
||||||
unset($_SESSION['authenticated']);
|
unset($_SESSION['authenticated']);
|
||||||
unset($_SESSION['uid']);
|
unset($_SESSION['uid']);
|
||||||
goaway(System::baseUrl());
|
goaway();;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -461,7 +461,7 @@ class Receiver
|
||||||
|
|
||||||
logger('Switch contact ' . $cid . ' (' . $profile['url'] . ') for user ' . $uid . ' to ActivityPub');
|
logger('Switch contact ' . $cid . ' (' . $profile['url'] . ') for user ' . $uid . ' to ActivityPub');
|
||||||
|
|
||||||
$photo = $profile['photo'];
|
$photo = defaults($profile, 'photo', null);
|
||||||
unset($profile['photo']);
|
unset($profile['photo']);
|
||||||
unset($profile['baseurl']);
|
unset($profile['baseurl']);
|
||||||
|
|
||||||
|
|
|
@ -949,6 +949,7 @@ class Diaspora
|
||||||
$person = DBA::selectFirst('fcontact', [], ['network' => Protocol::DIASPORA, 'addr' => $handle]);
|
$person = DBA::selectFirst('fcontact', [], ['network' => Protocol::DIASPORA, 'addr' => $handle]);
|
||||||
if (!DBA::isResult($person)) {
|
if (!DBA::isResult($person)) {
|
||||||
$person = $r;
|
$person = $r;
|
||||||
|
$person['id'] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3429,12 +3430,9 @@ class Diaspora
|
||||||
/// @todo - establish "all day" events in Friendica
|
/// @todo - establish "all day" events in Friendica
|
||||||
$eventdata["all_day"] = "false";
|
$eventdata["all_day"] = "false";
|
||||||
|
|
||||||
if (!$event['adjust']) {
|
|
||||||
$eventdata['timezone'] = $user['timezone'];
|
|
||||||
|
|
||||||
if ($eventdata['timezone'] == "") {
|
|
||||||
$eventdata['timezone'] = 'UTC';
|
$eventdata['timezone'] = 'UTC';
|
||||||
}
|
if (!$event['adjust'] && $user['timezone']) {
|
||||||
|
$eventdata['timezone'] = $user['timezone'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($event['start']) {
|
if ($event['start']) {
|
||||||
|
|
|
@ -141,7 +141,7 @@ class ParseUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the file is too large then exit
|
// If the file is too large then exit
|
||||||
if ($curlResult->getInfo()['download_content_length'] > 1000000) {
|
if (defaults($curlResult->getInfo(), 'download_content_length', 0) > 1000000) {
|
||||||
return $siteinfo;
|
return $siteinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,13 +39,13 @@ class Delivery extends BaseObject
|
||||||
$followup = false;
|
$followup = false;
|
||||||
$public_message = false;
|
$public_message = false;
|
||||||
|
|
||||||
|
$items = [];
|
||||||
if ($cmd == self::MAIL) {
|
if ($cmd == self::MAIL) {
|
||||||
$target_item = DBA::selectFirst('mail', [], ['id' => $item_id]);
|
$target_item = DBA::selectFirst('mail', [], ['id' => $item_id]);
|
||||||
if (!DBA::isResult($target_item)) {
|
if (!DBA::isResult($target_item)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$uid = $target_item['uid'];
|
$uid = $target_item['uid'];
|
||||||
$items = [];
|
|
||||||
} elseif ($cmd == self::SUGGESTION) {
|
} elseif ($cmd == self::SUGGESTION) {
|
||||||
$target_item = DBA::selectFirst('fsuggest', [], ['id' => $item_id]);
|
$target_item = DBA::selectFirst('fsuggest', [], ['id' => $item_id]);
|
||||||
if (!DBA::isResult($target_item)) {
|
if (!DBA::isResult($target_item)) {
|
||||||
|
@ -65,7 +65,6 @@ class Delivery extends BaseObject
|
||||||
$params = ['order' => ['id']];
|
$params = ['order' => ['id']];
|
||||||
$itemdata = Item::select([], $condition, $params);
|
$itemdata = Item::select([], $condition, $params);
|
||||||
|
|
||||||
$items = [];
|
|
||||||
while ($item = Item::fetch($itemdata)) {
|
while ($item = Item::fetch($itemdata)) {
|
||||||
if ($item['id'] == $parent_id) {
|
if ($item['id'] == $parent_id) {
|
||||||
$parent = $item;
|
$parent = $item;
|
||||||
|
|
|
@ -246,3 +246,12 @@ function update_1278() {
|
||||||
|
|
||||||
return UPDATE_SUCCESS;
|
return UPDATE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function update_1288() {
|
||||||
|
// Updates missing `uri-id` values
|
||||||
|
|
||||||
|
DBA::e("UPDATE `item-activity` INNER JOIN `item` ON `item`.`iaid` = `item-activity`.`id` SET `item-activity`.`uri-id` = `item`.`uri-id` WHERE `item-activity`.`uri-id` IS NULL OR `item-activity`.`uri-id` = 0");
|
||||||
|
DBA::e("UPDATE `item-content` INNER JOIN `item` ON `item`.`icid` = `item-content`.`id` SET `item-content`.`uri-id` = `item`.`uri-id` WHERE `item-content`.`uri-id` IS NULL OR `item-content`.`uri-id` = 0");
|
||||||
|
|
||||||
|
return UPDATE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
|
|
||||||
<div id="contact-edit-nav-wrapper" >
|
<div id="contact-edit-nav-wrapper" >
|
||||||
<form action="contacts/{{$contact_id}}" method="post" >
|
<form action="contact/{{$contact_id}}" method="post" >
|
||||||
<div id="contact-edit-links">
|
<div id="contact-edit-links">
|
||||||
<div id="contact-edit-status-wrapper">
|
<div id="contact-edit-status-wrapper">
|
||||||
<span id="contact-edit-contact-status">{{$contact_status}}</span>
|
<span id="contact-edit-contact-status">{{$contact_status}}</span>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
|
|
||||||
<div id="contact-edit-content-wrapper">
|
<div id="contact-edit-content-wrapper">
|
||||||
<form action="contacts/{{$contact_id}}" method="post" >
|
<form action="contact/{{$contact_id}}" method="post" >
|
||||||
|
|
||||||
{{* This is the Action menu where contact related actions like 'ignore', 'hide' can be performed *}}
|
{{* This is the Action menu where contact related actions like 'ignore', 'hide' can be performed *}}
|
||||||
<ul id="contact-edit-actions" class="nav nav-pills preferences">
|
<ul id="contact-edit-actions" class="nav nav-pills preferences">
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
|
|
||||||
<div id="contact-edit-nav-wrapper" >
|
<div id="contact-edit-nav-wrapper" >
|
||||||
<form action="contacts/{{$contact_id}}" method="post" >
|
<form action="contact/{{$contact_id}}" method="post" >
|
||||||
<div id="contact-edit-links">
|
<div id="contact-edit-links">
|
||||||
<div id="contact-edit-status-wrapper">
|
<div id="contact-edit-status-wrapper">
|
||||||
<span id="contact-edit-contact-status">{{$contact_status}}</span>
|
<span id="contact-edit-contact-status">{{$contact_status}}</span>
|
||||||
|
|
Loading…
Reference in a new issue