Merge branch 'master' of git://github.com/friendica/friendica

This commit is contained in:
Alexander Kampmann 2012-03-07 12:06:20 +01:00
commit 4690d00141
59 changed files with 1272 additions and 720 deletions

View file

@ -9,7 +9,7 @@ require_once('include/nav.php');
require_once('include/cache.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '2.3.1272' );
define ( 'FRIENDICA_VERSION', '2.3.1273' );
define ( 'DFRN_PROTOCOL_VERSION', '2.22' );
define ( 'DB_UPDATE_VERSION', 1131 );

View file

@ -6,7 +6,9 @@ Account Basics
**Registration**
Not all Friendica sites allow open registration. If registration is allowed, you will see a "Register" link immediately below the login prompts on the site home page. Following this link will take you to the site Registration page.
Not all Friendica sites allow open registration. If registration is allowed, you will see a "Register" link immediately below the login prompts on the site home page. Following this link will take you to the site registration page. The strength of our network is that lots of different sites are all completely compatible with each other. If the site you're visting doesn't allow registration, or you think you might prefer another one, you can find a <a href ="http://dir.friendica.com/siteinfo">list of public servers here</a>, and find one that meets your needs.
If you'd like to have your own server, you can do that too. Visit <a href = "http://friendica.com/download">the Friendica website</a> to download the code with setup instructions. It's a very simple install process that anybody experienced in hosting websites, or with basic Linux experience can handle easily.
*OpenID*
@ -14,11 +16,11 @@ The first field on the Registration page is for an OpenID address. If you do not
*Your Full Name*
Please provide your full name as you would like it to be displayed on this system.
Please provide your full name **as you would like it to be displayed on this system**. Most people use their real name for this, but you're under no obligation to do so yourself.
*Email Address*
Please provide a valid email address. Your email address is **never** published. We need this to send you account information and your login details. You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the ability to completely disable these from your Settings page once you have logged in.
Please provide a valid email address. Your email address is **never** published. We need this to send you account information and your login details. You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the ability to completely disable these from your Settings page once you have logged in. This doesn't have to be your primary email address, but it does need to be a real email address. You can't get your initial password, or reset a lost password later without it. This is the only bit of personal information that has to be accurate.
*Nickname*
@ -28,12 +30,12 @@ A nickname is used to generate web addresses for many of your personal pages, an
*Directory Publishing*
The Registration form also allows you to choose whether or not to list your account in the online directory. This is like a "phone book" and you may choose to be unlisted. We recommend that you select 'Yes' so that other people (friends, family, etc.) will be able to find you. If you choose 'No', you will essentially be invisible and have few opportunities for interaction. Whichever you choose, this can be changed any time from your Settings page after you login.
The Registration form also allows you to choose whether or not to list your account in the online directory. This is like a "phone book" and you may choose to be unlisted. We recommend that you select 'Yes' so that other people (friends, family, etc.) will be able to find you. If you choose 'No', you will essentially be invisible and have few opportunities for interaction. Whichever you choose, this can be changed any time from your Settings page after you login.
*Register*
Once you have provided the necessary details, click the 'Register' button. An email will be sent to you providing your account login details. Some sites may require administrator approval before the registration is processed, and you will be alerted if this is the case. Please watch your email (including spam folders) for your registration approval.
Once you have provided the necessary details, click the 'Register' button. An email will be sent to you providing your account login details. Please watch your email (including spam folders) for your registration details and initial password.
@ -58,6 +60,11 @@ After your first login, please visit the 'Settings' page from the top menu bar a
A ['Tips for New Members'](newmember) link will show up on your home page for two weeks to provide some important Getting Started information.
**Retrieving Personal Data**
You can export a copy of your personal data in XML format from the "Export personal data" link at the top of your settings page.
**See Also**
* [Profiles](help/Profiles)
@ -66,4 +73,3 @@ A ['Tips for New Members'](newmember) link will show up on your home page for tw
* [Remove Account](help/Remove-Account)

View file

@ -4,18 +4,19 @@ Bugs and Issues
* [Home](help)
Please report any bugs/issues you encounter using our bug tracker at [[http://bugs.friendica.com]]
If your server has a support page, you should report any bugs/issues you encounter there first. Reporting to your support page before reporting to the developers makes their job easier, as they don't have to deal with bug reports that might not have anything to do with them, and that helps us get new features faster.
Try to provide as much information as you can about the bug (including the full text of any error messages or notices), and if possible your Friendica version.
If you're a technical user, or your site doesn't have a support page, you'll need to use the <a href = "http://bugs.friendica.com/">Bug Tracker</a>. Please perform a search to see if there's already an open bug that matches yours before submitting anything.
Your Friendica version may be found in newer releases by visiting http://YOURFRIENDICASITE/friendica
Try to provide as much information as you can about the bug, including the **full** text of any error messages or notices, and any steps required to replicate the problem in as much detail as possible. It's generally better to provide too much information than not enough.
For older versions, view the HTML source of your profile page. The Friendica version is in the HTML header, 5-10 lines from the top of the page.
<a href = "http://www.chiark.greenend.org.uk/~sgtatham/bugs.html">See this article</a> to learn more about submitting **good** bug reports.
For really old versions which don't have a version number in the HTML header - please upgrade. Your bug was probably fixed a long time ago.
**Bug Sponsorship**
If you find a bug, and it is caused by a problem in main branch (ie, is not specific to our site), you may sponsor it.
The bug/issue database allows you to sponsor issues. This provides an incentive for developers to work on your issue. This isn't necessary - we don't like bugs and will try to fix them. This has more importance for future development projects and feature requests.
Bug sponsorship works on the honour system. If you agree to pay $10 to fix a bug, when the fix has been checked in and verified you should send a paypal payment to the developer assigned to the bug. Don't ever think you can get away with not paying a developer for work performed. Some of these guys could hack into your credit card account if you make them mad.

View file

@ -5,7 +5,13 @@ Making Friends
Friendship in Friendica can take on a great many different meanings. But let's keep it simple, you want to be friends with somebody. How do you do it?
The first thing you can do is look at the Directory for somebody you would like to connect with. Visit their profile. Just beneath their profile picture will be the word 'Connect' (we're assuming this is an English language profile).
The easiest thing to do is to join the <a href = "http://kakste.com/profile/newhere">New Here</a> group. This group is especially for people new to the Friendica network. Simply connect to the group, post to the wall, and make new friends. You don't even have to like us - comment on a few of our posts, and other people will start to add you too.
The next thing you can do is look at the Directory. The directory is split up into two parts. If you click the directory button, you will be presented with a list of all members (who chose to be listed) on your server. You'll also see a link to the Global Directory. If you click through to the global directory, you will be presented with a list of everybody who chose to be listed across all instances of Friendica. You will also see a "Show Community Forums" link, which will direct you to Groups, Forums and Fanpages. You connect to people, groups and forums in the same way, except groups and forums will automatically accept your introduction request, whereas a human will approve you manually.
To connect with other Friendica user
Visit their profile. Just beneath their profile picture will be the word 'Connect' (we're assuming this is an English language profile).
Click that. It will take you to a "Connect" form.
@ -23,6 +29,7 @@ When you've submitted the connection page, it will take you back to your own sit
If you already know somebody's Identity Address, you can enter it in the "connect" box on your "Contacts" page. This will take you through a similar process.
**Alternate Networks**
You can also use your Identity Address or other people's Identity Addresses to become friends across networks. The list of possible networks is growing all the time. If you know (for instance) "bob" on identi.ca (a Status.Net site) you could put bob@identi.ca into your Contact page and become friends across networks. (Or you can put in the URL to Bob's identi.ca page if you wish). You can also be "partial" friends with somebody on Google Buzz by putting in their gmail address. Google Buzz does not yet support all the protocols we need for direct messaging, but you should be able to follow status updates from within Friendica. You can do the same for Twitter accounts and Diaspora accounts. In fact you can "follow" most anybody or any website that produces a syndication feed (RSS/Atom,etc.). If we can find an information stream and a name to attach to the contact, we'll try to connect with them.

View file

@ -5,9 +5,20 @@ Remove Account
We don't like to see people leave Friendica, but if you need to remove your account, you should visit the URL
http://friendica-site/removeme
http://sitename/removeme
with your web browser. You will need to be logged in at the time. (Replace "friendica-site" with the hostname of your Friendica server)
with your web browser. You will need to be logged in at the time.
You will be asked for your password to confirm the request. If this matches your stored password, your account will immediately be removed. Unlike some social networks we do **not** hold onto it for a grace period in case you change your mind. Your user details, your conversations, your photos, your friends - everything; will be removed immediately and you will be logged out.
When we expire posts we send notifications out to Friendica to remove the posts. Diaspora doesn't have a bulk delete so this step is skipped on that network - and hopefully it will be obvious that deletion doesn't work on any other networks. If you manually delete a post or a range of posts we send individual delete notifications to Friendica and Diaspora for each deleted post.
Diaspora often loses these.
If you delete a post but somebody else has starred it, it is still removed. Your wishes take priority.
When you remove your account we physically remove all your posts and your profile and user data, etc. immediately.
In order to send out a bulk remove we would need to keep your account around to do this, as we would need to prove to your friends who it is that is submitting the request. We can't do this if you don't have an account.
Your friends may still see your posts if your account is gone, but there is no public place within Friendica where they can be viewed. If you had friends on Diaspora, your public posts may stick around and be visible to others from that network.

BIN
images/bug-x.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

BIN
images/smiley-beard.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 B

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 B

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 B

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 325 B

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 B

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 B

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

After

Width:  |  Height:  |  Size: 298 B

View file

@ -217,7 +217,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
if($update)
$return_url = $_SESSION['return_url'];
else
$return_url = $_SESSION['return_url'] = $a->cmd;
$return_url = $_SESSION['return_url'] = $a->query_string;
load_contact_links(local_user());

View file

@ -1595,6 +1595,14 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
if((activity_match($datarray['verb'],ACTIVITY_LIKE)) || (activity_match($datarray['verb'],ACTIVITY_DISLIKE))) {
$datarray['type'] = 'activity';
$datarray['gravity'] = GRAVITY_LIKE;
// only one like or dislike per person
$r = q("select id from item where uid = %d and `contact-id` = %d and verb ='%s' and deleted = 0 limit 1",
intval($datarray['uid']),
intval($datarray['contact-id']),
dbesc($datarray['verb'])
);
if($r && count($r))
continue;
}
if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) {
@ -2148,6 +2156,14 @@ function local_delivery($importer,$data) {
$datarray['type'] = 'activity';
$datarray['gravity'] = GRAVITY_LIKE;
$datarray['last-child'] = 0;
// only one like or dislike per person
$r = q("select id from item where uid = %d and `contact-id` = %d and verb ='%s' and deleted = 0 limit 1",
intval($datarray['uid']),
intval($datarray['contact-id']),
dbesc($datarray['verb'])
);
if($r && count($r))
continue;
}
if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) {
@ -2297,6 +2313,15 @@ function local_delivery($importer,$data) {
if(($datarray['verb'] == ACTIVITY_LIKE) || ($datarray['verb'] == ACTIVITY_DISLIKE)) {
$datarray['type'] = 'activity';
$datarray['gravity'] = GRAVITY_LIKE;
// only one like or dislike per person
$r = q("select id from item where uid = %d and `contact-id` = %d and verb ='%s' and deleted = 0 limit 1",
intval($datarray['uid']),
intval($datarray['contact-id']),
dbesc($datarray['verb'])
);
if($r && count($r))
continue;
}
if(($datarray['verb'] === ACTIVITY_TAG) && ($datarray['object-type'] === ACTIVITY_OBJ_TAGTERM)) {

View file

@ -122,6 +122,9 @@ function nav(&$a) {
}
$nav['messages'] = array('message', t('Messages'), "", t('Private mail'));
$nav['messages']['inbox'] = array('message', t('Inbox'), "", t('Inbox'));
$nav['messages']['outbox']= array('message/sent', t('Outbox'), "", t('Outbox'));
$nav['messages']['new'] = array('message/new', t('New Message'), "", t('New Message'));
if(is_array($a->identities) && count($a->identities) > 1) {
$nav['manage'] = array('manage', t('Manage'), "", t('Manage other pages'));

View file

@ -108,14 +108,18 @@ function can_write_wall(&$a,$owner) {
if(remote_user()) {
// user remembered decision and avoid a DB lookup for each and every display item
// use remembered decision and avoid a DB lookup for each and every display item
// DO NOT use this function if there are going to be multiple owners
// We have a contact-id for an authenticated remote user, this block determines if the contact
// belongs to this page owner, and has the necessary permissions to post content
if($verified === 2)
return true;
elseif($verified === 1)
return false;
else {
$r = q("SELECT `contact`.*, `user`.`page-flags` FROM `contact` LEFT JOIN `user` on `user`.`uid` = `contact`.`uid`
WHERE `contact`.`uid` = %d AND `contact`.`id` = %d AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `user`.`blockwall` = 0 AND `readonly` = 0 AND ( `contact`.`rel` IN ( %d , %d ) OR `user`.`page-flags` = %d ) LIMIT 1",
@ -125,6 +129,7 @@ function can_write_wall(&$a,$owner) {
intval(CONTACT_IS_FRIEND),
intval(PAGE_COMMUNITY)
);
if(count($r)) {
$verified = 2;
return true;
@ -197,7 +202,7 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
" AND ( allow_cid = '' OR allow_cid REGEXP '<%d>' )
AND ( deny_cid = '' OR NOT deny_cid REGEXP '<%d>' )
AND ( allow_gid = '' OR allow_gid REGEXP '%s' )
AND ( deny_gid = '' OR NOT deny_gid REGEXP '%s')
AND ( deny_gid = '' OR NOT deny_gid REGEXP '%s')
",
intval($remote_user),
intval($remote_user),
@ -207,4 +212,78 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
}
}
return $sql;
}
}
function item_permissions_sql($owner_id,$remote_verified = false,$groups = null) {
$local_user = local_user();
$remote_user = remote_user();
/**
* Construct permissions
*
* default permissions - anonymous user
*/
$sql = " AND allow_cid = ''
AND allow_gid = ''
AND deny_cid = ''
AND deny_gid = ''
AND private = 0
";
/**
* Profile owner - everything is visible
*/
if(($local_user) && ($local_user == $owner_id)) {
$sql = '';
}
/**
* Authenticated visitor. Unless pre-verified,
* check that the contact belongs to this $owner_id
* and load the groups the visitor belongs to.
* If pre-verified, the caller is expected to have already
* done this and passed the groups into this function.
*/
elseif($remote_user) {
if(! $remote_verified) {
$r = q("SELECT id FROM contact WHERE id = %d AND uid = %d AND blocked = 0 LIMIT 1",
intval($remote_user),
intval($owner_id)
);
if(count($r)) {
$remote_verified = true;
$groups = init_groups_visitor($remote_user);
}
}
if($remote_verified) {
$gs = '<<>>'; // should be impossible to match
if(is_array($groups) && count($groups)) {
foreach($groups as $g)
$gs .= '|<' . intval($g) . '>';
}
$sql = sprintf(
" AND ( private = 0 OR (( allow_cid = '' OR allow_cid REGEXP '<%d>' )
AND ( deny_cid = '' OR NOT deny_cid REGEXP '<%d>' )
AND ( allow_gid = '' OR allow_gid REGEXP '%s' )
AND ( deny_gid = '' OR NOT deny_gid REGEXP '%s')))
",
intval($remote_user),
intval($remote_user),
dbesc($gs),
dbesc($gs)
);
}
}
return $sql;
}

10
include/text.php Executable file → Normal file
View file

@ -737,7 +737,10 @@ function smilies($s, $sample = false) {
':headdesk',
'~friendika',
'~friendica',
'Diaspora*'
// 'Diaspora*'
':beard',
':whitebeard'
);
$icons = array(
@ -778,8 +781,9 @@ function smilies($s, $sample = false) {
'<img src="' . $a->get_baseurl() . '/images/smiley-bangheaddesk.gif" alt=":headdesk" />',
'<a href="http://project.friendika.com">~friendika <img src="' . $a->get_baseurl() . '/images/friendika-16.png" alt="~friendika" /></a>',
'<a href="http://friendica.com">~friendica <img src="' . $a->get_baseurl() . '/images/friendica-16.png" alt="~friendica" /></a>',
'<a href="http://diasporafoundation.org">Diaspora<img src="' . $a->get_baseurl() . '/images/diaspora.png" alt="Diaspora*" /></a>',
// '<a href="http://diasporafoundation.org">Diaspora<img src="' . $a->get_baseurl() . '/images/diaspora.png" alt="Diaspora*" /></a>',
'<img src="' . $a->get_baseurl() . '/images/smiley-beard.png" alt=":beard" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-whitebeard.png" alt=":whitebeard" />'
);
$params = array('texts' => $texts, 'icons' => $icons, 'string' => $s);

View file

@ -174,20 +174,44 @@ class b8_storage_frndc extends b8_storage_base
array_push($where, $token);
}
$where = 'token IN ("' . implode('", "', $where) . '")';
$where = 'term IN ("' . implode('", "', $where) . '")';
}
else {
$token = dbesc($token);
$where = 'token = "' . $token . '"';
$where = 'term = "' . $token . '"';
}
# ... and fetch the data
$result = q('
SELECT *
FROM ' . $this->config['table_name'] . '
WHERE ' . $where . ' AND uid = ' . $uid );
SELECT * FROM spam WHERE ' . $where . ' AND uid = ' . $uid );
$returned_tokens = array();
if(count($result)) {
foreach($result as $rr)
$returned_tokens[] = $rr['term'];
}
$to_create = array();
if(count($tokens) > 0) {
foreach($tokens as $token)
if(! in_array($token,$returned_tokens))
$to_create[] = str_tolower($token);
}
if(count($to_create)) {
$sql = '';
foreach($to_create as $term) {
if(strlen($sql))
$sql .= ',';
$sql .= sprintf("(term,datetime,uid) values('%s','%s',%d)",
dbesc(str_tolower($term))
dbesc(datetime_convert()),
intval($uid)
);
q("insert into spam " . $sql);
}
return $result;

View file

@ -145,9 +145,10 @@ function admin_page_summary(&$a) {
Array( t('Automatic Friend Account'), 0)
);
$users=0;
foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+=$u['count']; }
foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+= $u['count']; }
logger('accounts: ' . print_r($accounts,true));
$r = q("SELECT COUNT(id) as `count` FROM `register`");
$pending = $r[0]['count'];
@ -320,32 +321,32 @@ function admin_page_site(&$a) {
'$sitename' => array('sitename', t("Site name"), htmlentities($a->config['sitename'], ENT_QUOTES), ""),
'$banner' => array('banner', t("Banner/Logo"), $banner, ""),
'$language' => array('language', t("System language"), get_config('system','language'), "", $lang_choices),
'$theme' => array('theme', t("System theme"), get_config('system','theme'), "Default system theme (which may be over-ridden by user profiles)", $theme_choices),
'$theme' => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles"), $theme_choices),
'$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), "Maximum size in bytes of uploaded images. Default is 0, which means no limits."),
'$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
'$register_policy' => array('register_policy', t("Register policy"), $a->config['register_policy'], "", $register_choices),
'$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES), "Will be displayed prominently on the registration page."),
'$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES), t("Will be displayed prominently on the registration page.")),
'$abandon_days' => array('abandon_days', t('Accounts abandoned after x days'), get_config('system','account_abandon_days'), t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')),
'$allowed_sites' => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), "Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"),
'$allowed_email' => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), "Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"),
'$block_public' => array('block_public', t("Block public"), get_config('system','block_public'), "Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."),
'$force_publish' => array('publish_all', t("Force publish"), get_config('system','publish_all'), "Check to force all profiles on this site to be listed in the site directory."),
'$global_directory' => array('directory_submit_url', t("Global directory update URL"), get_config('system','directory_submit_url'), "URL to update the global directory. If this is not set, the global directory is completely unavailable to the application."),
'$allowed_sites' => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), 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' => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), 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")),
'$block_public' => array('block_public', t("Block public"), get_config('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently logged in.")),
'$force_publish' => array('publish_all', t("Force publish"), get_config('system','publish_all'), t("Check to force all profiles on this site to be listed in the site directory.")),
'$global_directory' => array('directory_submit_url', t("Global directory update URL"), get_config('system','directory_submit_url'), t("URL to update the global directory. If this is not set, the global directory is completely unavailable to the application.")),
'$no_multi_reg' => array('no_multi_reg', t("Block multiple registrations"), get_config('system','block_extended_register'), "Disallow users to register additional accounts for use as pages."),
'$no_openid' => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), "OpenID support for registration and logins."),
'$no_gravatar' => array('no_gravatar', t("Gravatar support"), !get_config('system','no_gravatar'), "Search new user's photo on Gravatar."),
'$no_regfullname' => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), "Force users to register with a space between firstname and lastname in Full name, as an antispam measure"),
'$no_utf' => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), "Use PHP UTF8 regular expressions"),
'$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), "Display a Community page showing all recent public postings on this site."),
'$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disable'), "Provide built-in OStatus \x28identi.ca, status.net, etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."),
'$diaspora_enabled' => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), "Provide built-in Diaspora network compatibility."),
'$dfrn_only' => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), "All contacts must use Friendica protocols. All other built-in communication protocols disabled."),
'$verifyssl' => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), "If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."),
'$no_multi_reg' => array('no_multi_reg', t("Block multiple registrations"), get_config('system','block_extended_register'), t("Disallow users to register additional accounts for use as pages.")),
'$no_openid' => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), t("OpenID support for registration and logins.")),
'$no_gravatar' => array('no_gravatar', t("Gravatar support"), !get_config('system','no_gravatar'), t("Search new user's photo on Gravatar.")),
'$no_regfullname' => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), t("Force users to register with a space between firstname and lastname in Full name, as an antispam measure")),
'$no_utf' => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), t("Use PHP UTF8 regular expressions")),
'$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), t("Display a Community page showing all recent public postings on this site.")),
'$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disable'), t("Provide built-in OStatus \x28identi.ca, status.net, etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")),
'$diaspora_enabled' => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), t("Provide built-in Diaspora network compatibility.")),
'$dfrn_only' => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), t("All contacts must use Friendica protocols. All other built-in communication protocols disabled.")),
'$verifyssl' => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), t("If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.")),
'$proxyuser' => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""),
'$proxy' => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""),
'$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), "Value is in seconds. Set to 0 for unlimited (not recommended)."),
'$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
));
@ -574,6 +575,8 @@ function admin_page_plugins(&$a){
'$status' => $status,
'$action' => $action,
'$info' => get_plugin_info($plugin),
'$str_author' => t('Author: '),
'$str_maintainer' => t('Maintainer: '),
'$admin_form' => $admin_form,
'$function' => 'plugins',
@ -747,7 +750,8 @@ function admin_page_themes(&$a){
'$info' => get_theme_info($theme),
'$function' => 'themes',
'$admin_form' => $admin_form,
'$str_author' => t('Author: '),
'$str_maintainer' => t('Maintainer: '),
'$readme' => $readme
));
}

View file

@ -85,7 +85,7 @@ function display_content(&$a) {
$o .= status_editor($a,$x,0,true);
$sql_extra = permissions_sql($a->profile['uid'],$remote_contact,$groups);
$sql_extra = item_permissions_sql($a->profile['uid'],$remote_contact,$groups);
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,

View file

@ -51,14 +51,14 @@ function network_init(&$a) {
function saved_searches($search) {
$srchurl = '/network'
. ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '')
. ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '')
. ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : '')
. ((x($_GET,'conv')) ? '?conv=' . $_GET['conv'] : '')
. ((x($_GET,'nets')) ? '?nets=' . $_GET['nets'] : '')
. ((x($_GET,'cmin')) ? '?cmin=' . $_GET['cmin'] : '')
. ((x($_GET,'cmax')) ? '?cmax=' . $_GET['cmax'] : '');
$srchurl = '/network?f='
. ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : '')
. ((x($_GET,'star')) ? '&star=' . $_GET['star'] : '')
. ((x($_GET,'bmark')) ? '&bmark=' . $_GET['bmark'] : '')
. ((x($_GET,'conv')) ? '&conv=' . $_GET['conv'] : '')
. ((x($_GET,'nets')) ? '&nets=' . $_GET['nets'] : '')
. ((x($_GET,'cmin')) ? '&cmin=' . $_GET['cmin'] : '')
. ((x($_GET,'cmax')) ? '&cmax=' . $_GET['cmax'] : '');
$o = '';
@ -164,33 +164,33 @@ function network_content(&$a, $update = 0) {
$tabs = array(
array(
'label' => t('Commented Order'),
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : ''),
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '?f=&cid=' . $_GET['cid'] : ''),
'sel'=>$all_active,
),
array(
'label' => t('Posted Order'),
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . '?order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
'sel'=>$postord_active,
),
array(
'label' => t('Personal'),
'url' => $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '&conv=1',
'url' => $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&conv=1',
'sel' => $conv_active,
),
array(
'label' => t('New'),
'url' => $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . '/new' . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : ''),
'url' => $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . '/new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
'sel' => $new_active,
),
array(
'label' => t('Starred'),
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '&star=1',
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&star=1',
'sel'=>$starred_active,
),
array(
'label' => t('Bookmarks'),
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '&bmark=1',
'url'=>$a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '') . '&bmark=1',
'sel'=>$bookmarked_active,
),
// array(
@ -256,8 +256,6 @@ function network_content(&$a, $update = 0) {
nav_set_selected('network');
$_SESSION['return_url'] = $a->query_string;
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
$x = array(

View file

@ -159,7 +159,7 @@ function profile_content(&$a, $update = 0) {
* Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups
*/
$sql_extra = permissions_sql($a->profile['profile_uid'],$remote_contact,$groups);
$sql_extra = item_permissions_sql($a->profile['profile_uid'],$remote_contact,$groups);
if($update) {

View file

@ -127,7 +127,7 @@ function search_content(&$a) {
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
LEFT JOIN `user` ON `user`.`uid` = `item`.`uid`
WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `user`.`hidewall` = 0 )
AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0 )
OR `item`.`uid` = %d )
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
$search_alg

View file

@ -16,10 +16,18 @@ function share_init(&$a) {
$o = '';
$o .= '&#x2672; <a href="' . $r[0]['author-link'] . '">' . $r[0]['author-name'] . '</a><br />';
if($r[0]['title'])
$o .= '<strong>' . $r[0]['title'] . '</strong><br />';
$o .= bbcode($r[0]['body'], true);
echo $o . '<br />';
if(local_user() && intval(get_pconfig(local_user(),'system','plaintext'))) {
$o .= '&#x2672; [url=' . $r[0]['author-link'] . ']' . $r[0]['author-name'] . '[/url]';
if($r[0]['title'])
$o .= '[b]' . $r[0]['title'] . '[/b]' . "\n";
$o .= $r[0]['body'] . "\n";
}
else {
$o .= '&#x2672; <a href="' . $r[0]['author-link'] . '">' . $r[0]['author-name'] . '</a><br />';
if($r[0]['title'])
$o .= '<strong>' . $r[0]['title'] . '</strong><br />';
$o .= bbcode($r[0]['body'], true) . '<br />';
}
echo $o;
killme();
}

File diff suppressed because it is too large Load diff

View file

@ -4,13 +4,18 @@
<p><span class='toggleplugin icon $status'></span> $info.name - $info.version : <a href="$baseurl/admin/$function/$plugin/?a=t">$action</a></p>
<p>$info.description</p>
<p class="author">
<p class="author">$str_author
{{ for $info.author as $a }}
{{ if $a.link }}<a href="$a.link">$a.name</a>{{ else }}$a.name{{ endif }},
{{ endfor }}
</p>
<p class="maintainer">$str_maintainer
{{ for $info.maintainer as $a }}
{{ if $a.link }}<a href="$a.link">$a.name</a>{{ else }}$a.name{{ endif }},
{{ endfor }}
</p>
{{ if $admin_form }}
<h3>$settings</h3>
<form method="post" action="$baseurl/admin/$function/$plugin/">

View file

@ -13,7 +13,7 @@
{{ for $accounts as $p }}
<dl>
<dt>$p.0</dt>
<dd>$p.1</dd>
<dd>{{ if $p.1 }}$p.1{{ else }}0{{ endif }}</dd>
</dl>
{{ endfor }}

View file

@ -5,7 +5,7 @@
<ul class="nets-ul">
<li class="tool {{ if $sel_all }}selected{{ endif }}"><a href="$base" class="nets-link nets-all">$all</a>
{{ for $nets as $net }}
<li class="tool {{ if $net.selected }}selected{{ endif }}"><a href="$base?nets=$net.ref" class="nets-link">$net.name</a></li>
<li class="tool {{ if $net.selected }}selected{{ endif }}"><a href="$base?f=&nets=$net.ref" class="nets-link">$net.name</a></li>
{{ endfor }}
</ul>

View file

@ -60,9 +60,9 @@ $suggestme
{{inc field_input.tpl with $field=$expire.days }}{{endinc}}
<div class="field input">
<span class="field_help"><a href="#advaced-expire-popup" id="advenced-expire" class='popupbox' title="$expire.advanced">$expire.label</a></span>
<span class="field_help"><a href="#advanced-expire-popup" id="advanced-expire" class='popupbox' title="$expire.advanced">$expire.label</a></span>
<div style="display: none;">
<div id="advaced-expire-popup" style="width:auto;height:auto;overflow:auto;">
<div id="advanced-expire-popup" style="width:auto;height:auto;overflow:auto;">
<h3>$expire.advanced</h3>
{{ inc field_yesno.tpl with $field=$expire.items }}{{endinc}}
{{ inc field_yesno.tpl with $field=$expire.notes }}{{endinc}}

View file

@ -24,7 +24,8 @@ nav #banner #logo-text a { color: #ffffff; }
.wall-item-content-wrapper { border: 1px solid #444444; }
.wall-item-tools { background-color: #444444; background-image: none;}
.comment-edit-wrapper{ background-color: #333333; }
.comment-wwedit-wrapper{ background-color: #333333; }
.comment-edit-preview{ color: #000000; }
.wall-item-content-wrapper.comment { background-color: #444444; border: 0px;}
.photo-top-album-name{ background-color: #333333; }
.photo-album-image-wrapper .caption { background-color: rgba(51, 51, 51, 0.8); color: #FFFFFF; }

View file

@ -4,6 +4,8 @@
* Name: Darkzero
* Version: 1.0
* Author: Fabio Communi <fabrix.xm@gmail.com>
* Maintainer: Fabio Communi <fabrix.xm@gmail.com>
* Maintainer: Mike Macgirvin <mike@macgirvin.com>
*/
$a->theme_info = array(

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 B

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
view/theme/diabook/icons/globe.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 875 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 849 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 B

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

View file

@ -1,6 +1,7 @@
<header>
{# $langselector version 0.01#}
<div id="site-location">$sitelocation</div>
<div id="banner">$banner</div>
</header>
@ -24,7 +25,7 @@
<span class="icon contacts">$nav.contacts.1</span></a>
<span id="intro-update" class="nav-notify"></span>
<ul id="nav-contacts-menu" class="menu-popup">
<li id="nav-contacts-see-intro"><a href="$nav.notifications.0">Kontaktanfragen</a><span id="intro-update" class="nav-notify"></span></li>
<li id="nav-contacts-see-intro"><a href="$nav.notifications.0">$nav.introductions.1</a><span id="intro-update" class="nav-notify"></span></li>
<li id="nav-contacts-all"><a href="contacts">$nav.contacts.1</a></li>
</ul>
</li>
@ -37,9 +38,9 @@
<span id="mail-update" class="nav-notify"></span>
<ul id="nav-messages-menu" class="menu-popup">
<li id="nav-messages-see-all"><a href="$nav.messages.0">$nav.messages.1</a></li>
<li id="nav-messages-inbox"><a href="$nav.messages.0">Eingang</a></li>
<li id="nav-messages-outbox"><a href="message/sent">Ausgang</a></li>
<li id="nav-messages-new"><a href="message/new">Neue Nachricht</a></li>
<li id="nav-messages-see-all"><a href="$nav.messages.inbox.0">$nav.messages.inbox.1</a></li>
<li id="nav-messages-see-all"><a href="$nav.messages.outbox.0">$nav.messages.outbox.1</a></li>
<li id="nav-messages-see-all"><a href="$nav.messages.new.0">$nav.messages.new.1</a></li>
</ul>
</li>
{{ endif }}
@ -53,7 +54,15 @@
<li class="empty">$emptynotifications</li>
</ul>
</li>
{{ endif }}
{{ endif }}
{{ if $nav.search}}
<li id="search-box">
<form method="get" action="$nav.search.0">
<input id="search-text" class="nav-menu-search" type="text" value="" name="search">
</form>
</li>
{{ endif }}
<li id="nav-site-linkmenu" class="nav-menu-icon"><a href="#" rel="#nav-site-menu"><span class="icon s22 gear">Site</span></a>
<ul id="nav-site-menu" class="menu-popup">
@ -61,7 +70,13 @@
{{ if $nav.help }} <li><a class="$nav.help.2" target="friendika-help" href="$nav.help.0" title="$nav.help.3" >$nav.help.1</a></li>{{ endif }}
<li><a class="$nav.search.2" href="$nav.search.0" title="$nav.search.3" >$nav.search.1</a></li>
<li ><a class="$nav.community.2" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a></li>
<li><a class="$nav.search.2" href="$nav.search.0" title="$nav.search.3" >$nav.search.1</a></li>
<li><a class="$nav.search.2" href="friendica" title="About" >About</a></li>
{{ if $nav.settings }}<li><a class="menu-sep $nav.settings.2" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a></li>{{ endif }}
{{ if $nav.admin }}<li><a class="$nav.admin.2" href="$nav.admin.0" title="$nav.admin.3" >$nav.admin.1</a></li>{{ endif }}
@ -121,14 +136,22 @@
</ul>
</nav>
<ul id="nav-notifications-template" style="display:none;" rel="template">
<li class="{4}"><a href="{0}"><img src="{1}" height="24" width="24" alt="" />{2} <span class="notif-when">{3}</span></a></li>
<li class="{4}"><a href="{0}"><img src="{1}">{2} <span class="notif-when">{3}</span></a></li>
</ul>
<ul id="nav-notifications-template" style="display:none;" rel="template">
<li><a href="{0}"><img src="{1}">{2} <span class="notif-when">{3}</span></a></li>
</ul>
{#
{{ if $nav.logout }}<a id="nav-logout-link" class="nav-link $nav.logout.2" href="$nav.logout.0" title="$nav.logout.3" >$nav.logout.1</a> {{ endif }}

View file

@ -91,6 +91,8 @@
background-image: url("../../../view/theme/diabook/icons/notify.png");}
.icon.messages {
background-image: url("../../../view/theme/diabook/icons/messages.png");}
.icon.community {
background-image: url("../../../view/theme/diabook/icons/community.png");}
.icon.drop { background-image: url("../../../view/theme/diabook/icons/drop.png");}
.icon.drophide { background-image: url("../../../view/theme/diabook/icons/drop.png");}
@ -106,6 +108,7 @@
.icon.lock { background-image: url("../../../view/theme/diabook/icons/lock.png");}
.icon.unlock { background-image: url("../../../view/theme/diabook/icons/unlock.png");}
.icon.isstar { background-image: url("../../../view/theme/diabook/icons/isstar.png");}
.icon.language { background-image: url("../../../view/theme/diabook/icons/language.png");}
.camera { background-image: url("../../../view/theme/diabook/icons/camera.png");
@ -170,7 +173,7 @@
.youtube { background-position: -130px -40px;}
/*.attach { background-position: -190px -40px;}*/
.language { background-position: -210px -40px;}
/*.language { background-position: -210px -40px;}*/
.icon.on { background-image: url("../../../view/theme/diabook/icons/toogle_on.png"); background-repeat: no-repeat;}
@ -526,7 +529,7 @@ header #banner a:hover {
color: #ffffff;
text-decoration: none;
outline: none;
vertical-align: bottom;
vertical-align: middle;
}
header #banner #logo-img {
height: 25px;
@ -610,12 +613,20 @@ nav #logo-text {
margin-top: 3px;
margin-right: 15px;
}
nav .nav-menu-search {
position: relative;
margin: 3px 17px;
margin-right: 0px;
height: 17px;
width: 205px;
}
nav .nav-menu-icon {
position: relative;
height: 22px;
padding: 5px;
margin: 0px 12px;
margin: 0px 7px;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-radius: 5px 5px 0 0;
border-radius: 5px 5px 0 0;
@ -846,7 +857,7 @@ aside {
/* background: #F1F1F1; */
}
aside .vcard .fn {
font-size: 16px;
font-size: 18px;
font-weight: bold;
margin-bottom: 5px;
}
@ -1181,6 +1192,7 @@ section {
color: #999999;
border: 1px solid #DDD;
padding: 0.3em;
font-size: 14px;
}
.wall-item-comment-wrapper .comment-edit-text-full {
font-size: 14px;
@ -1329,9 +1341,9 @@ section {
margin: 0px 2em 20px 0px;
}
#profile-jot-form #profile-jot-text {
height: 3.0em;
height: 2.0em;
width: 99%;
font-size: 10px;
font-size: 15px;
color: #999999;
border: 1px solid #DDD;
padding: 0.3em;
@ -1416,12 +1428,13 @@ section {
margin-top: 10px;
}
#profile-jot-form #jot-title {
border: 0px;
margin: 0px;
height: 20px;
width: 700px;
font-weight: bold;
border: 1px solid #ffffff;
border-radius: 5px 5px 5px 5px;
font-weight: bold;
height: 20px;
margin: 0 0 5px;
width: 60%;
border: 1px solid #ffffff;
}
#profile-jot-form #jot-title:-webkit-input-placeholder {
font-weight: normal;
@ -1528,6 +1541,7 @@ section {
float: right;
margin-left: 10px;
margin-top: 2px;
font-size: 10px;
}
#profile-jot-perms{
float: right;
@ -1871,7 +1885,12 @@ blockquote {
padding-left: 9px;
margin: 0 0 0 .8ex;
}
.aprofile dt{