Merge branch '0.8.x' of git@gitorious.org:+laconica-developers/laconica/dev into 0.8.x
This commit is contained in:
commit
721ba6c88f
10
README
10
README
|
@ -906,6 +906,9 @@ sslserver: use an alternate server name for SSL URLs, like
|
||||||
parameters correctly so that both the SSL server and the
|
parameters correctly so that both the SSL server and the
|
||||||
"normal" server can access the session cookie and
|
"normal" server can access the session cookie and
|
||||||
preferably other cookies as well.
|
preferably other cookies as well.
|
||||||
|
shorturllength: Length of URL at which URLs in a message exceeding 140
|
||||||
|
characters will be sent to the user's chosen
|
||||||
|
shortening service.
|
||||||
|
|
||||||
db
|
db
|
||||||
--
|
--
|
||||||
|
@ -1081,6 +1084,13 @@ debug: if turned on, this will make the XMPP library blurt out all of
|
||||||
public: an array of JIDs to send _all_ notices to. This is useful for
|
public: an array of JIDs to send _all_ notices to. This is useful for
|
||||||
participating in third-party search and archiving services.
|
participating in third-party search and archiving services.
|
||||||
|
|
||||||
|
invite
|
||||||
|
------
|
||||||
|
|
||||||
|
For configuring invites.
|
||||||
|
|
||||||
|
enabled: Whether to allow users to send invites. Default true.
|
||||||
|
|
||||||
tag
|
tag
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ class DisfavorAction extends Action
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$fave = new Fave();
|
$fave = new Fave();
|
||||||
$fave->user_id = $this->id;
|
$fave->user_id = $user->id;
|
||||||
$fave->notice_id = $notice->id;
|
$fave->notice_id = $notice->id;
|
||||||
if (!$fave->find(true)) {
|
if (!$fave->find(true)) {
|
||||||
$this->clientError(_('This notice is not a favorite!'));
|
$this->clientError(_('This notice is not a favorite!'));
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
|
||||||
* @link http://laconi.ca/
|
* @link http://laconi.ca/
|
||||||
*
|
*
|
||||||
|
|
||||||
/*
|
|
||||||
* Laconica - a distributed open-source microblogging tool
|
* Laconica - a distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, Control Yourself, Inc.
|
* Copyright (C) 2008, 2009, Control Yourself, Inc.
|
||||||
*
|
*
|
||||||
|
|
|
@ -116,6 +116,7 @@ class groupRssAction extends Rss10Action
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$notices = array();
|
||||||
$notice = $group->getNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit);
|
$notice = $group->getNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit);
|
||||||
|
|
||||||
while ($notice->fetch()) {
|
while ($notice->fetch()) {
|
||||||
|
|
|
@ -115,6 +115,7 @@ class GroupsAction extends Action
|
||||||
$groups->orderBy('created DESC');
|
$groups->orderBy('created DESC');
|
||||||
$groups->limit($offset, $limit);
|
$groups->limit($offset, $limit);
|
||||||
|
|
||||||
|
$cnt = 0;
|
||||||
if ($groups->find()) {
|
if ($groups->find()) {
|
||||||
$gl = new GroupList($groups, null, $this);
|
$gl = new GroupList($groups, null, $this);
|
||||||
$cnt = $gl->show();
|
$cnt = $gl->show();
|
||||||
|
|
|
@ -35,7 +35,9 @@ class InviteAction extends CurrentUserDesignAction
|
||||||
function handle($args)
|
function handle($args)
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
if (!common_logged_in()) {
|
if (!common_config('invite', 'enabled')) {
|
||||||
|
$this->clientError(_('Invites have been disabled.'));
|
||||||
|
} else if (!common_logged_in()) {
|
||||||
$this->clientError(sprintf(_('You must be logged in to invite other users to use %s'),
|
$this->clientError(sprintf(_('You must be logged in to invite other users to use %s'),
|
||||||
common_config('site', 'name')));
|
common_config('site', 'name')));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -67,12 +67,17 @@ class NoticesearchrssAction extends Rss10Action
|
||||||
|
|
||||||
if (!$limit) $limit = 20;
|
if (!$limit) $limit = 20;
|
||||||
$search_engine->limit(0, $limit, true);
|
$search_engine->limit(0, $limit, true);
|
||||||
$search_engine->query($q);
|
if (false === $search_engine->query($q)) {
|
||||||
$notice->find();
|
$cnt = 0;
|
||||||
|
} else {
|
||||||
|
$cnt = $notice->find();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($cnt > 0) {
|
||||||
while ($notice->fetch()) {
|
while ($notice->fetch()) {
|
||||||
$notices[] = clone($notice);
|
$notices[] = clone($notice);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $notices;
|
return $notices;
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,8 +182,10 @@ class PublicAction extends Action
|
||||||
$message .= _('Be the first to post!');
|
$message .= _('Be the first to post!');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
if (! (common_config('site','closed') || common_config('site','inviteonly'))) {
|
||||||
$message .= _('Why not [register an account](%%action.register%%) and be the first to post!');
|
$message .= _('Why not [register an account](%%action.register%%) and be the first to post!');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->elementStart('div', 'guide');
|
$this->elementStart('div', 'guide');
|
||||||
$this->raw(common_markup_to_html($message));
|
$this->raw(common_markup_to_html($message));
|
||||||
|
|
|
@ -165,11 +165,16 @@ class TwitapisearchatomAction extends TwitterapiAction
|
||||||
$search_engine->set_sort_mode('chron');
|
$search_engine->set_sort_mode('chron');
|
||||||
$search_engine->limit(($this->page - 1) * $this->rpp,
|
$search_engine->limit(($this->page - 1) * $this->rpp,
|
||||||
$this->rpp + 1, true);
|
$this->rpp + 1, true);
|
||||||
$search_engine->query($q);
|
if (false === $search_engine->query($q)) {
|
||||||
|
$this->cnt = 0;
|
||||||
|
} else {
|
||||||
$this->cnt = $notice->find();
|
$this->cnt = $notice->find();
|
||||||
|
}
|
||||||
|
|
||||||
$cnt = 0;
|
$cnt = 0;
|
||||||
|
$this->max_id = 0;
|
||||||
|
|
||||||
|
if ($this->cnt > 0) {
|
||||||
while ($notice->fetch()) {
|
while ($notice->fetch()) {
|
||||||
|
|
||||||
++$cnt;
|
++$cnt;
|
||||||
|
@ -184,6 +189,7 @@ class TwitapisearchatomAction extends TwitterapiAction
|
||||||
|
|
||||||
$notices[] = clone($notice);
|
$notices[] = clone($notice);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $notices;
|
return $notices;
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,8 +124,11 @@ class TwitapisearchjsonAction extends TwitterapiAction
|
||||||
$search_engine = $notice->getSearchEngine('identica_notices');
|
$search_engine = $notice->getSearchEngine('identica_notices');
|
||||||
$search_engine->set_sort_mode('chron');
|
$search_engine->set_sort_mode('chron');
|
||||||
$search_engine->limit(($this->page - 1) * $this->rpp, $this->rpp + 1, true);
|
$search_engine->limit(($this->page - 1) * $this->rpp, $this->rpp + 1, true);
|
||||||
$search_engine->query($q);
|
if (false === $search_engine->query($q)) {
|
||||||
|
$cnt = 0;
|
||||||
|
} else {
|
||||||
$cnt = $notice->find();
|
$cnt = $notice->find();
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: since_id, lang, geocode
|
// TODO: since_id, lang, geocode
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,9 @@ $config['sphinx']['port'] = 3312;
|
||||||
// $config['xmpp']['public'][] = 'someindexer@example.net';
|
// $config['xmpp']['public'][] = 'someindexer@example.net';
|
||||||
// $config['xmpp']['debug'] = false;
|
// $config['xmpp']['debug'] = false;
|
||||||
|
|
||||||
|
// Turn off invites
|
||||||
|
// $config['invite']['enabled'] = false;
|
||||||
|
|
||||||
// Default locale info
|
// Default locale info
|
||||||
// $config['site']['timezone'] = 'Pacific/Auckland';
|
// $config['site']['timezone'] = 'Pacific/Auckland';
|
||||||
// $config['site']['language'] = 'en_NZ';
|
// $config['site']['language'] = 'en_NZ';
|
||||||
|
|
|
@ -72,6 +72,12 @@ function checkPrereqs()
|
||||||
<?
|
<?
|
||||||
$pass = false;
|
$pass = false;
|
||||||
}
|
}
|
||||||
|
if (!is_writable(INSTALLDIR.'/background/')) {
|
||||||
|
?><p class="error">Cannot write background directory: <code><?php echo INSTALLDIR; ?>/background/</code></p>
|
||||||
|
<p>On your server, try this command: <code>chmod a+w <?php echo INSTALLDIR; ?>/background/</code></p>
|
||||||
|
<?
|
||||||
|
$pass = false;
|
||||||
|
}
|
||||||
|
|
||||||
return $pass;
|
return $pass;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ class ShortUrlApi
|
||||||
}
|
}
|
||||||
|
|
||||||
private function is_long($url) {
|
private function is_long($url) {
|
||||||
return strlen($url) >= $this->long_limit;
|
return strlen($url) >= common_config('site', 'shorturllength');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function http_post($data) {
|
protected function http_post($data) {
|
||||||
|
|
|
@ -421,11 +421,13 @@ class Action extends HTMLOutputter // lawsuit
|
||||||
$this->menuItem(common_local_url('smssettings'),
|
$this->menuItem(common_local_url('smssettings'),
|
||||||
_('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect');
|
_('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect');
|
||||||
}
|
}
|
||||||
|
if (common_config('invite', 'enabled')) {
|
||||||
$this->menuItem(common_local_url('invite'),
|
$this->menuItem(common_local_url('invite'),
|
||||||
_('Invite'),
|
_('Invite'),
|
||||||
sprintf(_('Invite friends and colleagues to join you on %s'),
|
sprintf(_('Invite friends and colleagues to join you on %s'),
|
||||||
common_config('site', 'name')),
|
common_config('site', 'name')),
|
||||||
false, 'nav_invitecontact');
|
false, 'nav_invitecontact');
|
||||||
|
}
|
||||||
$this->menuItem(common_local_url('logout'),
|
$this->menuItem(common_local_url('logout'),
|
||||||
_('Logout'), _('Logout from the site'), false, 'nav_logout');
|
_('Logout'), _('Logout from the site'), false, 'nav_logout');
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,6 +120,7 @@ $config =
|
||||||
'private' => false,
|
'private' => false,
|
||||||
'ssl' => 'never',
|
'ssl' => 'never',
|
||||||
'sslserver' => null,
|
'sslserver' => null,
|
||||||
|
'shorturllength' => 30,
|
||||||
'dupelimit' => 60), # default for same person saying the same thing
|
'dupelimit' => 60), # default for same person saying the same thing
|
||||||
'syslog' =>
|
'syslog' =>
|
||||||
array('appname' => 'laconica', # for syslog
|
array('appname' => 'laconica', # for syslog
|
||||||
|
@ -175,6 +176,8 @@ $config =
|
||||||
'host' => null, # only set if != server
|
'host' => null, # only set if != server
|
||||||
'debug' => false, # print extra debug info
|
'debug' => false, # print extra debug info
|
||||||
'public' => array()), # JIDs of users who want to receive the public stream
|
'public' => array()), # JIDs of users who want to receive the public stream
|
||||||
|
'invite' =>
|
||||||
|
array('enabled' => true),
|
||||||
'sphinx' =>
|
'sphinx' =>
|
||||||
array('enabled' => false,
|
array('enabled' => false,
|
||||||
'server' => 'localhost',
|
'server' => 'localhost',
|
||||||
|
|
|
@ -213,12 +213,14 @@ class FacebookAction extends Action
|
||||||
array('href' => 'index.php', 'title' => _('Home')), _('Home'));
|
array('href' => 'index.php', 'title' => _('Home')), _('Home'));
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
|
|
||||||
|
if (common_config('invite', 'enabled')) {
|
||||||
$this->elementStart('li',
|
$this->elementStart('li',
|
||||||
array('class' =>
|
array('class' =>
|
||||||
($this->action == 'facebookinvite') ? 'current' : 'facebook_invite'));
|
($this->action == 'facebookinvite') ? 'current' : 'facebook_invite'));
|
||||||
$this->element('a',
|
$this->element('a',
|
||||||
array('href' => 'invite.php', 'title' => _('Invite')), _('Invite'));
|
array('href' => 'invite.php', 'title' => _('Invite')), _('Invite'));
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
|
}
|
||||||
|
|
||||||
$this->elementStart('li',
|
$this->elementStart('li',
|
||||||
array('class' =>
|
array('class' =>
|
||||||
|
|
|
@ -130,30 +130,46 @@ class GroupEditForm extends Form
|
||||||
|
|
||||||
function formData()
|
function formData()
|
||||||
{
|
{
|
||||||
|
if ($this->group) {
|
||||||
|
$id = $this->group->id;
|
||||||
|
$nickname = $this->group->nickname;
|
||||||
|
$fullname = $this->group->fullname;
|
||||||
|
$homepage = $this->group->homepage;
|
||||||
|
$description = $this->group->description;
|
||||||
|
$location = $this->group->location;
|
||||||
|
} else {
|
||||||
|
$id = '';
|
||||||
|
$nickname = '';
|
||||||
|
$fullname = '';
|
||||||
|
$homepage = '';
|
||||||
|
$description = '';
|
||||||
|
$location = '';
|
||||||
|
}
|
||||||
|
|
||||||
$this->out->elementStart('ul', 'form_data');
|
$this->out->elementStart('ul', 'form_data');
|
||||||
$this->out->elementStart('li');
|
$this->out->elementStart('li');
|
||||||
$this->out->hidden('groupid', $this->group->id);
|
$this->out->hidden('groupid', $id);
|
||||||
$this->out->input('nickname', _('Nickname'),
|
$this->out->input('nickname', _('Nickname'),
|
||||||
($this->out->arg('nickname')) ? $this->out->arg('nickname') : $this->group->nickname,
|
($this->out->arg('nickname')) ? $this->out->arg('nickname') : $nickname,
|
||||||
_('1-64 lowercase letters or numbers, no punctuation or spaces'));
|
_('1-64 lowercase letters or numbers, no punctuation or spaces'));
|
||||||
$this->out->elementEnd('li');
|
$this->out->elementEnd('li');
|
||||||
$this->out->elementStart('li');
|
$this->out->elementStart('li');
|
||||||
$this->out->input('fullname', _('Full name'),
|
$this->out->input('fullname', _('Full name'),
|
||||||
($this->out->arg('fullname')) ? $this->out->arg('fullname') : $this->group->fullname);
|
($this->out->arg('fullname')) ? $this->out->arg('fullname') : $fullname);
|
||||||
$this->out->elementEnd('li');
|
$this->out->elementEnd('li');
|
||||||
$this->out->elementStart('li');
|
$this->out->elementStart('li');
|
||||||
$this->out->input('homepage', _('Homepage'),
|
$this->out->input('homepage', _('Homepage'),
|
||||||
($this->out->arg('homepage')) ? $this->out->arg('homepage') : $this->group->homepage,
|
($this->out->arg('homepage')) ? $this->out->arg('homepage') : $homepage,
|
||||||
_('URL of the homepage or blog of the group or topic'));
|
_('URL of the homepage or blog of the group or topic'));
|
||||||
$this->out->elementEnd('li');
|
$this->out->elementEnd('li');
|
||||||
$this->out->elementStart('li');
|
$this->out->elementStart('li');
|
||||||
$this->out->textarea('description', _('Description'),
|
$this->out->textarea('description', _('Description'),
|
||||||
($this->out->arg('description')) ? $this->out->arg('description') : $this->group->description,
|
($this->out->arg('description')) ? $this->out->arg('description') : $description,
|
||||||
_('Describe the group or topic in 140 chars'));
|
_('Describe the group or topic in 140 chars'));
|
||||||
$this->out->elementEnd('li');
|
$this->out->elementEnd('li');
|
||||||
$this->out->elementStart('li');
|
$this->out->elementStart('li');
|
||||||
$this->out->input('location', _('Location'),
|
$this->out->input('location', _('Location'),
|
||||||
($this->out->arg('location')) ? $this->out->arg('location') : $this->group->location,
|
($this->out->arg('location')) ? $this->out->arg('location') : $location,
|
||||||
_('Location for the group, if any, like "City, State (or Region), Country"'));
|
_('Location for the group, if any, like "City, State (or Region), Country"'));
|
||||||
$this->out->elementEnd('li');
|
$this->out->elementEnd('li');
|
||||||
if (common_config('group', 'maxaliases') > 0) {
|
if (common_config('group', 'maxaliases') > 0) {
|
||||||
|
|
|
@ -89,6 +89,7 @@ class JSONSearchResultsList
|
||||||
function show()
|
function show()
|
||||||
{
|
{
|
||||||
$cnt = 0;
|
$cnt = 0;
|
||||||
|
$this->max_id = 0;
|
||||||
|
|
||||||
$time_start = microtime(true);
|
$time_start = microtime(true);
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,7 @@ function get_all_languages() {
|
||||||
'el' => array('q' => 0.1, 'lang' => 'el', 'name' => 'Greek', 'direction' => 'ltr'),
|
'el' => array('q' => 0.1, 'lang' => 'el', 'name' => 'Greek', 'direction' => 'ltr'),
|
||||||
'en-us' => array('q' => 1, 'lang' => 'en_US', 'name' => 'English (US)', 'direction' => 'ltr'),
|
'en-us' => array('q' => 1, 'lang' => 'en_US', 'name' => 'English (US)', 'direction' => 'ltr'),
|
||||||
'en-gb' => array('q' => 1, 'lang' => 'en_GB', 'name' => 'English (British)', 'direction' => 'ltr'),
|
'en-gb' => array('q' => 1, 'lang' => 'en_GB', 'name' => 'English (British)', 'direction' => 'ltr'),
|
||||||
'en' => array('q' => 1, 'lang' => 'en', 'name' => 'English', 'direction' => 'ltr'),
|
'en' => array('q' => 1, 'lang' => 'en_US', 'name' => 'English (US)', 'direction' => 'ltr'),
|
||||||
'es' => array('q' => 1, 'lang' => 'es', 'name' => 'Spanish', 'direction' => 'ltr'),
|
'es' => array('q' => 1, 'lang' => 'es', 'name' => 'Spanish', 'direction' => 'ltr'),
|
||||||
'fi' => array('q' => 1, 'lang' => 'fi', 'name' => 'Finnish', 'direction' => 'ltr'),
|
'fi' => array('q' => 1, 'lang' => 'fi', 'name' => 'Finnish', 'direction' => 'ltr'),
|
||||||
'fr-fr' => array('q' => 1, 'lang' => 'fr_FR', 'name' => 'French', 'direction' => 'ltr'),
|
'fr-fr' => array('q' => 1, 'lang' => 'fr_FR', 'name' => 'French', 'direction' => 'ltr'),
|
||||||
|
|
|
@ -100,7 +100,7 @@ class SubGroupNav extends Widget
|
||||||
$this->user->nickname),
|
$this->user->nickname),
|
||||||
$action == 'usergroups',
|
$action == 'usergroups',
|
||||||
'nav_usergroups');
|
'nav_usergroups');
|
||||||
if (!is_null($cur) && $this->user->id === $cur->id) {
|
if (common_config('invite', 'enabled') && !is_null($cur) && $this->user->id === $cur->id) {
|
||||||
$this->out->menuItem(common_local_url('invite'),
|
$this->out->menuItem(common_local_url('invite'),
|
||||||
_('Invite'),
|
_('Invite'),
|
||||||
sprintf(_('Invite friends and colleagues to join you on %s'),
|
sprintf(_('Invite friends and colleagues to join you on %s'),
|
||||||
|
|
|
@ -114,7 +114,7 @@ function common_check_user($nickname, $password)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$user = User::staticGet('nickname', $nickname);
|
$user = User::staticGet('nickname', $nickname);
|
||||||
if (is_null($user)) {
|
if (is_null($user) || $user === false) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
if (0 == strcmp(common_munge_password($password, $user->id),
|
if (0 == strcmp(common_munge_password($password, $user->id),
|
||||||
|
|
|
@ -10,13 +10,12 @@
|
||||||
#site_nav_global_primary #nav_fb {
|
#site_nav_global_primary #nav_fb {
|
||||||
position:relative;
|
position:relative;
|
||||||
margin-left:18px;
|
margin-left:18px;
|
||||||
margin-right:-7px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#nav_fb .fb_profile_pic_rendered img {
|
#nav_fb .fb_profile_pic_rendered img {
|
||||||
position:relative;
|
position:absolute;
|
||||||
top:3px;
|
top:-3px;
|
||||||
left:0;
|
left:-18px;
|
||||||
display:inline;
|
display:inline;
|
||||||
border:1px solid #3B5998;
|
border:1px solid #3B5998;
|
||||||
padding:1px;
|
padding:1px;
|
||||||
|
@ -25,7 +24,7 @@ padding:1px;
|
||||||
#nav_fb img {
|
#nav_fb img {
|
||||||
position:absolute;
|
position:absolute;
|
||||||
top:-13px;
|
top:-13px;
|
||||||
left:-11px;
|
left:-25px;
|
||||||
display:inline;
|
display:inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -273,11 +273,13 @@ class FBConnectPlugin extends Plugin
|
||||||
$action->menuItem(common_local_url('smssettings'),
|
$action->menuItem(common_local_url('smssettings'),
|
||||||
_('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect');
|
_('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect');
|
||||||
}
|
}
|
||||||
|
if (common_config('invite', 'enabled')) {
|
||||||
$action->menuItem(common_local_url('invite'),
|
$action->menuItem(common_local_url('invite'),
|
||||||
_('Invite'),
|
_('Invite'),
|
||||||
sprintf(_('Invite friends and colleagues to join you on %s'),
|
sprintf(_('Invite friends and colleagues to join you on %s'),
|
||||||
common_config('site', 'name')),
|
common_config('site', 'name')),
|
||||||
false, 'nav_invitecontact');
|
false, 'nav_invitecontact');
|
||||||
|
}
|
||||||
|
|
||||||
// Need to override the Logout link to make it do FB stuff
|
// Need to override the Logout link to make it do FB stuff
|
||||||
if (!empty($fbuid)) {
|
if (!empty($fbuid)) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user