aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--boot.php21
-rw-r--r--images/smiley-cool.gifbin0 -> 354 bytes
-rw-r--r--images/smiley-cry.gifbin0 -> 329 bytes
-rw-r--r--images/smiley-embarassed.gifbin0 -> 331 bytes
-rw-r--r--images/smiley-foot-in-mouth.gifbin0 -> 344 bytes
-rw-r--r--images/smiley-frown.gifbin0 -> 340 bytes
-rw-r--r--images/smiley-innocent.gifbin0 -> 336 bytes
-rw-r--r--images/smiley-kiss.gifbin0 -> 338 bytes
-rw-r--r--images/smiley-laughing.gifbin0 -> 344 bytes
-rw-r--r--images/smiley-money-mouth.gifbin0 -> 321 bytes
-rw-r--r--images/smiley-sealed.gifbin0 -> 325 bytes
-rw-r--r--images/smiley-smile.gifbin0 -> 345 bytes
-rw-r--r--images/smiley-surprised.gifbin0 -> 342 bytes
-rw-r--r--images/smiley-tongue-out.gifbin0 -> 328 bytes
-rw-r--r--images/smiley-undecided.gifbin0 -> 337 bytes
-rw-r--r--images/smiley-wink.gifbin0 -> 351 bytes
-rw-r--r--images/smiley-yell.gifbin0 -> 336 bytes
-rw-r--r--include/dba.php1
-rw-r--r--index.php115
-rw-r--r--mod/dfrn_confirm.php178
-rw-r--r--mod/display.php2
-rw-r--r--mod/network.php2
-rw-r--r--mod/profile.php2
23 files changed, 241 insertions, 80 deletions
diff --git a/boot.php b/boot.php
index 451a622c0..c4bdb1187 100644
--- a/boot.php
+++ b/boot.php
@@ -1589,4 +1589,25 @@ if(! function_exists('linkify')) {
function linkify($s) {
$s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%]*)/", ' <a href="$1" >$1</a>', $s);
return($s);
+}}
+
+if(! function_exists('smilies')) {
+function smilies($s) {
+ $a = get_app();
+
+ return str_replace(
+ array( ':-)', ';-)', ':-(', ':(', ':-P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'),
+ array(
+ '<img src="' . $a->get_baseurl() . '/images/smiley-smile.gif" alt=":-)" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-wink.gif" alt=";-)" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-frown.gif" alt=":-(" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-frown.gif" alt=":(" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-P" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-\"" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-x" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-X" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-laughing.gif" alt=":-D" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-surprised.gif" alt="8-|" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-surprised.gif" alt="8-O" />'
+ ), $s);
}} \ No newline at end of file
diff --git a/images/smiley-cool.gif b/images/smiley-cool.gif
new file mode 100644
index 000000000..ba90cc36f
--- /dev/null
+++ b/images/smiley-cool.gif
Binary files differ
diff --git a/images/smiley-cry.gif b/images/smiley-cry.gif
new file mode 100644
index 000000000..74d897a4f
--- /dev/null
+++ b/images/smiley-cry.gif
Binary files differ
diff --git a/images/smiley-embarassed.gif b/images/smiley-embarassed.gif
new file mode 100644
index 000000000..963a96b8a
--- /dev/null
+++ b/images/smiley-embarassed.gif
Binary files differ
diff --git a/images/smiley-foot-in-mouth.gif b/images/smiley-foot-in-mouth.gif
new file mode 100644
index 000000000..16f68cc1e
--- /dev/null
+++ b/images/smiley-foot-in-mouth.gif
Binary files differ
diff --git a/images/smiley-frown.gif b/images/smiley-frown.gif
new file mode 100644
index 000000000..716f55e16
--- /dev/null
+++ b/images/smiley-frown.gif
Binary files differ
diff --git a/images/smiley-innocent.gif b/images/smiley-innocent.gif
new file mode 100644
index 000000000..334d49e0e
--- /dev/null
+++ b/images/smiley-innocent.gif
Binary files differ
diff --git a/images/smiley-kiss.gif b/images/smiley-kiss.gif
new file mode 100644
index 000000000..4efd549ed
--- /dev/null
+++ b/images/smiley-kiss.gif
Binary files differ
diff --git a/images/smiley-laughing.gif b/images/smiley-laughing.gif
new file mode 100644
index 000000000..1606c119e
--- /dev/null
+++ b/images/smiley-laughing.gif
Binary files differ
diff --git a/images/smiley-money-mouth.gif b/images/smiley-money-mouth.gif
new file mode 100644
index 000000000..ca2451e10
--- /dev/null
+++ b/images/smiley-money-mouth.gif
Binary files differ
diff --git a/images/smiley-sealed.gif b/images/smiley-sealed.gif
new file mode 100644
index 000000000..b33d3cca1
--- /dev/null
+++ b/images/smiley-sealed.gif
Binary files differ
diff --git a/images/smiley-smile.gif b/images/smiley-smile.gif
new file mode 100644
index 000000000..e6a9e60d5
--- /dev/null
+++ b/images/smiley-smile.gif
Binary files differ
diff --git a/images/smiley-surprised.gif b/images/smiley-surprised.gif
new file mode 100644
index 000000000..cb99cdd91
--- /dev/null
+++ b/images/smiley-surprised.gif
Binary files differ
diff --git a/images/smiley-tongue-out.gif b/images/smiley-tongue-out.gif
new file mode 100644
index 000000000..2075dc160
--- /dev/null
+++ b/images/smiley-tongue-out.gif
Binary files differ
diff --git a/images/smiley-undecided.gif b/images/smiley-undecided.gif
new file mode 100644
index 000000000..bef7e2573
--- /dev/null
+++ b/images/smiley-undecided.gif
Binary files differ
diff --git a/images/smiley-wink.gif b/images/smiley-wink.gif
new file mode 100644
index 000000000..9faf1aff8
--- /dev/null
+++ b/images/smiley-wink.gif
Binary files differ
diff --git a/images/smiley-yell.gif b/images/smiley-yell.gif
new file mode 100644
index 000000000..648e6e879
--- /dev/null
+++ b/images/smiley-yell.gif
Binary files differ
diff --git a/include/dba.php b/include/dba.php
index fd403b560..ae3a4957b 100644
--- a/include/dba.php
+++ b/include/dba.php
@@ -28,7 +28,6 @@ class dba {
}
public function q($sql) {
- global $debug_text;
if(! $this->db )
return false;
diff --git a/index.php b/index.php
index 4ad5f17e2..f2c43a8b3 100644
--- a/index.php
+++ b/index.php
@@ -1,28 +1,66 @@
<?php
-require_once("boot.php");
+/**
+ *
+ * Friendika
+ *
+ */
-$a = new App;
+/**
+ *
+ * bootstrap the application
+ *
+ */
+
+require_once('boot.php');
-$debug_text = ''; // Debugging functions should never be used on production systems.
+$a = new App;
-// Setup the language and database.
+/**
+ *
+ * Load the configuration file which contains our DB credentials.
+ * Ignore errors. If the file doesn't exist, we are running in installation mode.
+ *
+ */
$install = ((file_exists('.htconfig.php')) ? false : true);
@include(".htconfig.php");
-// get language setting directly from system variables, bypassing get_config()
-// as database may not yet be configured.
+/**
+ *
+ * Get the language setting directly from system variables, bypassing get_config()
+ * as database may not yet be configured.
+ *
+ */
$lang = ((isset($a->config['system']['language'])) ? $a->config['system']['language'] : 'en');
load_translation_table($lang);
+/**
+ *
+ * Try to open the database;
+ *
+ */
+
require_once("dba.php");
$db = new dba($db_host, $db_user, $db_pass, $db_data, $install);
unset($db_host, $db_user, $db_pass, $db_data);
+
+/**
+ *
+ * Important stuff we always need to do.
+ * Initialise authentication and date and time.
+ * Create the HTML head for the page, even if we may not use it (xml, etc.)
+ * The order of these may be important so use caution if you think they're all
+ * intertwingled with no logical order and decide to sort it out. Some of the
+ * dependencies have changed, but at least at one time in the recent past - the
+ * order was critical to everything working properly
+ *
+ */
+
if(! $install)
require_once("session.php");
@@ -34,6 +72,17 @@ $a->init_pagehead();
session_start();
+/**
+ *
+ * For Mozilla auth manager - still needs sorting, and this might conflict with LRDD header.
+ * Apache/PHP lumps the Link: headers into one - and other services might not be able to parse it
+ * this way. There's a PHP flag to link the headers because by default this will over-write any other
+ * link header.
+ *
+ * What we really need to do is output the raw headers ourselves so we can keep them separate.
+ *
+ */
+
// header('Link: <' . $a->get_baseurl() . '/amcd>; rel="acct-mgmt";');
if((x($_SESSION,'authenticated')) || (x($_POST,'auth-params')) || ($a->module === 'login'))
@@ -45,11 +94,34 @@ if(! x($_SESSION,'authenticated'))
if(! x($_SESSION,'sysmsg'))
$_SESSION['sysmsg'] = '';
+/*
+ * check_config() is responible for running update scripts. These automatically
+ * update the DB schema whenever we push a new one out.
+ */
+
+
if($install)
$a->module = 'install';
else
check_config($a);
+
+/**
+ *
+ * We have already parsed the server path into $->argc and $a->argv
+ *
+ * $a->argv[0] is our module name. We will load the file mod/{$a->argv[0]}.php
+ * and use it for handling our URL request.
+ * The module file contains a few functions that we call in various circumstances
+ * and in the following order:
+ *
+ * "module"_init
+ * "module"_post (only if there are $_POST variables)
+ * "module"_afterpost
+ * "module"_content - the string return of this function contains our page body
+ *
+ */
+
if(strlen($a->module)) {
if(file_exists("mod/{$a->module}.php")) {
include("mod/{$a->module}.php");
@@ -66,7 +138,7 @@ if($a->module_loaded) {
if(function_exists($a->module . '_init')) {
$func = $a->module . '_init';
$func($a);
- }
+ }
if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! $a->error)
&& (function_exists($a->module . '_post'))
@@ -93,7 +165,11 @@ if(stristr($_SESSION['sysmsg'], t('Permission denied'))) {
header($_SERVER["SERVER_PROTOCOL"] . ' 403 ' . t('Permission denied.'));
}
-// report anything important happening
+/**
+ *
+ * Report anything which needs to be communicated in the notification area (before the main body)
+ *
+ */
if(x($_SESSION,'sysmsg')) {
$a->page['content'] = "<div id=\"sysmsg\" class=\"error-message\">{$_SESSION['sysmsg']}</div>\r\n"
@@ -101,19 +177,30 @@ if(x($_SESSION,'sysmsg')) {
unset($_SESSION['sysmsg']);
}
-
-// Feel free to comment out this line on production sites.
-$a->page['content'] .= $debug_text;
+/**
+ *
+ * Add a place for the pause/resume Ajax indicator
+ *
+ */
$a->page['content'] .= '<div id="pause"></div>';
-// build page
-// Navigation (menu) template
+/**
+ *
+ * Add the navigation (menu) template
+ *
+ */
+
if($a->module != 'install')
require_once("nav.php");
-// make sure the desired theme exists, though if the default theme doesn't exist we're stuffed.
+/**
+ *
+ * Build the page - now that we have all the components
+ * Make sure the desired theme exists, though if the default theme doesn't exist we're stuffed.
+ *
+ */
if((x($_SESSION,'theme')) && (! file_exists('view/theme/' . $_SESSION['theme'] . '/style.css')))
unset($_SESSION['theme']);
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 950d589f3..7018bf52b 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -1,14 +1,28 @@
<?php
-// There are two possible entry points.
-
+/*
+ * Module: dfrn_confirm
+ * Purpose: Friendship acceptance for DFRN contacts
+ *
+ * There are two possible entry points and three scenarios.
+ *
+ * 1. A form was submitted by our user approving a friendship that originated elsewhere.
+ * This may also be called from dfrn_request to automatically approve a friendship.
+ *
+ * 2. We may be the target or other side of the conversation to scenario 1, and will
+ * interact with that process on our own user's behalf.
+ *
+ */
function dfrn_confirm_post(&$a,$handsfree = null) {
if(is_array($handsfree)) {
- // called directly from dfrn_request due to automatic friend acceptance
- // any $_POST parameters we may require are supplied in the $handsfree array
+ /**
+ * We were called directly from dfrn_request due to automatic friend acceptance.
+ * Any $_POST parameters we may require are supplied in the $handsfree array.
+ *
+ */
$node = $handsfree['node'];
$a->interactive = false; // notice() becomes a no-op since nobody is there to see it
@@ -19,10 +33,17 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$node = $a->argv[1];
}
- // Main entry point. Our user received a friend request notification (perhaps
- // from another site) and clicked 'Approve'. $POST['source_url'] is not set.
- // OR we have been called directly from dfrn_request ($handsfree != null) due to
- // this being a page type which supports automatic friend acceptance.
+ /**
+ *
+ * Main entry point. Scenario 1. Our user received a friend request notification (perhaps
+ * from another site) and clicked 'Approve'.
+ * $POST['source_url'] is not set. If it is, it indicates Scenario 2.
+ *
+ * We may also have been called directly from dfrn_request ($handsfree != null) due to
+ * this being a page type which supports automatic friend acceptance. That is also Scenario 1
+ * since we are operating on behalf of our registered user to approve a friendship.
+ *
+ */
if(! x($_POST,'source_url')) {
@@ -43,35 +64,53 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
}
- // These come from either the friend request notification form or $handsfree array.
+ // These data elements may come from either the friend request notification form or $handsfree array.
if(is_array($handsfree)) {
- $dfrn_id = $handsfree['dfrn_id'];
- $intro_id = $handsfree['intro_id'];
- $duplex = $handsfree['duplex'];
logger('dfrn_confirm: Confirm in handsfree mode');
+ $dfrn_id = $handsfree['dfrn_id'];
+ $intro_id = $handsfree['intro_id'];
+ $duplex = $handsfree['duplex'];
}
else {
- $dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : "");
- $intro_id = intval($_POST['intro_id']);
- $duplex = intval($_POST['duplex']);
- $cid = intval($_POST['contact_id']);
+ $dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : "");
+ $intro_id = ((x($_POST,'intro_id')) ? intval($_POST['intro_id']) : 0 );
+ $duplex = ((x($_POST,'duplex')) ? intval($_POST['duplex']) : 0 );
+ $cid = ((x($_POST,'contact_id')) ? intval($_POST['contact_id']) : 0 );
}
+ /**
+ *
+ * Ensure that dfrn_id has precedence when we go to find the contact record.
+ * We only want to search based on contact id if there is no dfrn_id,
+ * e.g. for OStatus network followers.
+ *
+ */
+
+ if(strlen($dfrn_id))
+ $cid = 0;
+
logger('dfrn_confirm: Confirming request for dfrn_id (issued) ' . $dfrn_id);
+ if($cid)
+ logger('dfrn_confirm: Confirming follower with contact_id: ' . $cid);
- // The other person will have been issued an ID when they first requested friendship.
- // Locate their record. At this time, their record will have both pending and blocked set to 1.
- // There won't be any dfrn_id if this is a network follower, so use the contact_id instead.
+ /**
+ *
+ * The other person will have been issued an ID when they first requested friendship.
+ * Locate their record. At this time, their record will have both pending and blocked set to 1.
+ * There won't be any dfrn_id if this is a network follower, so use the contact_id instead.
+ *
+ */
$r = q("SELECT * FROM `contact` WHERE ( ( `issued-id` != '' AND `issued-id` = '%s' ) OR ( `id` = %d AND `id` != 0 ) ) AND `uid` = %d LIMIT 1",
- dbesc($dfrn_id),
- intval($cid),
- intval($uid)
+ dbesc($dfrn_id),
+ intval($cid),
+ intval($uid)
);
if(! count($r)) {
+ logger('dfrn_confirm: Contact not found in DB.');
notice( t('Contact not found.') . EOL );
return;
}
@@ -88,11 +127,15 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if($network === 'dfrn') {
- // Generate a key pair for all further communications with this person.
- // We have a keypair for every contact, and a site key for unknown people.
- // This provides a means to carry on relationships with other people if
- // any single key is compromised. It is a robust key. We're much more
- // worried about key leakage than anybody cracking it.
+ /**
+ *
+ * Generate a key pair for all further communications with this person.
+ * We have a keypair for every contact, and a site key for unknown people.
+ * This provides a means to carry on relationships with other people if
+ * any single key is compromised. It is a robust key. We're much more
+ * worried about key leakage than anybody cracking it.
+ *
+ */
$res = openssl_pkey_new(array(
'digest_alg' => 'sha1',
@@ -100,7 +143,6 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
'encrypt_key' => false )
);
-
$private_key = '';
openssl_pkey_export($res, $private_key);
@@ -118,16 +160,20 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$params = array();
- // Per the protocol document, we will verify both ends by encrypting the dfrn_id with our
- // site private key (person on the other end can decrypt it with our site public key).
- // Then encrypt our profile URL with the other person's site public key. They can decrypt
- // it with their site private key. If the decryption on the other end fails for either
- // item, it indicates tampering or key failure on at least one site and we will not be
- // able to provide a secure communication pathway.
-
- // If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3
- // or later) then we encrypt the personal public key we send them using AES-256-CBC and a
- // random key which is encrypted with their site public key.
+ /**
+ *
+ * Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our
+ * site private key (person on the other end can decrypt it with our site public key).
+ * Then encrypt our profile URL with the other person's site public key. They can decrypt
+ * it with their site private key. If the decryption on the other end fails for either
+ * item, it indicates tampering or key failure on at least one site and we will not be
+ * able to provide a secure communication pathway.
+ *
+ * If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3
+ * or later) then we encrypt the personal public key we send them using AES-256-CBC and a
+ * random key which is encrypted with their site public key.
+ *
+ */
$src_aes_key = random_string();
@@ -153,7 +199,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if($duplex == 1)
$params['duplex'] = 1;
- logger('dfrn_confirm: Confirm: posted data: ' . print_r($params,true), LOGGER_DATA);
+ logger('dfrn_confirm: Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA);
// POST all this stuff to the other site.
@@ -233,9 +279,16 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
return;
}
- // We have now established a relationship with the other site.
- // Let's make our own personal copy of their profile photo so we don't have
- // to always load it from their site.
+
+ /*
+ *
+ * We have now established a relationship with the other site.
+ * Let's make our own personal copy of their profile photo so we don't have
+ * to always load it from their site.
+ *
+ * We will also update the contact record with the nature and scope of the relationship.
+ *
+ */
require_once("Photo.php");
@@ -276,12 +329,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
);
}
else {
+ // $network !== 'dfrn'
$notify = '';
$poll = '';
- // $network !== 'dfrn'
-
$arr = lrdd($contact['url']);
if(count($arr)) {
foreach($arr as $link) {
@@ -332,31 +384,33 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if($handsfree === null)
goaway($a->get_baseurl() . '/contacts/' . intval($contact_id));
- return; //NOTREACHED
-
+ else
+ return;
+ //NOTREACHED
}
-
-
- // End of first scenario. [Local confirmation of remote friend request].
-
-
-
- // Begin scenario two. This is the remote response to the above scenario.
- // This will take place on the site that originally initiated the friend request.
- // In the section above where the confirming party makes a POST and
- // retrieves xml status information, they are communicating with the following code.
+ /**
+ *
+ *
+ * End of Scenario 1. [Local confirmation of remote friend request].
+ *
+ * Begin Scenario 2. This is the remote response to the above scenario.
+ * This will take place on the site that originally initiated the friend request.
+ * In the section above where the confirming party makes a POST and
+ * retrieves xml status information, they are communicating with the following code.
+ *
+ */
if(x($_POST,'source_url')) {
// We are processing an external confirmation to an introduction created by our user.
- $public_key = $_POST['public_key'];
- $dfrn_id = hex2bin($_POST['dfrn_id']);
- $source_url = hex2bin($_POST['source_url']);
- $aes_key = $_POST['aes_key'];
- $duplex = $_POST['duplex'];
- $version_id = (float) $_POST['dfrn_version'];
+ $public_key = ((x($_POST,'public_key')) ? $_POST['public_key'] : '');
+ $dfrn_id = ((x($_POST,'dfrn_id')) ? hex2bin($_POST['dfrn_id']) : '');
+ $source_url = ((x($_POST,'source_url')) ? hex2bin($_POST['source_url']) : '');
+ $aes_key = ((x($_POST,'aes_key')) ? $_POST['aes_key'] : '');
+ $duplex = ((x($_POST,'duplex')) ? intval($_POST['duplex']) : 0 );
+ $version_id = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
logger('dfrn_confirm: requestee contacted: ' . $node);
diff --git a/mod/display.php b/mod/display.php
index ec036de62..369161619 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -249,7 +249,7 @@ function display_content(&$a) {
'$osparkle' => $osparkle,
'$thumb' => $profile_avatar,
'$title' => $item['title'],
- '$body' => bbcode($item['body']),
+ '$body' => smilies(bbcode($item['body'])),
'$ago' => relative_date($item['created']),
'$lock' => $lock,
'$location' => $location,
diff --git a/mod/network.php b/mod/network.php
index c52bb74fc..43c55b8e3 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -292,7 +292,7 @@ function network_content(&$a, $update = 0) {
'$osparkle' => $osparkle,
'$sparkle' => $sparkle,
'$title' => $item['title'],
- '$body' => bbcode($item['body']),
+ '$body' => smilies(bbcode($item['body'])),
'$ago' => relative_date($item['created']),
'$lock' => $lock,
'$location' => $location,
diff --git a/mod/profile.php b/mod/profile.php
index d09e0187b..a431f4bdd 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -388,7 +388,7 @@ function profile_content(&$a, $update = 0) {
'$thumb' => $profile_avatar,
'$sparkle' => $sparkle,
'$title' => $item['title'],
- '$body' => bbcode($item['body']),
+ '$body' => smilies(bbcode($item['body'])),
'$ago' => relative_date($item['created']),
'$lock' => $lock,
'$location' => $location,